在python环境下接入wechaty框架,实现ding-dong案例,用微信给特定微信号发送ding,然后特定微信号识别ding最后自动回复dong这个简单案例。
实现路程概略:
想要实现 发送 ding->识别ding->回复dong的这个过程的大概路径是:
首先注册获取token;
然后安装docker运行wechaty镜像;
之后用微信扫描wechaty框架提供的二维码,将微信与框架进行了绑定;
最后运行python程序与wechaty镜像连接获取微信信息,通过python程序识别微信信息中是否有ding,如果有ding则回复dong。
首先获取token:
登录网站 PadLocal ,网站很简单,用手机号注册登录。token有试用模式,可以免费试用一周。
安装docker:
docker安装就是常规安装这个在网络上很多不过说了,说一个我遇到的问题,我一开始安装的是windows桌面版的docker配置了一些内容安装成功了,但是wechaty镜像运行都不成功一直无法获取二维码,最后没办法用了公司的ubuntu系统的测试服务器(因为我这个是公司任务,大家量力而行)安装成功了,如果没有服务器的,可以试试用ubuntu的虚拟环境来安装docker.
运行镜像:
doker安装成功后,就可以运行命令安装运行镜像,命令如下:
docker run -it -d --name WECHAYT_NAME -e WECHATY_LOG="verbose" -e WECHATY_PUPPET="wechaty-puppet-padlocal" -e WECHATY_PUPPET_PADLOCAL_TOKEN="TOKEN" -e WECHATY_PUPPET_SERVER_PORT="8790" -e WECHATY_TOKEN="WECHATY_TOKEN" -p "8790:8790" wechaty/wechaty:0.65
参数解释:
WECHAYT_NAME:你的镜像的名字,按照你的规律起一个就可以;
TOKEN:你注册获取的wechaty的token;
WECHATY_TOKEN:一个唯一值,我是找了一串很生僻很长的字符串然后进行MD5加密,网上有很多在线MD5加密;
端口后映射:WECHATY_PUPPET_SERVER_PORT和“ -p”后面的值都是端口号,虚拟机端口号和服务器端口号的映射,这个属于docker的设置网上很多可查,我是服务器安装的,找一个服务器没用的直接映射了;
wechaty:0.65:这个是wechaty的版本,我找了一下一般都用这个,这个版本比较稳定没有问题,至少我没有遇到关于这个版本的问题;
遇到问题:
运行镜像的问题就是那个一开始我安装在自己的电脑上Windows的环境一直运行失败。
再有问题就是网络的问题了,网络一开始不好,在没有已安装wechaty镜像的情况下,运行这个命令后是需要安装依赖包的,而且是好几个所以网络也很重要。
再有就是ubuntu的数据源问题了,这个我没有遇到,但是我看其它文档中有讲到,大家遇到问题了可以向这个方向想一想。
微信与wechaty框架绑定:
docker 和 wechaty镜像完成后,在docker安装的系统中运行命令:
docker ps
这个命令查看wechaty镜像的 ID,
docker logs 镜像ID
这个命令打印日志,日志中有镜像绑定用的二维码地址,一般在日志的最后几行
就是 QR code Image: https:// 这一行,将链接地址复制到浏览器,显示的就是二维码。
用微信扫描这个二维码,微信会提示登录pad版本,同意登录。
这样这个微信就和wechaty框架绑定在了一起,当有其它微信对这个绑定的微信发消息时,消息就会被wechaty框架获取。
运行python程序:
下载wechaty依赖包
pip install wechaty == 0.8
作为案例,这个程序非常简单
from wechaty import Wechaty, Message, WechatyPlugin import asyncio import os # 填入的还是你前面申请的token os.environ["WECHATY_PUPPET_SERVICE_TOKEN"] = "puppet_padlocal_xxxxx" # docker运行的主机地址+端口 os.environ["WECHATY_PUPPET_SERVICE_ENDPOINT"] = "ip地址:端口号" bot = Wechaty() class DingDongPlugin(WechatyPlugin): async def on_message(self, msg: Message) -> None: if msg.text() == "ding": await msg.say("dong") if __name__ == '__main__': bot.use([ DingDongPlugin() ]) asyncio.run(bot.start())
问题:
版本问题:这里踩了一个坑,就是版本的问题,我一开始安装的最新版本但是启动总失败,后来换了 0.8 这个稳定的版本就可以了。
刷新问题:python程序运行后 wechaty框架的二维码会持续刷新,一开始扫码绑定之后收到 ding不会回复dong ,反复扫码绑定多次后可以实现自动回复dong,当实现自动回复dong后 二维码的刷新就没有再影响程序的使用就不需要重复扫码绑定了可以一直可以稳定的 ding->dong了。
好了到这里没有意外(大概率会有意外)就可以实现 ding->dong 了。
用其它微信号给和wechaty框架绑定在一起的微信发 ding ,它就可有自动回复 dong了。