diff options
Diffstat (limited to 'ATRI/plugins/essential.py')
-rw-r--r-- | ATRI/plugins/essential.py | 184 |
1 files changed, 62 insertions, 122 deletions
diff --git a/ATRI/plugins/essential.py b/ATRI/plugins/essential.py index 72090e3..6a14f1a 100644 --- a/ATRI/plugins/essential.py +++ b/ATRI/plugins/essential.py @@ -24,7 +24,7 @@ from nonebot.adapters.cqhttp import ( LuckyKingNotifyEvent, GroupUploadNoticeEvent, GroupRecallNoticeEvent, - FriendRecallNoticeEvent + FriendRecallNoticeEvent, ) import ATRI @@ -35,8 +35,8 @@ from ATRI.service import Service as sv from ATRI.utils.cqcode import coolq_code_check -PLUGIN_INFO_DIR = Path('.') / 'ATRI' / 'data' / 'service' / 'services' -ESSENTIAL_DIR = Path('.') / 'ATRI' / 'data' / 'database' / 'essential' +PLUGIN_INFO_DIR = Path(".") / "ATRI" / "data" / "service" / "services" +ESSENTIAL_DIR = Path(".") / "ATRI" / "data" / "database" / "essential" os.makedirs(PLUGIN_INFO_DIR, exist_ok=True) os.makedirs(ESSENTIAL_DIR, exist_ok=True) @@ -57,11 +57,7 @@ async def shutdown() -> None: shutil.rmtree(PLUGIN_INFO_DIR) logger.debug("成功!") except Exception: - repo = ( - '清理插件信息失败', - '请前往 ATRI/data/service/services 下', - '将 services 整个文件夹删除' - ) + repo = ("清理插件信息失败", "请前往 ATRI/data/service/services 下", "将 services 整个文件夹删除") time.sleep(10) raise Exception(repo) @@ -69,59 +65,49 @@ async def shutdown() -> None: @driver.on_bot_connect async def connect(bot) -> None: for superuser in BotSelfConfig.superusers: - await sv.NetworkPost.send_private_msg( - int(superuser), - "WebSocket 成功连接,数据开始传输。" - ) + await sv.NetworkPost.send_private_msg(int(superuser), "WebSocket 成功连接,数据开始传输。") @driver.on_bot_disconnect async def disconnect(bot) -> None: for superuser in BotSelfConfig.superusers: try: - await sv.NetworkPost.send_private_msg( - int(superuser), - "WebSocket 貌似断开了呢..." - ) + await sv.NetworkPost.send_private_msg(int(superuser), "WebSocket 貌似断开了呢...") except: logger.error("WebSocket 已断开,等待重连") @run_preprocessor # type: ignore -async def _check_block(matcher: Matcher, - bot: Bot, - event: MessageEvent, - state: T_State) -> None: +async def _check_block( + matcher: Matcher, bot: Bot, event: MessageEvent, state: T_State +) -> None: user = str(event.user_id) try: msg = str(event.message) except: msg = "" if not sv.BlockSystem.auth_user(user): - raise IgnoredException(f'Block user: {user}') - + raise IgnoredException(f"Block user: {user}") + if not sv.Dormant.is_dormant(): if "/dormant" not in msg: - raise IgnoredException('Bot has been dormant.') - + raise IgnoredException("Bot has been dormant.") + if isinstance(event, GroupMessageEvent): group = str(event.group_id) if not sv.BlockSystem.auth_group(group): - raise IgnoredException(f'Block group: {group}') + raise IgnoredException(f"Block group: {group}") @run_preprocessor # type: ignore -async def _store_message(matcher: Matcher, - bot: Bot, - event, - state: T_State) -> None: +async def _store_message(matcher: Matcher, bot: Bot, event, state: T_State) -> None: if isinstance(event, GroupMessageEvent): if event.sub_type == "normal": - now_time = datetime.now().strftime('%Y-%m-%d') - GROUP_DIR = ESSENTIAL_DIR / 'chat_history' / f'{event.group_id}' + now_time = datetime.now().strftime("%Y-%m-%d") + GROUP_DIR = ESSENTIAL_DIR / "chat_history" / f"{event.group_id}" os.makedirs(GROUP_DIR, exist_ok=True) path = GROUP_DIR / f"{now_time}.chat.json" - now_time = datetime.now().strftime('%Y%m%d-%H%M%S') + now_time = datetime.now().strftime("%Y%m%d-%H%M%S") try: data = json.loads(path.read_bytes()) @@ -147,12 +133,12 @@ async def _store_message(matcher: Matcher, "area": event.sender.area, "level": event.sender.level, "role": event.sender.role, - "title": event.sender.title + "title": event.sender.title, }, - "to_me": str(event.to_me) + "to_me": str(event.to_me), } try: - with open(path, 'w', encoding='utf-8') as r: + with open(path, "w", encoding="utf-8") as r: r.write(json.dumps(data, indent=4)) logger.debug(f"写入消息成功,id: {event.message_id}") except WriteError: @@ -168,30 +154,24 @@ async def _store_message(matcher: Matcher, # 处理:好友请求 request_friend_event = sv.on_request() + @request_friend_event.handle() async def _request_friend_event(bot, event: FriendRequestEvent) -> None: file_name = "request_friend.json" path = ESSENTIAL_DIR / file_name path.parent.mkdir(exist_ok=True, parents=True) - + try: data = json.loads(path.read_bytes()) except: data = dict() - data[event.flag] = { - "user_id": event.user_id, - "comment": event.comment - } + data[event.flag] = {"user_id": event.user_id, "comment": event.comment} try: - with open(path, 'w', encoding='utf-8') as r: - r.write( - json.dumps( - data, indent=4 - ) - ) + with open(path, "w", encoding="utf-8") as r: + r.write(json.dumps(data, indent=4)) except WriteError: raise WriteError("Writing file failed!") - + for superuser in BotSelfConfig.superusers: msg = ( "主人,收到一条好友请求:\n" @@ -199,21 +179,19 @@ async def _request_friend_event(bot, event: FriendRequestEvent) -> None: f"申请信息:{event.comment}\n" f"申请码:{event.flag}" ) - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) # 处理:邀请入群,如身为管理,还附有入群请求 request_group_event = sv.on_request() + @request_group_event.handle() async def _request_group_event(bot, event: GroupRequestEvent) -> None: file_name = "request_group.json" path = ESSENTIAL_DIR / file_name path.parent.mkdir(exist_ok=True, parents=True) - + try: data = json.loads(path.read_bytes()) except: @@ -222,18 +200,14 @@ async def _request_group_event(bot, event: GroupRequestEvent) -> None: "user_id": event.user_id, "group_id": event.group_id, "sub_type": event.sub_type, - "comment": event.comment + "comment": event.comment, } try: - with open(path, 'w', encoding='utf-8') as r: - r.write( - json.dumps( - data, indent=4 - ) - ) + with open(path, "w", encoding="utf-8") as r: + r.write(json.dumps(data, indent=4)) except WriteError: raise WriteError("Writing file failed!") - + for superuser in BotSelfConfig.superusers: msg = ( "主人,收到一条入群请求:\n" @@ -241,37 +215,27 @@ async def _request_group_event(bot, event: GroupRequestEvent) -> None: f"申请信息:{event.comment}\n" f"申请码:{event.flag}" ) - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) - + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) + # 处理群成员变动 group_member_event = sv.on_notice() + @group_member_event.handle() async def _group_member_event(bot: Bot, event: GroupIncreaseNoticeEvent) -> None: - msg = ( - "好欸!事新人!\n" - f"在下 {choice(list(BotSelfConfig.nickname))} 哒!w!" - ) + msg = "好欸!事新人!\n" f"在下 {choice(list(BotSelfConfig.nickname))} 哒!w!" await group_member_event.finish(msg) + @group_member_event.handle() async def _gro(bot: Bot, event: GroupDecreaseNoticeEvent) -> None: if event.is_tome(): if event.user_id != event.self_id: return - msg = ( - "呜呜呜,主人" - f"咱被群 {event.group_id} 里的 {event.operator_id} 扔出来了..." - ) + msg = "呜呜呜,主人" f"咱被群 {event.group_id} 里的 {event.operator_id} 扔出来了..." for superuser in BotSelfConfig.superusers: - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) else: await group_member_event.finish("阿!有人离开了我们...") @@ -279,26 +243,27 @@ async def _gro(bot: Bot, event: GroupDecreaseNoticeEvent) -> None: # 处理群管理事件 group_admin_event = sv.on_notice() + @group_admin_event.handle() async def _group_admin_event(bot: Bot, event: GroupAdminNoticeEvent) -> None: if not event.is_tome(): return - + for superuser in BotSelfConfig.superusers: await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=f"好欸!主人!我在群 {event.group_id} 成为了管理!!" + user_id=int(superuser), message=f"好欸!主人!我在群 {event.group_id} 成为了管理!!" ) # 处理群禁言事件 group_ban_event = sv.on_notice() + @group_ban_event.handle() async def _group_ban_event(bot: Bot, event: GroupBanNoticeEvent) -> None: if not event.is_tome(): return - + if event.duration: msg = ( "那个..。,主人\n" @@ -306,71 +271,54 @@ async def _group_ban_event(bot: Bot, event: GroupBanNoticeEvent) -> None: f"时长...是 {event.duration} 秒" ) for superuser in BotSelfConfig.superusers: - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) else: - msg = ( - "好欸!主人\n" - f"咱在群 {event.group_id} 的口球被 {event.operator_id} 解除了!" - ) + msg = "好欸!主人\n" f"咱在群 {event.group_id} 的口球被 {event.operator_id} 解除了!" for superuser in BotSelfConfig.superusers: - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) # 处理群红包运气王事件 lucky_read_bag_event = sv.on_notice() + @lucky_read_bag_event.handle() async def _lucky_read_bag_event(bot, event: LuckyKingNotifyEvent) -> None: - msg = ( - "8行,这可忍?" - f"gkd [CQ:at,qq={event.user_id}] 发一个!" - ) + msg = "8行,这可忍?" f"gkd [CQ:at,qq={event.user_id}] 发一个!" await lucky_read_bag_event.finish(Message(msg)) # 处理群文件上传事件 group_file_upload_event = sv.on_notice() + @group_file_upload_event.handle() -async def _group_file_upload_event(bot, - event: GroupUploadNoticeEvent) -> None: +async def _group_file_upload_event(bot, event: GroupUploadNoticeEvent) -> None: await group_file_upload_event.finish("让我康康传了啥好东西") # 处理撤回事件 recall_event = sv.on_notice() + @recall_event.handle() async def _recall_event(bot: Bot, event: GroupRecallNoticeEvent) -> None: try: repo = await bot.get_msg(message_id=event.message_id) except: return - + group = event.group_id repo = str(repo["message"]) check = await coolq_code_check(repo, group=group) if not check: repo = repo.replace("CQ", "QC") - msg = ( - "主人,咱拿到了一条撤回信息!\n" - f"{event.user_id}@[群:{event.group_id}]\n" - "撤回了\n" - f"{repo}" - ) + msg = "主人,咱拿到了一条撤回信息!\n" f"{event.user_id}@[群:{event.group_id}]\n" "撤回了\n" f"{repo}" for superuser in BotSelfConfig.superusers: - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) + @recall_event.handle() async def _rec(bot: Bot, event: FriendRecallNoticeEvent) -> None: @@ -378,23 +326,15 @@ async def _rec(bot: Bot, event: FriendRecallNoticeEvent) -> None: repo = await bot.get_msg(message_id=event.message_id) except: return - + user = event.user_id repo = str(repo["message"]) check = await coolq_code_check(repo, user) if not check: repo = repo.replace("CQ", "QC") - - msg = ( - "主人,咱拿到了一条撤回信息!\n" - f"{event.user_id}@[私聊]" - "撤回了\n" - f"{repo}" - ) + + msg = "主人,咱拿到了一条撤回信息!\n" f"{event.user_id}@[私聊]" "撤回了\n" f"{repo}" await bot.send(event, "咱看到惹~!") for superuser in BotSelfConfig.superusers: - await sv.NetworkPost.send_private_msg( - user_id=int(superuser), - message=msg - ) + await sv.NetworkPost.send_private_msg(user_id=int(superuser), message=msg) |