关于微信机器人搭建的一点心得

[2024-03-19更新]
我看到论坛已经有大佬发布docker部署的itchat微信机器人了,大家不想弄代码的可以参考哈:
WeChatBot 基于ItChat-UOS的 个人微信号OpenAI机器人


继上次扯淡的文章(关于微信机器人搭建的胡言乱语)后,看到论坛还是很多人在讨论微信机器人的搭建问题,要不给大家说说我做微信机器人的一些细节吧,鉴于水平有限,请大佬轻喷!

1 准备工作

按照上次扯的,我并没有选用服务器,而是思考在本地弄一个电脑来运行程序。关于这个电脑,我需要满足:

  • 可以远程开关机
  • 可以长时间运行
  • 可以远程实现微信登录
  • 可以远程管理配置文件

接下来我来具体地讲一下部署准备哈!

1.1 购买一个电脑棒

它长这个样子:

参数细节在这里:

我是在小黄鱼上淘的这个,可来电自启,然后 5V2A 就带得动,基本上满足了我前两个要求。机器自带的是 Win10 的 32 位家庭版系统,但是可以刷成 64 位 LTSC 或者 Ubuntu,考虑到远程控制的方便,我刷成了Win10 LTSC 2019,注意要 本地账户 同时 不要设密码

1.2 远控准备

  • 方法一: 智能插座+OneDrive: 智能插座可以实现远程开关电脑,而 OneDrive 可以远程控制。我自己因为家里全是小米设备,就弄了个米家插座。这个方法也是我目前在用的方法。

  • 方法二:向日葵套件: 这种方法对于魔法上网用户比较友好,我遇到过在挂梯子时 OneDrive 死活连不上无法同步文件的问题。所以,在不连接显示器的情况下,使用向日葵作为设备的监测和控制是个不错的选择。

1.3 在开发机器上配置 Python 环境

我用的是 Anaconda Python3.8.5 版本的,常用的模块都有自带,但是 itchat 微信包需要准备好,注意安装版本:

pip install itchat-uos==1.5.0.dev0

itchat 的项目文档在这:

安装好以后,务必记得去 Python 安装位置 ...Lib\site-packages\itchat\components\login.py 中的 login 函数一行 time.sleep(45)
登录等待

大家在用 iPad、Windows 什么登录微信时,应该记得手机上有个登录倒计时 5 秒确认。类似地,itchat 是需要扫码登录的,如果这里不加等待时间,那么读秒还没结束二维码就刷新了。

我们把登录等待时间改成 30 - 60 秒可以避免这个问题,我设置成45秒是考虑到网络传输延迟,OneDrive 刷新需要时间,大家如果用向日葵或者自带显示器,等待时间可以相应缩短。

1.3 用于登录的微信号

虽然我的机器人运行了快半年都还正常,但是十分建议大家使用小号。然后,需要注意小号要实名认证后才能扫码登录,不然登不上!

具体的认证方法就是在微信里头绑一张银行卡认证,认证后再解绑就行哈!

2 代码编写

完成了准备工作,我们着手实现微信机器人的功能。事实上,我的机器人程序有 3 个线程,分别是 2 个爬虫和 1 个机器人交互,来到了 Linux.do 当然还是说怎么去编写交互功能。

关于交互,我的思路是,把自己的微信大号添加成小号设置成管理员,管理员可以进行AI模型配置。然后,所有添加机器人微信号的人可以选择管理员配置好的模型与机器人互动。

当然这样做的缺点是:

  • 隐私性较差: 所有好友的交流记录管理人可以看到
  • 无法同时承载大量交互请求: 由于机器配置、微信以及 API 的限制,如果多人同时发起互动可能出现异常,当然,这个问题可以通过建立微信群来解决,我们这里不作讨论。

我直接把代码发上来吧(附件限制我改成 txt 了)…注意 itchat 不好直接定位好友,好友的 UserName 会变动。我的解决方法是,每次用机器人小号加好友设置好友备注,其中,自己的大号备注成“自己”。另外,代码只写了对话功能,没有写添加好友这种,我是觉得用机器人加好友会增加被封号的风险…
WXBot.txt (12.5 KB)

3 使用

经过了前序准备和代码编写,后面我们可以让机器人活起来了!

3.1 部署

如果在有 Python 环境的电脑上试运行代码,直接运行 WXBot.py 就行。如果是像我一样在电脑棒上跑,不妨通过 pyinstaller 打包代码成 exe 文件,然后在电脑棒的 OneDrive 文件夹下新开一个“始终保留在此设备上”的文件夹(便于远控),把 exe 丢进去,设置开机自启动

3.1 登录微信

假设我现在坐在办公室,想要开启家里的机器人。首先,在办公电脑电脑把之前说的文件夹同样设置成“始终保留在此设备上”,然后等同步完成后,通过小米智能插座远程开启电脑棒,等到文件夹刷新出 QR.png 后,尽快用小号扫码登录。登录成功时,小号会有提示:

3.2 配置模型

在我的代码中,我设置成只有大号有权限进行模型参数配置,如果要增加模型(API)配置,可以用大号向小号按这种格式发送:

[增加模式]序号或备注, 模式名称, 模式缩写, API地址, 对话请求地址, 模型名, 上下文限制, 授权码

像这样:

感谢大佬提供的API!

3.3 HaveFun

当管理员大号配置好模型后,所有好友就可以开启对话了!

4 后记

以上为摸鱼所作,建立的机器人功能也比较单一,大佬轻喷哈!话说回来,如果觉得不错,点个赞我也是很乐意的~

36 个赞

666

1 个赞

从硬件开始的教程666,就是不知道稳定性如何,能否一直运行下去

2 个赞

哈哈哈,希望官方发慈悲吧!

1 个赞

666

1 个赞

电脑棒这个点子不错,小本子记下来了

1 个赞

itchat是用的微信web协议吗

2 个赞

嗯嗯,是根据网页版微信魔改的

666

这玩意 不敢以身试法啊 怕封号

1 个赞

这个稳定吗,我用的另一个项目微信号隔几天就掉线了

2 个赞

我用go搞了个,用的Openwechat库, 手机必须保持登录才行,只能多开一个微信登录Bot账号,只要手机不退出,就比较稳定。

2 个赞

肯定不能拿大号搞,再安全也得用小号 :joy:

1 个赞

昨天号找回来了,决定多养几个小号备着…:joy:

来,私发我一份。

你说教程吗,我虽然改了贴子但是还在的,你悄悄研究下:melting_face:

1 个赞


没看到,佬

教程呢

hook的还是公众号呀

1 个赞

Openwechat这个库应该是逆向的微信接口吧,我弄到docker里面跑的