开发者

Python基于Wechaty构建一个简单的微信机器人

目录
  • 一、什么是 Wechaty
  • 二、环境准备
    • 1. 安装 python 环境
    • 2. 安装 Wechaty Python SDK
  • 三、获取 puppet token
    • 四、编写机器人代码
      • 五、配置 Puppet token 运行
        • 六、使用 docker 本地运行(可选)
          • 七、常见问题与排查
            • 八、方法补充

              在当今自动化和智能化需求日益增长的时代,企业微信、公众号、小助手等自动聊天工具层出不穷。Wechaty 是一个跨平台的聊天机器人 SDK,支持多语言开发,包括 JavaScript、Python、Go、Rust 等,帮助开发者快速构建微信机器人。

              本文将介绍如何基于 Python 语言使用 Wechaty,构建一个简单的微信机器人。

              一、什么是 Wechaty

              Wechaty 是一个专为微信生态设计的聊天机器人框架,它支持私有部署、云端服务,并提供多ulHdmwHwt种 Puppet 插件接入微信协议,如:

              • wechaty-puppet-wechat4u(个人微信网页版)
              • wechaty-puppet-padplus(已停用)
              • wechaty-puppet-service(推荐,官方提供 token 服务接入)
              • wechaty-puppet-wecom(企业微信)

              二、环境准备

              1. 安装 Python 环境

              确保本地已安装 Python3.7+,推荐使用 Python3.9 版本:

              python3 --version
              pip3 --version
              

              建议创建虚拟环境:

              python3 -m venv .venv
              source .venv/bin/activate
              

              2. 安装 Wechaty Python SDK

              pip install wechaty
              

              三、获取 puppet token

              以 wechaty-puppet-service 为例

              访问 https://wechaty.js.org/docs/puppet-services/ 并注册一个账号,获取免费的 puppet_service_token。这是连接微信服务的关键凭据。

              四、编写机器人代码

              from wechaty import Wechaty, Message, Contact
              
              class MyBot(Wechaty):
              
                  async def on_message(self, msg: Message):
                      text = msg.text()
                      talker = msg.talker()
              
                      print(f'Message from {talker.name}: {text}')
              
                      if text.lower() == 'ping':
                          await msg.say('pong')
              
              if __name__ == '__main__':
                  import asyncio
                  asyncio.run(MyBot().start())
              

              上述代码会监听微信消息,如果有人发“ping”,机器人会回复“pong”。

              五、配置 Puppet token 运行

              你可以通过环境变量指定你的 puppet_service_token:

              export WECHATY_PUPPET=wechaty-puppet-service
              export WECHATY_PUPPET_SERVICE_TOKEN=your_token_here
              python bot.py
              

              或者直接在代码中指定:

              bot = MyBot()
              bot.options.puppet = 'wechaty-puppet-service'
              bot.options.puppet_token = 'your_token_here'
              asyncio.run(bot.start())
              

              六、使用 Docker 本地运行(可选)

              如果你不想本地安装所有依赖,可以用 Docker 来运行 Wechaty:

              docker run -e WECHATY_PUPPET=wechaty-puppet-service \
                         -e WECHATY_PUPPET_SERVICE_TOKEN=your_token \
                         wechaty/wechaty
              

              七、常见问题与排查

              1.无法连接服务端

              错误:WechatyPuppetGrpcError: service server is invalid

              原因:puppet_token 不正确或网络不通

              2.消息接收不到

              请检查是否扫码登录成功,或是否被微信屏蔽

              3.Docker 拉取失败

              使用国内代理,如 dockerproxy.com 或配置镜像加速器

              八、方法补充

              python wechaty实现微信机器人,完成定时群发功能

              步骤:(必须要python3.7以上版本,我用的python3.7)

              1.安装wechaty

              pip install wechaty

              2.导入申请的tokphpen

              export WECHATY_PUPPET_HOSTIE_TOKEN='your-token'

              3.编写代码

              最基础功能:发送ding会返回给你一张图片

              import asyncio
              from wechaty impo编程rt Wechaty, Message
              
              class MyBot(Wechaty):
                  async def on_message(self, msg: Message):
                      talker = msg.talker()
                      await talker.ready()
                      if msg.text() == "ding":
                          awaitphp talker.say('dong')
                      elif msg.text() == 'image':
                          file_box = FileBox.from_url(
                              'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/'
                              'u=1116676390,2305043183&fm=26&gp=0.jpg',
                              name='ding-dong.jpg')
                          await talker.say(file_box)
              
              async def main():
                  bot = MyBot()
                  await bot.start()
              
              asyncio.run(main())

              完成定时群发功能

              #encoding = utf-8                                                                                                                                                                                            
              from wechaty import Wechaty
              from wechaty.plugin import WechatyPlugin
              from apscheduler.schedulers.asyncio import AsyncIOScheduler
              import asyncio
              import datetime
              #from wechaty import get_room_id
              
              class DailyPlugin(WechatyPlugin):
                @property
                def name(self) -> str:
                  return 'dayily'
              
                async def tick(self):
                  rooms = await self.bot.Room.find_all()
                  for currRoom in rooms:
                      prpythonint(f'room pay load topic: {currRoom.payload.topic}, topic: {currRoom.topic}, currRoom.room_id: {currRoom.room_id}')
              
                      topic =  currRoom.payload.topic
                      if(topic.startswith("ding") or topic.startswith("曼玲-食神券坊外卖")):
                          room = currRoom
                          await room.say(f'您好,我是食神券坊智能机器人,今天正式上线! -> {datetime.datetime.now()}')
              
                async def init_plugin(self, wechaty: Wechaty):
                  await super().init_plugin(wechaty)
                  scheduler = AsyncIOScheduler()
                  scheduler.add_job(self.tick, 'cron', hour=9, minute=43, second=55)
                  scheduler.start()
              
              async def main():
                bot = Wechaty().use(DailyPlugin())
                await bot.start()
              
              asyncio.run(main())
              

              小结

              通过 Wechaty Python SDK,我们可以快速构建一个可响应消息的微信机器人。借助 puppet-service 的云服务,我们无需逆向协议,即可专注于业务逻辑开发。

              到此这篇关于Python基于Wechaty构建一个简单的微信机器人的文章就介绍到这了,更多相关Python Wechaty构建微信机器人内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

              0

              上一篇:

              下一篇:

              精彩评论

              暂无评论...
              验证码 换一张
              取 消

              最新开发

              开发排行榜