@@ -16,6 +16,8 @@ class ContextType(Enum): | |||
JOIN_GROUP = 20 # 加入群聊 | |||
PATPAT = 21 # 拍了拍 | |||
FUNCTION = 22 # 函数调用 | |||
EXIT_GROUP = 23 #退出 | |||
def __str__(self): | |||
return self.name | |||
@@ -170,7 +170,7 @@ 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 in [ContextType.JOIN_GROUP, ContextType.PATPAT, ContextType.ACCEPT_FRIEND]: | |||
elif cmsg.ctype in [ContextType.JOIN_GROUP, ContextType.PATPAT, ContextType.ACCEPT_FRIEND, ContextType.EXIT_GROUP]: | |||
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)) | |||
@@ -27,13 +27,21 @@ class WechatMessage(ChatMessage): | |||
self._prepare_fn = lambda: itchat_msg.download(self.content) | |||
elif itchat_msg["Type"] == NOTE and itchat_msg["MsgType"] == 10000: | |||
if is_group and ("加入群聊" in itchat_msg["Content"] or "加入了群聊" in itchat_msg["Content"]): | |||
self.ctype = ContextType.JOIN_GROUP | |||
self.content = itchat_msg["Content"] | |||
# 这里只能得到nickname, actual_user_id还是机器人的id | |||
if "加入了群聊" in itchat_msg["Content"]: | |||
self.ctype = ContextType.JOIN_GROUP | |||
self.content = itchat_msg["Content"] | |||
self.actual_user_nickname = re.findall(r"\"(.*?)\"", itchat_msg["Content"])[-1] | |||
elif "加入群聊" in itchat_msg["Content"]: | |||
self.ctype = ContextType.JOIN_GROUP | |||
self.content = itchat_msg["Content"] | |||
self.actual_user_nickname = re.findall(r"\"(.*?)\"", itchat_msg["Content"])[0] | |||
elif is_group and ("移出了群聊" in itchat_msg["Content"]): | |||
self.ctype = ContextType.EXIT_GROUP | |||
self.content = itchat_msg["Content"] | |||
self.actual_user_nickname = re.findall(r"\"(.*?)\"", itchat_msg["Content"])[0] | |||
elif "你已添加了" in itchat_msg["Content"]: #通过好友请求 | |||
self.ctype = ContextType.ACCEPT_FRIEND | |||
self.content = itchat_msg["Content"] | |||
@@ -90,5 +98,5 @@ class WechatMessage(ChatMessage): | |||
if self.is_group: | |||
self.is_at = itchat_msg["IsAt"] | |||
self.actual_user_id = itchat_msg["ActualUserName"] | |||
if self.ctype not in [ContextType.JOIN_GROUP, ContextType.PATPAT]: | |||
if self.ctype not in [ContextType.JOIN_GROUP, ContextType.PATPAT, ContextType.EXIT_GROUP]: | |||
self.actual_user_nickname = itchat_msg["ActualNickName"] |
@@ -40,6 +40,7 @@ available_setting = { | |||
"image_create_prefix": ["画", "看", "找"], # 开启图片回复的前缀 | |||
"concurrency_in_session": 1, # 同一会话最多有多少条消息在处理中,大于1可能乱序 | |||
"image_create_size": "256x256", # 图片大小,可选有 256x256, 512x512, 1024x1024 (dall-e-3默认为1024x1024) | |||
"group_chat_exit_group": False, | |||
# chatgpt会话参数 | |||
"expires_in_seconds": 3600, # 无操作会话的过期时间 | |||
# 人格描述 | |||
@@ -29,6 +29,7 @@ class Hello(Plugin): | |||
ContextType.TEXT, | |||
ContextType.JOIN_GROUP, | |||
ContextType.PATPAT, | |||
ContextType.EXIT_GROUP | |||
]: | |||
return | |||
if e_context["context"].type == ContextType.JOIN_GROUP: | |||
@@ -46,7 +47,17 @@ class Hello(Plugin): | |||
e_context["context"].content = f'请你随机使用一种风格说一句问候语来欢迎新用户"{msg.actual_user_nickname}"加入群聊。' | |||
e_context.action = EventAction.BREAK # 事件结束,进入默认处理逻辑 | |||
return | |||
if e_context["context"].type == ContextType.EXIT_GROUP: | |||
if conf().get("group_chat_exit_group", []) == True: | |||
e_context["context"].type = ContextType.TEXT | |||
msg: ChatMessage = e_context["context"]["msg"] | |||
e_context["context"].content = f'请你随机使用一种风格跟其他群用户说他违反规则"{msg.actual_user_nickname}"退出群聊。' | |||
e_context.action = EventAction.BREAK # 事件结束,进入默认处理逻辑 | |||
return | |||
e_context.action = EventAction.BREAK | |||
return | |||
if e_context["context"].type == ContextType.PATPAT: | |||
e_context["context"].type = ContextType.TEXT | |||
msg: ChatMessage = e_context["context"]["msg"] | |||