成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python-Wechaty: 面向IM軟件的聊天機器人框架

開發 后端
python-wechaty項目源于wechaty,甚至說很大程度上代碼是直接從其翻譯過來的,然后加上一些python的特性,讓其更加pythonic。作為一個IM的入口工具,未來我們也將添加更多的Chatbot元素進去,讓其能夠成為一個真正的聊天機器人。

[[357560]]

 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這個面相事件型且交互邏輯非常簡單的場景下,插件的設計與開發就非常簡單。

我們現在直接來看看,系統內置的叮咚插件是如何實現的。

  1. """basic ding-dong bot for the wechaty plugin""" 
  2. from typing import Union 
  3.  
  4. from wechaty import Message, Contact, Room, FileBox 
  5. from wechaty.plugin import WechatyPlugin 
  6.  
  7.  
  8. class DingDongPlugin(WechatyPlugin): 
  9.     """basic ding-dong plugin""" 
  10.     @property 
  11.     def name(self): 
  12.         """name of the plugin""" 
  13.         return 'ding-dong' 
  14.  
  15.     async def on_message(self, msg: Message): 
  16.         """listen message event""" 
  17.         from_contact = msg.talker() 
  18.         text = msg.text() 
  19.         room = msg.room() 
  20.         if text == '#ding'
  21.             conversation: Union
  22.                 Room, Contact] = from_contact if room is None else room 
  23.             await conversation.ready() 
  24.             await conversation.say('dong'

 代碼很簡單,不過也是需要氛圍一下幾個層面來介紹。

  • WechatyPlugin
  • on_[event_name]
  • init_plugin

WechatyPlugin

此類為一個抽象類,所有的插件必須要繼承此基類,并重寫其中的函數。

  • name 屬性函數為抽象函數,必須重寫。主要是為了標識插件的名稱,作為插件唯一性身份認證。
  • init_plugin 初始化函數能夠支持插件的初始化過程,比如初始化定時器對象,數據庫延遲連接對象等。
  • on_[event_name]此類函數主要是為了監聽系統中的不同事件,比如:on_message, on_login, on_friendship等事件的監聽都只需要重寫一下函數即可完成。不同插件之間以及不同事件之間都是獨立的,能夠很好的專注于不同業務場景下的開發。

event_name

python-wechaty很大程度上是由事件驅動,畢竟很多操作都是基于消息接受觸發,由此事件的監聽是其基礎特性,可能第一感覺就是實用EventEmitter這種模式來監聽事件,這樣每個事件我都可以注冊不同的函數來監聽,每個函數中會有不同的邏輯處理。這也是傳統的事件監聽方法,可這至少會給開發上帶來一些不方便:函數的參數需要查閱文檔才能夠獲知,標準的函數式編程。

  • 我不是說函數式編程不好,只是在這種場景下對系統性能并不能提升多少,且python-wechaty 也并不能太注重性能。

由此將其擴展了OOP的方式,用戶可繼承Wechaty或WechatyPlugin來監聽不同的事件,且在常規的代碼編輯器里面重寫函數時就可以自動填充函數參數,從而減少查閱事件函數參數的問題。

監聽事件的類型有:error, friendship, heartbeat, login, logout, message, ready, room_invite, room_join, room_leave, room_topic, scan。

在上面已經展示了WechatyPlugin如何開發,需要注意的地方,那接下來我將給大家詳細介紹一下最基礎的每日一說的機器人如何開發。

每日一說機器人

每日一說,顧名思義每天每個固定時間段發送一個祝福或提醒,具體內容可自定義。這其中需要注意幾點:

  • 機器人內部有一個調度器,用于調度時間事件的觸發。
  • 機器人可給制定的人和群發送對應的內容。

以上的功能我封裝成一個插件,然后注入到python-wechaty中即可。

  1. """daily word plugin""" 
  2. from datetime import datetime 
  3.  
  4. from apscheduler.schedulers.asyncio import AsyncIOScheduler 
  5.  
  6. from wechaty import Wechaty 
  7. from wechaty.plugin import WechatyPlugin 
  8.  
  9.  
  10. class DailyPlugin(WechatyPlugin): 
  11.     ""
  12.     say something everyday, like `Daily Words` 
  13.     ""
  14.     @property 
  15.     def name(self) -> str: 
  16.         """get the name of the plugin""" 
  17.         return 'dayily' 
  18.  
  19.     async def tick(self): 
  20.         """time tick for the plugin scheduler""" 
  21.         room_id = get_room_id() 
  22.         room = self.bot.Room.load(room_id) 
  23.         await room.ready() 
  24.         await room.say(f'i love you -> {datetime.now()}'
  25.  
  26.     async def init_plugin(self, wechaty: Wechaty): 
  27.         """init plugin""" 
  28.         await super().init_plugin(wechaty) 
  29.         scheduler = AsyncIOScheduler() 
  30.         scheduler.add_job(self.tick, 'cron'hour=6, minute=16) 
  31.         scheduler.start() 

 插件就開發完了,然后將其注入到Wechaty中即可跑起來。

  1. async def main(): 
  2.     bot = Wechaty().use(DailyPlugin()) 
  3.     await bot.start() 
  4. asyncio.run(main()) 

 是不是超級簡單,插件系統幫你隔離所有的業務場景,讓代碼非常易于開發和維護。

python-wechaty還可以做更多

現在python-wechaty只完成了基本的Chatbot入口工具,離真正的聊天機器人還距離很遠,所以未來還有很多工作量可以做。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-07-05 06:42:01

聊天機器人人工智能

2020-02-02 09:19:14

聊天機器人機器人智能

2017-03-28 12:21:21

機器人定義

2016-02-16 14:46:33

聊天機器人機器學習自然語言

2019-12-19 16:08:40

人工智能機器人數據

2022-07-03 10:23:06

機器人場景個性化

2025-06-04 08:21:28

2023-06-29 15:04:21

微軟ChatGPT

2023-12-18 19:05:34

2023-04-05 19:32:28

2021-09-23 09:00:00

機器人人工智能技術

2017-08-21 13:31:44

AI聊天機器人facebook

2019-06-04 08:00:00

機器人聊天機器人人工智能

2021-09-22 17:51:55

人工智能機器人聊天機器人

2019-07-03 10:02:47

聊天機器人平臺機器人

2020-02-20 09:00:00

網絡應用數據技術

2019-07-30 07:53:08

機器人人工智能系統

2023-04-27 08:00:00

2022-09-30 13:55:46

Python機器人
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产伦精品 | 中文字幕在线人 | 欧美黑人一区 | 国产a区 | 亚洲国产精品久久久久秋霞不卡 | aⅴ色国产 欧美 | 欧美日韩1区2区3区 欧美久久一区 | 天天射影院 | 精品影院 | 青娱乐一区二区 | 黄色免费网站在线看 | 久久久久久国产 | 亚洲精品成人在线 | 久久久久99 | 操久久 | 日韩一区在线播放 | 天天成人综合网 | 国产精品91视频 | 在线观看视频中文字幕 | 免费在线观看av网址 | 国产中文区二幕区2012 | 在线欧美日韩 | 97色在线观看免费视频 | 热久色| 久久久久国产精品 | 午夜免费观看 | 亚洲欧美中文日韩在线v日本 | 久久夜视频| 欧美激情在线精品一区二区三区 | 成人av一区二区三区 | 中文字幕一区二区三区乱码在线 | 久在线视频播放免费视频 | 精品二区 | 伊人免费观看视频 | 一本综合久久 | 国产免费一区二区 | 福利久久 | 欧美亚洲国产一区二区三区 | 日日欧美| 中文字幕亚洲精品在线观看 | 九一视频在线观看 |