From de339114600a558ecfc6cd0977ba53b060c95a6f Mon Sep 17 00:00:00 2001 From: lanvent Date: Tue, 18 Apr 2023 23:34:08 +0800 Subject: [PATCH] feat: add support for PATPAT context --- bridge/context.py | 1 + channel/wechat/wechat_channel.py | 16 +++++++++++----- channel/wechat/wechat_message.py | 10 ++++++++-- plugins/hello/hello.py | 13 ++++++++++++- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/bridge/context.py b/bridge/context.py index 7eac9c1..c1eb10c 100644 --- a/bridge/context.py +++ b/bridge/context.py @@ -9,6 +9,7 @@ class ContextType(Enum): IMAGE = 3 # 图片消息 IMAGE_CREATE = 10 # 创建图片命令 JOIN_GROUP = 20 # 加入群聊 + PATPAT = 21 # 拍了拍 def __str__(self): return self.name diff --git a/channel/wechat/wechat_channel.py b/channel/wechat/wechat_channel.py index b3099f6..cf200b1 100644 --- a/channel/wechat/wechat_channel.py +++ b/channel/wechat/wechat_channel.py @@ -26,7 +26,7 @@ from lib.itchat.content import * from plugins import * -@itchat.msg_register([TEXT, VOICE, PICTURE]) +@itchat.msg_register([TEXT, VOICE, PICTURE, NOTE]) def handler_single_msg(msg): try: cmsg = WeChatMessage(msg, False) @@ -170,12 +170,16 @@ class WechatChannel(ChatChannel): logger.debug("[WX]receive voice msg: {}".format(cmsg.content)) elif cmsg.ctype == ContextType.IMAGE: logger.debug("[WX]receive image msg: {}".format(cmsg.content)) - else: + elif cmsg.ctype == ContextType.PATPAT: + logger.debug("[WX]receive patpat msg: {}".format(cmsg.content)) + elif cmsg.ctype == ContextType.TEXT: logger.debug( "[WX]receive text msg: {}, cmsg={}".format( json.dumps(cmsg._rawmsg, ensure_ascii=False), cmsg ) ) + else: + logger.debug("[WX]receive msg: {}, cmsg={}".format(cmsg.content, cmsg)) context = self._compose_context( cmsg.ctype, cmsg.content, isgroup=False, msg=cmsg ) @@ -191,11 +195,13 @@ class WechatChannel(ChatChannel): logger.debug("[WX]receive voice for group msg: {}".format(cmsg.content)) elif cmsg.ctype == ContextType.IMAGE: logger.debug("[WX]receive image for group msg: {}".format(cmsg.content)) - elif cmsg.ctype == ContextType.JOIN_GROUP: - logger.debug("[WX]receive join group msg: {}".format(cmsg.content)) - else: + elif cmsg.ctype in [ContextType.JOIN_GROUP, ContextType.PATPAT]: + logger.debug("[WX]receive note msg: {}".format(cmsg.content)) + elif cmsg.ctype == ContextType.TEXT: # logger.debug("[WX]receive group msg: {}, cmsg={}".format(json.dumps(cmsg._rawmsg, ensure_ascii=False), cmsg)) pass + else: + logger.debug("[WX]receive group msg: {}".format(cmsg.content)) context = self._compose_context( cmsg.ctype, cmsg.content, isgroup=True, msg=cmsg ) diff --git a/channel/wechat/wechat_message.py b/channel/wechat/wechat_message.py index 6bfd9f2..1888425 100644 --- a/channel/wechat/wechat_message.py +++ b/channel/wechat/wechat_message.py @@ -31,7 +31,6 @@ class WeChatMessage(ChatMessage): "加入群聊" in itchat_msg["Content"] or "加入了群聊" in itchat_msg["Content"] ): self.ctype = ContextType.JOIN_GROUP - logger.debug("[WX]join group message: " + itchat_msg["Content"]) self.content = itchat_msg["Content"] # 这里只能得到nickname, actual_user_id还是机器人的id if "加入了群聊" in itchat_msg["Content"]: @@ -42,6 +41,13 @@ class WeChatMessage(ChatMessage): self.actual_user_nickname = re.findall( r"\"(.*?)\"", itchat_msg["Content"] )[0] + elif "拍了拍我" in itchat_msg["Content"]: + self.ctype = ContextType.PATPAT + self.content = itchat_msg["Content"] + if is_group: + self.actual_user_nickname = re.findall( + r"\"(.*?)\"", itchat_msg["Content"] + )[0] else: raise NotImplementedError( "Unsupported note message: " + itchat_msg["Content"] @@ -82,5 +88,5 @@ class WeChatMessage(ChatMessage): if self.is_group: self.is_at = itchat_msg["IsAt"] self.actual_user_id = itchat_msg["ActualUserName"] - if self.ctype != ContextType.JOIN_GROUP: + if self.ctype not in [ContextType.JOIN_GROUP, ContextType.PATPAT]: self.actual_user_nickname = itchat_msg["ActualNickName"] diff --git a/plugins/hello/hello.py b/plugins/hello/hello.py index 00732ec..254b172 100644 --- a/plugins/hello/hello.py +++ b/plugins/hello/hello.py @@ -23,7 +23,11 @@ class Hello(Plugin): logger.info("[Hello] inited") def on_handle_context(self, e_context: EventContext): - if e_context["context"].type not in [ContextType.TEXT, ContextType.JOIN_GROUP]: + if e_context["context"].type not in [ + ContextType.TEXT, + ContextType.JOIN_GROUP, + ContextType.PATPAT, + ]: return if e_context["context"].type == ContextType.JOIN_GROUP: @@ -35,6 +39,13 @@ class Hello(Plugin): e_context.action = EventAction.CONTINUE # 事件继续,交付给下个插件或默认逻辑 return + if e_context["context"].type == ContextType.PATPAT: + e_context["context"].type = ContextType.TEXT + msg: ChatMessage = e_context["context"]["msg"] + e_context["context"].content = f"请你随机使用一种风格介绍你自己,并告诉用户输入#help可以查看帮助信息。" + e_context.action = EventAction.CONTINUE # 事件继续,交付给下个插件或默认逻辑 + return + content = e_context["context"].content logger.debug("[Hello] on_handle_context. content: %s" % content) if content == "Hello":