个人开发项目,且行且不易,有感兴趣的朋友可以去给一波关注,你们的支持就是我最大的动力,谢谢大家。 私信小编01即可获取大量python学习资料 Python-wechaty能够使用少量代码即可完成一个机器人,使用起来非常简单,基于OOP的设计思路能够很好监听和处理微信内部大量的事件,比如:自动回复消息,定时发送消息,拉人入群,好友申请同意等等。此外,目前的插件系统里面有很多拿来即用的工具,比如拉人入群等。当然开发一个自己的插件也是非常简单,无需很高深的概念,只需要你能够理解事件和OOP即可。 python-wechaty项目源于wechaty,甚至说很大程度上代码是直接从其翻译过来的,然后加上一些python的特性,让其更加pythonic。作为一个IM的入口工具,未来我们也将添加更多的Chatbot元素进去,让其能够成为一个真正的聊天机器人。 在介绍python-wechaty之前,还是简要介绍一下wechaty。 wechaty或许有很多人会把wechaty和wechat联系起来,毕竟在名称上面只是一字之差。这个得从wechaty的起源开始说起,起初,此项目只是作为微信的一个工具库,能够进行一些简单的自动化操作过程,比如:定时发送消息,入群消息发送,好友申请接受等。 可随着项目的逐步更新,wechaty已支持主流的IM软件,比如:微信,钉钉,Telegram。 这个项目从2016年开始,到现在已经获取8k star,是一个非常稳定且用户量非常庞大的项目。官方对其给出的介绍是: A Conversational AI RPA SDK for Chatbot
所以wechaty作为IM ChatBot的入口工具,是很多聊天机器人的基础架构组件,也将会逐步支持主流聊天机器人的功能。 python-wchaty的诞生与Wechaty的结缘是在2019年底的一次技术沙龙会上,认识到了原来6行代码就能够开发出一款足够灵活的机器人,当时给我一个很大的震撼。微信作为我们日常聊天工具之一,如果能够对其做一些自动化的过程,能够很大程度上减少繁琐过程的工作量,比如说:办活动时的拉人入群,定时提醒用户打卡,提醒女朋友姨妈快来了等等。而wechaty能够很好的支持以上所有功能,只需要简单的几行代码即可完成。回去之后就立马着手相关资料的查阅,然后逐步进入wechaty的社区。 一个很巧的机会群里面说可以开发一款go-wechaty的开发,当时我就在想,为什么不能够有一款python-wechaty呢,然后就毛遂自荐,成为了python-wechaty的联合作者之一。由于对开源软件和DevOps不是很熟悉,起步阶段遇到了很多的问题,不过经过社区大佬的耐心指导,目前已能够完成对issue和feature的开发和管理。亲身经历,建议大家有机会一定要参加开源项目,能够让你学习到很多知识点。 最简单的Bot使用python-wechaty能够很简单的开发一款Bot,特别是使用了一个插件系统之后,如下所示: 
以上代码中实现了两个主要的功能: - 当Bot接受到一个#ding信号,就立马回复一个dong消息,这就是一个基本的ding-dong-bot。
- 当接受到查阅天气的文本语句时,则返回对应的天气查询结果,比如:今天天气如何?
以上两个插件是系统内置的,后续也会增加更多的拿来即用的实用插件,当然用户也可创建自己的插件,方式很简单。 如何开发插件系统在了解如何开发插件系统之前,可先移驾Plug-in`,插件系统支持对插件的安装,卸载,自定义配置等内容 ,至于具体的实现形式我相信也是需要面对具体的应用场景。而在Wechaty这个面相事件型且交互逻辑非常简单的场景下,插件的设计与开发就非常简单。 我们现在直接来看看,系统内置的叮咚插件是如何实现的。 """basic ding-dong bot for the wechaty plugin"""from typing import Unionfrom wechaty import Message, Contact, Room, FileBoxfrom wechaty.plugin import WechatyPluginclass DingDongPlugin(WechatyPlugin): """basic ding-dong plugin""" @property def name(self): """name of the plugin""" return 'ding-dong' async def on_message(self, msg: Message): """listen message event""" from_contact = msg.talker() text = msg.text() room = msg.room() if text == '#ding': conversation: Union[ Room, Contact] = from_contact if room is None else room await conversation.ready() await conversation.say('dong')
|