大智网汇
综合信息情报站

微信机器人框架-Python-Wechaty: 面向IM软件的聊天机器

Python-Wechaty:

聊天机器人框架面向IM软件

私信01可以获得大量的python学习资料

Python-wechaty可以用少量代码完成机器人,使用非常简单。基于OOP的设计理念,可以很好地监控和处理微信内的大量事件,如自动回复、定期发送、拉人入群、朋友申请同意等。此外,目前的插件系统中还有许多即用工具,如拉人入群等。当然,开发自己的插件也很简单,不需要深刻的概念,只需要你能理解事件和OOP。

python-wechaty项目起源于wechaty,甚至很大程度上代码是直接从它翻译的,然后添加一些python的特性,使它更加pythonic。作为IM的入口工具,我们将在未来添加更多的chatbot元素,使其成为真正的聊天机器人。

在介绍python-wechaty之前,简要介绍一下wechaty。

微信机器人框架-Python-Wechaty: 面向IM软件的聊天机器

wechaty

也许很多人会把wechaty和wechat联系起来,毕竟名字上只有一个字的区别。这必须从wechaty的起源开始。起初,该项目只是微信的一个工具库,可以进行一些简单的自动化操作流程,如定期发送消息、群发消息、朋友申请接受等。

但随着项目的逐步更新,wechaty已经支持微信、钉钉等主流IM软件Telegram。

自2016年以来,该项目已获得8kstar。这是一个非常稳定和庞大的用户项目。官方介绍如下:

AConversationalAIRPASDKforChatbot

因此,作为IMChatbot的入口工具,wechaty是许多聊天机器人的基本结构组件,并将逐步支持主流聊天机器人的功能。

微信机器人框架-Python-Wechaty: 面向IM软件的聊天机器

python-wchaty的诞生

在2019年底的一次技术沙龙会议上,我意识到原来的六行代码可以开发出一个足够灵活的机器人,这给了我很大的震惊。微信作为我们的日常聊天工具之一,如果我们能做一些自动化过程,可以大大减少繁琐过程的工作量,如:拉人进入小组,定期提醒用户打卡,提醒女朋友阿姨来等等。而且wechaty能很好地支持上述所有功能,只需几行简单的代码即可完成。回去后,立即开始查阅相关资料,然后逐步进入wechaty社区。

一个巧合的机会小组说可以开发一个go-wechaty。当时我在想为什么不能有python-wechaty,然后自我推荐,成为python-wechaty的联合作者之一。由于对开源软件和Devops不太熟悉,在起步阶段遇到了很多问题,但在社区老板的耐心指导下,issue和feature的开发和管理已经能够完成。亲身经历,建议你有机会参加开源项目,让你学到很多知识点。

微信机器人框架-Python-Wechaty: 面向IM软件的聊天机器

最简单的Bot

使用python-wechaty可以简单地开发Bot,特别是在使用插件系统后,如下所示:

上述代码实现了两个主要功能:当Bot接收到#ding信号时,立即回复dong信息,这是一个基本的ding-dong-bot。当接收到查阅天气的文本语句时,返回相应的天气查询结果,如:今天的天气如何?

以上两个插件都是系统内置的,以后会增加更实用的即时插件。当然,用户也可以创建自己的插件,方法非常简单。

如何开发插件系统?

在知道如何开发插件系统之前,可以先移动Plug-in`,插件系统支持插件的安装、卸载、自定义配置等内容。至于具体的实现形式,我相信我们也需要面对具体的应用场景。在面部事件和交互逻辑非常简单的场景中,插件的设计和开发非常简单。

现在让我们来看看如何实现系统内置的丁咚插件。

“””basicding-dongbotforthewechatyplugin”””

fromtypingimportUnion

fromwechatyimportMessage,Contact,Room,FileBox

fromwechaty.pluginimportWechatyPlugin

classDingDongPlugin(WechatyPlugin):

“””basicding-dongplugin”””

@property

defname(self):

“””nameoftheplugin”””

return’ding-dong’

asyncdefon_message(self,msg:Message):

“””listenmessageevent”””

from_contact=msg.talker()

text=msg.text()

room=msg.room()

iftext==’#ding’:

conversation:Union[

Room,Contact]=from_contactifroomisNoneelseroom

awaitconversation.ready()

awaitconversation.say(‘dong’)

代码很简单,但也需要介绍几个层次的氛围。WechatyPluginon_[event_name]init_plugin

WechatyPlugin

这类是抽象类,所有插件都必须继承这个基类,并重写函数。name属性函数为抽象函数,必须重写。主要是为了识别插件的名称,作为插件的唯一身份认证。init_plugin初始化函数可以支持插件的初始化过程,如初始化定时器对象、数据库延迟连接对象等。on_[event_name]该函数主要用于监控系统中的不同事件,如:on_message,on_login,on_friendship等事件的监控只需重写函数即可完成。不同的插件和不同的事件是独立的,可以很好地关注不同业务场景的发展。

event_name

python-wechaty在很大程度上是由事件驱动的。毕竟很多操作都是基于新闻接收触发的。因此,事件监控是其基本特征。也许第一感觉是实用的eventemiter模式来监控事件,这样我就可以注册不同的函数来监控每个事件,每个函数都会有不同的逻辑处理。这也是一种传统的事件监控方法,但至少会给开发带来一些不便:函数参数需要参考文档才能知道,标准函数编程。

我不是说函数编程不好,但是在这种情况下系统性能提升不了多少,python-wechaty也不能太注重性能。

这扩展了OOP的方式,用户可以继承Wechaty或WechatyPlugin来监控不同的事件,并在传统的代码编辑器中重写函数时自动填写函数参数,从而减少访问事件函数参数的问题。

监控事件的类型有:error,friendship,heartbeat,login,logout,message,ready,room_invite,room_join,room_leave,room_topic,scan。

上面已经展示了如何开发WechatyPlugin,需要注意。接下来,我将详细介绍如何开发最基本的日常机器人。

每天谈机器人

顾名思义,每天在每个固定时间段发送祝福或提醒,具体内容可以自定义。需要注意的是,机器人内部有一个调度器,用于触发调度时间事件。机器人可以将相应的内容发送给制定的人和组。

我将上述功能封装成插件,然后注入python-wechaty。

“””dailywordplugin”””

fromdatetimeimportdatetime

fromapscheduler.schedulers.asyncioimportAsyncIOScheduler

fromwechatyimportWechaty

fromwechaty.pluginimportWechatyPlugin

classDailyPlugin(WechatyPlugin):

saysomethingeveryday,like`DailyWords`

@property

defname(self)->str:

“””getthenameoftheplugin”””

return’dayily’

asyncdeftick(self):

“””timetickforthepluginscheduler”””

room_id=get_room_id()

room=self.bot.Room.load(room_id)

awaitroom.ready()

awaitroom.say(f’iloveyou->{datetime.now()}’)

asyncdefinit_plugin(self,wechaty:Wechaty):

“””initplugin”””

awaitsuper().init_plugin(wechaty)

scheduler=AsyncIOScheduler()

scheduler.add_job(self.tick,’cron’,hour=6,minute=16)

scheduler.start()

插件开发完毕,然后注入Wechaty就可以跑了。

asyncdefmain():

bot=Wechaty().use(DailyPlugin())

awaitbot.start()

asyncio.run(main())

是不是超级简单?插件系统帮助您隔离所有业务场景,使代码非常容易开发和维护。

python-还可以做更多的wechaty

现在python-wechaty只完成了基本的chatbot入口工具,离真正的聊天机器人还有很长的路要走,所以未来还有很多工作要做。也欢迎更多研究chatbot和nlp的朋友联系我,共同开发大家都喜欢使用的开源软件。

赞(0) 打赏
以上内容(如有图片或视频亦包括在内)为自媒体平台用户上传并发布,未作人工编辑处理,不构成投资建议请自行甄别,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:wolfba@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容!

大智网汇

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 wolfba@q.com 举报,一经查实,本站将立刻删除。

投稿&软文功效网

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

微信扫一扫打赏

登录

找回密码

注册