diff --git a/bot.py b/bot.py index 915b7778..6f1ec9c5 100644 --- a/bot.py +++ b/bot.py @@ -7,7 +7,6 @@ from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter nonebot.init() -from zhenxun.services.db_context import disconnect, init driver = nonebot.get_driver() driver.register_adapter(OneBotV11Adapter) @@ -15,6 +14,7 @@ driver.register_adapter(KaiheilaAdapter) driver.register_adapter(DoDoAdapter) # driver.register_adapter(DiscordAdapter) +from zhenxun.services.db_context import init, disconnect driver.on_startup(init) driver.on_shutdown(disconnect) diff --git a/zhenxun/builtin_plugins/platform/__init__.py b/zhenxun/builtin_plugins/platform/__init__.py index ef75716d..974716dd 100644 --- a/zhenxun/builtin_plugins/platform/__init__.py +++ b/zhenxun/builtin_plugins/platform/__init__.py @@ -13,3 +13,11 @@ try: nonebot.load_plugins(str((path / "qq").resolve())) except ImportError: logger.warning("未安装 onebot-adapter,无法加载QQ平台专用插件...") + + +try: + from nonebot.adapters.qq import Bot # noqa: F401 + + nonebot.load_plugins(str((path / "qq_api").resolve())) +except ImportError: + logger.warning("未安装 onebot-adapter,无法加载QQ官平台专用插件...") diff --git a/zhenxun/builtin_plugins/platform/qq_api/ug_watch.py b/zhenxun/builtin_plugins/platform/qq_api/ug_watch.py new file mode 100644 index 00000000..7890ceff --- /dev/null +++ b/zhenxun/builtin_plugins/platform/qq_api/ug_watch.py @@ -0,0 +1,28 @@ +from nonebot_plugin_uninfo import Uninfo +from nonebot.message import run_preprocessor + +from zhenxun.services.log import logger +from zhenxun.utils.platform import PlatformUtils +from zhenxun.models.friend_user import FriendUser +from zhenxun.models.group_console import GroupConsole +from zhenxun.models.group_member_info import GroupInfoUser + + +@run_preprocessor +async def do_something(session: Uninfo): + platform = PlatformUtils.get_platform(session) + if session.group: + if not await GroupConsole.exists(group_id=session.group.id): + await GroupConsole.create(group_id=session.group.id) + logger.info("添加当前群组ID信息" "", session=session) + + if not await GroupInfoUser.exists( + user_id=session.user.id, group_id=session.group.id + ): + await GroupInfoUser.create( + user_id=session.user.id, group_id=session.group.id, platform=platform + ) + logger.info("添加当前用户群组ID信息", "", session=session) + elif not await FriendUser.exists(user_id=session.user.id, platform=platform): + await FriendUser.create(user_id=session.user.id, platform=platform) + logger.info("添加当前好友用户信息", "", session=session) diff --git a/zhenxun/builtin_plugins/shop/_data_source.py b/zhenxun/builtin_plugins/shop/_data_source.py index d11f0f4e..afe2681d 100644 --- a/zhenxun/builtin_plugins/shop/_data_source.py +++ b/zhenxun/builtin_plugins/shop/_data_source.py @@ -81,7 +81,9 @@ class ShopParam(BaseModel): """UniMessage""" -async def gold_rank(session: Uninfo, group_id: str | None, num: int): +async def gold_rank( + session: Uninfo, group_id: str | None, num: int +) -> BuildImage | str: query = UserConsole if group_id: uid_list = await GroupInfoUser.filter(group_id=group_id).values_list( @@ -90,6 +92,8 @@ async def gold_rank(session: Uninfo, group_id: str | None, num: int): if uid_list: query = query.filter(user_id__in=uid_list) user_list = await query.annotate().order_by("-gold").values_list("user_id", "gold") + if not user_list: + return "当前还没有人拥有金币哦..." user_id_list = [user[0] for user in user_list] index = user_id_list.index(session.user.id) + 1 user_list = user_list[:num] if num < len(user_list) else user_list diff --git a/zhenxun/builtin_plugins/sign_in/_data_source.py b/zhenxun/builtin_plugins/sign_in/_data_source.py index 87e22256..abf30c08 100644 --- a/zhenxun/builtin_plugins/sign_in/_data_source.py +++ b/zhenxun/builtin_plugins/sign_in/_data_source.py @@ -33,7 +33,7 @@ class SignManage: @classmethod async def rank( cls, session: Uninfo, num: int, group_id: str | None = None - ) -> BuildImage: # sourcery skip: avoid-builtin-shadow + ) -> BuildImage | str: # sourcery skip: avoid-builtin-shadow """好感度排行 参数: @@ -56,6 +56,8 @@ class SignManage: .order_by("-impression") .values_list("user_id", "impression", "sign_count", "platform") ) + if not user_list: + return "当前还没有人签到过哦..." user_id_list = [user[0] for user in user_list] index = user_id_list.index(session.user.id) + 1 user_list = user_list[:num] if num < len(user_list) else user_list diff --git a/zhenxun/models/group_console.py b/zhenxun/models/group_console.py index 6f3ca49f..a32d76f5 100644 --- a/zhenxun/models/group_console.py +++ b/zhenxun/models/group_console.py @@ -36,9 +36,11 @@ class GroupConsole(Model): superuser_block_plugin = fields.TextField( default="", description="超级用户禁用插件" ) + """超级用户禁用插件""" block_task = fields.TextField(default="", description="禁用插件") """禁用插件""" superuser_block_task = fields.TextField(default="", description="超级用户禁用被动") + """超级用户禁用被动""" platform = fields.CharField(255, default="qq", description="所属平台") """所属平台"""