diff --git a/README.md b/README.md index 9af219fd..1c96dfdf 100644 --- a/README.md +++ b/README.md @@ -304,6 +304,7 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能 * 修复epic报错,优化简介 [@pull/1226](https://github.com/HibiKier/zhenxun_bot/pull/1226) * 修复词条在某些回答下出错 * 原神黄历改为PIL +* 允许真寻自身触发命令,提供配置项 `self_message:STATUS` ### 2022/12/27 \[v0.1.6.6] diff --git a/plugins/self_message/__init__.py b/plugins/self_message/__init__.py new file mode 100644 index 00000000..4720f948 --- /dev/null +++ b/plugins/self_message/__init__.py @@ -0,0 +1,85 @@ +from datetime import datetime + +from configs.config import Config +from nonebot import on +from nonebot.adapters.onebot.v11 import (Bot, Event, GroupMessageEvent, + PrivateMessageEvent) +from nonebot.message import handle_event + +from ._rule import rule + + +__zx_plugin_name__ = "自身消息触发 [Hidden]" +__plugin_version__ = 0.1 + +Config.add_plugin_config( + "self_message", + "STATUS", + False, + help_="允许真寻自身触发命令,需要在go-cqhttp配置文件中report-self-message修改为true,触发命令时需前缀cmd且受权限影响,例如:cmd签到", + default_value=False, +) + +message_sent = on( + type="message_sent", + priority=999, + block=False, + rule=rule(), +) + + +@message_sent.handle() +async def handle_message_sent(bot: Bot, event: Event): + msg = getattr(event, "message", "") + self_id = event.self_id + user_id = getattr(event, "user_id", -1) + msg_id = getattr(event, "message_id", -1) + msg_type = getattr(event, "message_type") + if ( + str(user_id) not in bot.config.superusers and self_id != user_id + ) or not msg.lower().startswith("cmd"): + return + msg = msg[3:] + if msg_type == "group": + new_event = GroupMessageEvent.parse_obj( + { + "time": getattr(event, "time", int(datetime.now().timestamp())), + "self_id": self_id, + "user_id": user_id, + "message": msg, + "raw_message": getattr(event, "raw_message", ""), + "post_type": "message", + "sub_type": getattr(event, "sub_type", "normal"), + "group_id": getattr(event, "group_id", -1), + "message_type": getattr(event, "message_type", "group"), + "message_id": msg_id, + "font": getattr(event, "font", 0), + "sender": getattr(event, "sender", {"user_id": user_id}), + "to_me": True, + } + ) + # await _check_reply(bot, new_event) + # _check_at_me(bot, new_event) + # _check_nickname(bot, new_event) + await handle_event(bot=bot, event=new_event) + elif msg_type == "private": + target_id = getattr(event, "target_id") + if target_id == user_id: + new_event = PrivateMessageEvent.parse_obj( + { + "time": getattr(event, "time", int(datetime.now().timestamp())), + "self_id": self_id, + "user_id": user_id, + "message": getattr(event, "message", ""), + "raw_message": getattr(event, "raw_message", ""), + "post_type": "message", + "sub_type": getattr(event, "sub_type"), + "message_type": msg_type, + "message_id": msg_id, + "font": getattr(event, "font", 0), + "sender": getattr(event, "sender"), + "to_me": True, + "target_id": target_id, + } + ) + await handle_event(bot=bot, event=new_event) diff --git a/plugins/self_message/_rule.py b/plugins/self_message/_rule.py new file mode 100644 index 00000000..eb1f1cca --- /dev/null +++ b/plugins/self_message/_rule.py @@ -0,0 +1,9 @@ +from configs.config import Config +from nonebot.internal.rule import Rule + + +def rule() -> Rule: + async def _rule() -> bool: + return Config.get_config("self_message", "STATUS") + + return Rule(_rule)