Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加wechat channel “关键词自动接收好友申请”功能和“关键词自动邀请进群”插件 #1900

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

dfldylan
Copy link

@dfldylan dfldylan commented Apr 17, 2024

close #1087
close #1145

@dfldylan dfldylan changed the title 增加“关键词自动接收好友申请”功能和“关键词自动邀请进群”插件 增加wechat channel “关键词自动接收好友申请”功能和“关键词自动邀请进群”插件 Apr 17, 2024
@hanfangyuan4396
Copy link
Contributor

还得是我杜博

@swumagic
Copy link

[DEBUG][2024-04-21 04:22:56][plugin_manager.py:189] - Plugin GOOGLESEARCH triggered by event Event.ON_HANDLE_CONTEXT
[ERROR][2024-04-21 04:22:56][chat_channel.py:318] - Worker return exception: 'dict' object has no attribute 'startswith'
Traceback (most recent call last):
File "M:\SD\Python31011\lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "M:\SD\git\chatgpt-on-wechat\channel\chat_channel.py", line 172, in _handle
reply = self._generate_reply(context)
File "M:\SD\git\chatgpt-on-wechat\channel\chat_channel.py", line 184, in _generate_reply
e_context = PluginManager().emit_event(
File "M:\SD\git\chatgpt-on-wechat\plugins\plugin_manager.py", line 191, in emit_event
instance.handlers[e_context.event](e_context, *args, **kwargs)
File "M:\SD\git\chatgpt-on-wechat\plugins\GoogleSearch\GoogleSearch.py", line 44, in on_handle_context
if content.startswith("搜索 "):
AttributeError: 'dict' object has no attribute 'startswith'

自动加个人好友,会和其他插件冲突,导致不响应,如上DEBUG。杜博士,请问如何修复?

close #1087 close #1145

@swumagic
Copy link

问的ChatGPT:这个代码的问题是,你在 if content.startswith("搜索 "): 这行代码中,尝试在字典对象上使用 startswith() 方法,但是字典类型根本没有该方法。startswith() 是字符串类型的方法。

我不清楚 content 的定义和目的,但我假设它是从 e_context 对象中提取的,应该是一段文本。你需要审查生成 e_context 的代码,确保 content 是一个字符串而不是字典。如果它本来就应该是字典,那么你可能需要改变策略,不使用 startswith() 方法,而是进行适合字典的关键字检查或类似的操作。

@dfldylan
Copy link
Author

[DEBUG][2024-04-21 04:22:56][plugin_manager.py:189] - Plugin GOOGLESEARCH triggered by event Event.ON_HANDLE_CONTEXT [ERROR][2024-04-21 04:22:56][chat_channel.py:318] - Worker return exception: 'dict' object has no attribute 'startswith' Traceback (most recent call last): File "M:\SD\Python31011\lib\concurrent\futures\thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "M:\SD\git\chatgpt-on-wechat\channel\chat_channel.py", line 172, in _handle reply = self._generate_reply(context) File "M:\SD\git\chatgpt-on-wechat\channel\chat_channel.py", line 184, in _generate_reply e_context = PluginManager().emit_event( File "M:\SD\git\chatgpt-on-wechat\plugins\plugin_manager.py", line 191, in emit_event instance.handlers[e_context.event](e_context, *args, **kwargs) File "M:\SD\git\chatgpt-on-wechat\plugins\GoogleSearch\GoogleSearch.py", line 44, in on_handle_context if content.startswith("搜索 "): AttributeError: 'dict' object has no attribute 'startswith'

自动加个人好友,会和其他插件冲突,导致不响应,如上DEBUG。杜博士,请问如何修复?

close #1087 close #1145

你这个插件在哪啊

@dfldylan
Copy link
Author

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

@swumagic
Copy link

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

加个人好友(“关键词自动接收好友申请”功能)会触发上面BUG,不单只有这个GOOGLESEARCH插件会冲突,只要其他插件里有这2行代码(content = e_context["context"]和cmsg : ChatMessage = e_context['context']['msg'])的都会触发。比如COW附带插件:summary,dungeon,finish,tool都会触发如上错误。 只有禁用以上带这2段代码的插件才可以关键词自动接收好友申请”功能

@dfldylan
Copy link
Author

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

加个人好友(“关键词自动接收好友申请”功能)会触发上面BUG,不单只有这个GOOGLESEARCH插件会冲突,只要其他插件里有这2行代码(content = e_context["context"]和cmsg : ChatMessage = e_context['context']['msg'])的都会触发。比如COW附带插件:summary,dungeon,finish,tool都会触发如上错误。 只有禁用以上带这2段代码的插件才可以关键词自动接收好友申请”功能

没有复现你的错误。我不知道GOOGLESEARCH你这个插件是怎么写的,以仓库里的 tool为例,
def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return
这个函数第一句就判断了type是否为TEXT,实际上这里应该是ContextType.ACCEPT_FRIEND,因此这个函数就退出了,也不会执行插件体

@swumagic
Copy link

swumagic commented Apr 23, 2024

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

加个人好友(“关键词自动接收好友申请”功能)会触发上面BUG,不单只有这个GOOGLESEARCH插件会冲突,只要其他插件里有这2行代码(content = e_context["context"]和cmsg : ChatMessage = e_context['context']['msg'])的都会触发。比如COW附带插件:summary,dungeon,finish,tool都会触发如上错误。 只有禁用以上带这2段代码的插件才可以关键词自动接收好友申请”功能

没有复现你的错误。我不知道GOOGLESEARCH你这个插件是怎么写的,以仓库里的 tool为例, def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return 这个函数第一句就判断了type是否为TEXT,实际上这里应该是ContextType.ACCEPT_FRIEND,因此这个函数就退出了,也不会执行插件体

https://github.com/Yanyutin753/googleSearch-On-Wechat/blob/main/GoogleSearch.py

大佬不是我写的插件,这个地址,你看下哪里冲突了,还有我把这个插件禁用了,其他插件COW附带插件:summary,dungeon,finish也会类似提示BUG,只有禁用以上带这2段代码的插件才可以使用 输入关键词 自动接收个人好友申请 功能(另外我群聊天的窗口输入关键词,机器人不会自动加我好友。是我的号加了机器人时备注信息关键词 机器人才可以通过好友)。发关键词在群 自动加群聊没问题。

@dfldylan
Copy link
Author

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

加个人好友(“关键词自动接收好友申请”功能)会触发上面BUG,不单只有这个GOOGLESEARCH插件会冲突,只要其他插件里有这2行代码(content = e_context["context"]和cmsg : ChatMessage = e_context['context']['msg'])的都会触发。比如COW附带插件:summary,dungeon,finish,tool都会触发如上错误。 只有禁用以上带这2段代码的插件才可以关键词自动接收好友申请”功能

没有复现你的错误。我不知道GOOGLESEARCH你这个插件是怎么写的,以仓库里的 tool为例, def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return 这个函数第一句就判断了type是否为TEXT,实际上这里应该是ContextType.ACCEPT_FRIEND,因此这个函数就退出了,也不会执行插件体

https://github.com/Yanyutin753/googleSearch-On-Wechat/blob/main/GoogleSearch.py

大佬不是我写的插件,这个地址,你看下哪里冲突了,还有我把这个插件禁用了,其他插件COW附带插件:summary,dungeon,finish也会类似提示BUG,只有禁用以上带这2段代码的插件才可以使用 输入关键词 自动接收个人好友申请 功能(另外我群聊天的窗口输入关键词,机器人不会自动加我好友。是我的号加了机器人时备注信息关键词 机器人才可以通过好友)。发关键词在群 自动加群聊没问题。

看了一下,和我预想的一样,它没有判断上下文类型就进行匹配了,这个需要他们改。现有上下文类型有以下
class ReplyType(Enum): TEXT = 1 # 文本 VOICE = 2 # 音频文件 IMAGE = 3 # 图片文件 IMAGE_URL = 4 # 图片URL VIDEO_URL = 5 # 视频URL FILE = 6 # 文件 CARD = 7 # 微信名片,仅支持ntchat INVITE_ROOM = 8 # 邀请好友进群 INFO = 9 ERROR = 10 TEXT_ = 11 # 强制文本 VIDEO = 12 MINIAPP = 13 # 小程序 ACCEPT_FRIEND = 19 # 接受好友申请

他们插件本就应该只处理TEXT类型的上下文。

另外该pr的第一个功能是 “关键词自动接收好友申请”而不是“群聊天的窗口输入关键词,机器人自动加好友”,你这个需求不是我这个功能。

@swumagic
Copy link

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

加个人好友(“关键词自动接收好友申请”功能)会触发上面BUG,不单只有这个GOOGLESEARCH插件会冲突,只要其他插件里有这2行代码(content = e_context["context"]和cmsg : ChatMessage = e_context['context']['msg'])的都会触发。比如COW附带插件:summary,dungeon,finish,tool都会触发如上错误。 只有禁用以上带这2段代码的插件才可以关键词自动接收好友申请”功能

没有复现你的错误。我不知道GOOGLESEARCH你这个插件是怎么写的,以仓库里的 tool为例, def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return 这个函数第一句就判断了type是否为TEXT,实际上这里应该是ContextType.ACCEPT_FRIEND,因此这个函数就退出了,也不会执行插件体

https://github.com/Yanyutin753/googleSearch-On-Wechat/blob/main/GoogleSearch.py
大佬不是我写的插件,这个地址,你看下哪里冲突了,还有我把这个插件禁用了,其他插件COW附带插件:summary,dungeon,finish也会类似提示BUG,只有禁用以上带这2段代码的插件才可以使用 输入关键词 自动接收个人好友申请 功能(另外我群聊天的窗口输入关键词,机器人不会自动加我好友。是我的号加了机器人时备注信息关键词 机器人才可以通过好友)。发关键词在群 自动加群聊没问题。

看了一下,和我预想的一样,它没有判断上下文类型就进行匹配了,这个需要他们改。现有上下文类型有以下 class ReplyType(Enum): TEXT = 1 # 文本 VOICE = 2 # 音频文件 IMAGE = 3 # 图片文件 IMAGE_URL = 4 # 图片URL VIDEO_URL = 5 # 视频URL FILE = 6 # 文件 CARD = 7 # 微信名片,仅支持ntchat INVITE_ROOM = 8 # 邀请好友进群 INFO = 9 ERROR = 10 TEXT_ = 11 # 强制文本 VIDEO = 12 MINIAPP = 13 # 小程序 ACCEPT_FRIEND = 19 # 接受好友申请

他们插件本就应该只处理TEXT类型的上下文。

另外该pr的第一个功能是 “关键词自动接收好友申请”而不是“群聊天的窗口输入关键词,机器人自动加好友”,你这个需求不是我这个功能。

大佬,那就这个插件和COW官方之前推荐的几个插件都有这个有问题,
类似出错行在这2处黑体行,大佬,比如这个插件的这种怎么修改,可以判断上下文类型就进行匹配。
def on_handle_context(self, e_context: EventContext)
content = e_context["context"].content

if content.startswith("搜索 "):
self.handle_text_search(e_context, content[len("搜索 "):])
elif content.startswith("搜图 "):
self.handle_image_search(e_context, content[len("搜图 "):])

def handle_text_search(self, e_context, query):
cmsg : ChatMessage = e_context['context']['msg']

@dfldylan
Copy link
Author

道理上应该监听msg类型为accept_friend时跳过你这个GOOGLESEARCH插件的处理过程

加个人好友(“关键词自动接收好友申请”功能)会触发上面BUG,不单只有这个GOOGLESEARCH插件会冲突,只要其他插件里有这2行代码(content = e_context["context"]和cmsg : ChatMessage = e_context['context']['msg'])的都会触发。比如COW附带插件:summary,dungeon,finish,tool都会触发如上错误。 只有禁用以上带这2段代码的插件才可以关键词自动接收好友申请”功能

没有复现你的错误。我不知道GOOGLESEARCH你这个插件是怎么写的,以仓库里的 tool为例, def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return 这个函数第一句就判断了type是否为TEXT,实际上这里应该是ContextType.ACCEPT_FRIEND,因此这个函数就退出了,也不会执行插件体

https://github.com/Yanyutin753/googleSearch-On-Wechat/blob/main/GoogleSearch.py

大佬不是我写的插件,这个地址,你看下哪里冲突了,还有我把这个插件禁用了,其他插件COW附带插件:summary,dungeon,finish也会类似提示BUG,只有禁用以上带这2段代码的插件才可以使用 输入关键词 自动接收个人好友申请 功能(另外我群聊天的窗口输入关键词,机器人不会自动加我好友。是我的号加了机器人时备注信息关键词 机器人才可以通过好友)。发关键词在群 自动加群聊没问题。

我不是说了吗
def on_handle_context(self, e_context: EventContext): if e_context["context"].type != ContextType.TEXT: return

@swumagic
Copy link

好的,大佬我改下看

@kokojacket
Copy link

@zhayujie 求大佬更新这个

@AnCool-OvO
Copy link
Contributor

希望大佬可以考虑在加入一个添加好友成功后,会触发设置好的回复,以达到自动添加了好友后可以知道发送什么关键词自动拉人进群

@kokojacket
Copy link

希望大佬可以考虑在加入一个添加好友成功后,会触发设置好的回复,以达到自动添加了好友后可以知道发送什么关键词自动拉人进群

三周啦,还没合并

@axiba053
Copy link

请问,自动通过好友之后怎么修改代码以实现自动打招呼?谢谢大佬!

@dfldylan
Copy link
Author

请问,自动通过好友之后怎么修改代码以实现自动打招呼?谢谢大佬!

不好意思刚看到。这个流程可能作为插件实现比较麻烦。。得改主代码的逻辑

@axiba053
Copy link

请问,自动通过好友之后怎么修改代码以实现自动打招呼?谢谢大佬!

不好意思刚看到。这个流程可能作为插件实现比较麻烦。。得改主代码的逻辑

可以讲一下方法吗?我想试试,谢谢啦!

@dfldylan
Copy link
Author

请问,自动通过好友之后怎么修改代码以实现自动打招呼?谢谢大佬!

不好意思刚看到。这个流程可能作为插件实现比较麻烦。。得改主代码的逻辑

可以讲一下方法吗?我想试试,谢谢啦!

不好意思我也好久没关注这个项目了。无非就是添加好友成功后触发一个事件,然后获取用户参数后,往这个用户发于定义消息就行了吧。不过有没有这样的接口我不记得了。你可以参考一下这个pr的代码改动,尤其是

@itchat.msg_register(FRIENDS)
def deal_with_friend(msg):

这一块,好好理解一下

@axiba053
Copy link

axiba053 commented Nov 1, 2024

请问,自动通过好友之后怎么修改代码以实现自动打招呼?谢谢大佬!

不好意思刚看到。这个流程可能作为插件实现比较麻烦。。得改主代码的逻辑

可以讲一下方法吗?我想试试,谢谢啦!

不好意思我也好久没关注这个项目了。无非就是添加好友成功后触发一个事件,然后获取用户参数后,往这个用户发于定义消息就行了吧。不过有没有这样的接口我不记得了。你可以参考一下这个pr的代码改动,尤其是

@itchat.msg_register(FRIENDS)
def deal_with_friend(msg):

这一块,好好理解一下

我研究研究,谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

这个可不可以添加一个好友自动通过功能,还有其他建议 建议
6 participants