【FAQ】WeChatFerry 机器人常见问题 v39.0.7
发表时间:Sun Dec 03 2023 18:00:32 GMT+0800 (中国标准时间)
Q0 怎么报 BUG?
Q1 支持什么版本的微信?
Q2 怎么开始玩?
Q3 支持什么客户端?
Q4 支持什么功能?
Q5 有没有示例?
Q6 崩溃怎么办?
Q7 为什么 @ 不成功?
Q8 提示 Timed out?
Q9 怎么查看日志?
Q10 Address in use?
Q11 获取不到联系人?
Q12 如何退出机器人?
Q13 文件发送不成功?
Q14 图片发送不成功?
Q15 图片解密不成功?
Q16 LoadLibrary 调用失败?
Q17 安装失败?
Q18 又安装失败?
Q19 wcfhttp 回调
Q20 UnicodeEncodeError
Q21 这货什么原理?
后台回复 WCF
找到组织。
Q0 怎么报 BUG?
这个问题放在最前面。因为常常收到:不能用怎么办?没反应怎么办?没效果怎么办?
我总是一头雾水。这里推荐一下 提问的艺术。
我把群公告粘贴过来:
【🐛报错提供】
💠尽量多提供信息,群主是傻子,信息不够看不懂
💠启用调试以便排查:wcf = Wcf(debug=True)
💠版本:pip list,查看 wcferry 右边的数字
💠版本:pip list,查看 wcfhttp 右边的数字
💠错误现象
💠引发错误的操作
💠错误日志:logs/wcf.txt
Q1 支持什么版本的微信?
v39.0.7.x
支持微信 3.9.2.23
。后续留意更新日志。
注意安装适当的微信版本。
注意安装适当的微信版本。
注意安装适当的微信版本。
这里有 安装包[1]。
Q2 怎么开始玩?
请参考视频教程【教程】微信机器人 WeChatRobot 安装。
参考 文档[2]。
参考示例工程 WeChatRobot[3]。
Q3 支持什么客户端?
目前支持的客户端包括:
Go(danbai225 维护)
HTTP(查克维护)
Java(查克创建但目前没有积极维护)
Python(查克维护)
Rust(supermoonie 维护)
Q4 支持什么功能?
目前支持的功能包括:
检查登录状态
获取登录账号信息
获取消息类型
获取所有联系人
获取所有好友
获取数据库
获取某数据库下的表
获取用户信息
发送文本消息(可 @)
发送图片
发送文件
允许接收消息
停止接收消息
执行 SQL 查询
接受好友申请
添加群成员
删除群成员
解密图片
获取朋友圈消息
保存图片
保存语音
Q5 有没有示例?
有,可以参考 WeChatRobot[4],示例了:
天气查询
成语查询
成语接龙
定时新闻发送
ChatGPT 聊天
TigerBot 聊天
自动通过好友申请
Q6 崩溃怎么办?
参考 Q0 报 BUG。
Q7 为什么 @ 不成功?
三个可能:
@是复制过来的。这个没办法,微信识别不到,请找微信提 BUG。
使用方法不正确。
修改过 wxid。这是群友测试发现的,微信的消息会 @旧的 wxid,而获取到的 wxid 是新的,匹配不上,所以判断不出被 @。目前无解,需要自行改代码。
正确的使用方法(其实看文档就知道了):
def sendTextMsg(self, msg: str, receiver: str, at_list: str = "") -> None: """ 发送消息 :param msg: 消息字符串 :param receiver: 接收人wxid或者群id :param at_list: 要@的wxid, @所有人的wxid为:nofity@all """ # msg 中需要有 @ 名单中一样数量的 @ ats = "" if at_list: wxids = at_list.split(",") for wxid in wxids: # 非群聊,就不要填 at_list 了,否则下面会出错的 ats += f" @{self.wcf.get_alias_in_chatroom(wxid, receiver)}" # {msg}{ats} 表示要发送的消息内容后面紧跟@,例如 北京天气情况为:xxx @张三 if ats == "": self.LOG.info(f"To {receiver}: {msg}") self.wcf.send_text(f"{msg}", receiver, at_list) else: self.LOG.info(f"To {receiver}: {ats}\r{msg}") self.wcf.send_text(f"{ats}\n\n{msg}", receiver, at_list)
Q8 提示 Timed out?
查看日志确定原因
Q9 怎么查看日志?
在运行目录下,找到 logs/wcf.txt
,打开,即可查看。
Q10 Address in use?
如果第一次运行就提示 Address in use
,那应该是跟某个应用产生了端口冲突(wcferry
默认使用 10086
和 10087
)
解决办法有两个:
任务管理器把使用
10086
和10087
的进程杀掉(目前已知金山毒霸
和一个校园网的客户端使用10086
)。修改
wcferry
的启动端口:
wcf = Wcf(port=10010) # 换一个不冲突的端口吧
如果第一次运行成功,后续提示被占用,那么大概率是前面粗暴关闭了窗口。参考 Q12。
Q11 获取不到联系人?
使用 WeChatRobot
,可能会出现回复的时候 @ 后面是空白的情况。这是由于没有获取到联系人导致的,一般出现在刚登录的新环境中。
目前的解决办法是:把微信登录、退出多来几遍,让联系人落库。
后续会做个优化。
Q12 如何退出机器人?
温柔点儿,Ctrl+C
退出,不要强制关闭窗口。
Q13 文件发送不成功?
文件注意路径,建议使用绝对路径,同时使用 \\
替换 \
。
Q14 图片发送不成功?
参考 Q13,同时要确保图片是正常的图片(比如,人工手动能不能发?)
Q15 图片解密不成功?
查看日志看失败原因。
需要注意的是,确保图片文件 ( .dat
) 存在。因为图片落盘需要时间,收到图片消息的时候,稍作等待。另外,需要在 文件管理
处,设置文件自动下载。
Q16 LoadLibrary 调用失败?

LoadLibrary 调用失败
请看 Q1。
Q17 安装失败?

WARNING Retrying
网络质量不行,换个 pip 源。比如清华源:
# 如果使用 wcferry pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade wcferry # 如果使用 wcfhttp pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade wcfhttp
Q18 又安装失败?
Failed to Build pynng

安装 pynng 失败
Python 太新,需要自己编译依赖。不想自己编译,那就换 Python 3.9
、 Python 3.10
、 Python 3.11
。
Q19 wcfhttp 回调
Q20 UnicodeEncodeError

UnicodeEncodeError
将终端的编码格式设置为 utf-8
即可。
Q21 这货什么原理?
前面有过介绍:WeChatFerry: 一个玩微信的工具。
参考资料
[1]
安装包: _https://github.com/lich0821/WeChatFerry/releases/latest_
[2]
文档: _https://wechatferry.readthedocs.io/zh/latest/_
[3]
WeChatRobot: _https://github.com/lich0821/WeChatRobot_
[4]
WeChatRobot: _https://github.com/lich0821/WeChatRobot_