SlackBot:Slack 上的小黃雞(Python)

jopen 9年前發布 | 45K 次閱讀 SlackBot Python開發

slack_bot

立志成為一個可被調戲且有用的Bot

介紹

很多人聽過甚至曾經用過小黃雞. 你可以把本bot理解為增加了很多功能,只保留小黃雞交流的基本邏輯,用于slackchannel里面的小黃雞. 它主要借用slack的Outgoing Webhooks, 也使用了私聊upload.

項目使用flask, 目前本項目是一個heroku應用. 地址是 https://slack-bot2.herokuapp.com/slack_callback 但是你也可以直接裸跑

gunicorn wsgi:app localhost:5000 --timeout 240 --log-file -

我們使用slack的特性

  1. 可以把消息私聊發給自己
  2. 可以使用帶圖的方式接收結果(支持canvas, 以下會看到例圖)

模塊用途

繼承自小黃雞的模塊們, 但是都做了對應的修改:

  1. 空氣插件
  2. wikipedia
  3. 地震了
  4. 糗百
  5. orz

新加的模塊們:

地圖插件 - 你可以輸入我想從哪去哪, 會給你個路線(步行/開車/公交)

天氣插件 - 使用了百度api, 獲得城市的天氣情況

北京公交插件 - 可以查詢北京公交線路, 獲取實時的到某站的信息(有些線路站點不準)

美食插件 - 使用大眾點評網api, 獲取附近餐飲信息, 評分, 電話地址,距離等等

技術活動插件 - 從segmentfault/csdn/車庫咖啡/活動行獲得最近的活動列表

Github_issue插件 - 獲得你個人或者組織下未處理的Pull requests列表

電影信息插件 - 列出最近上映和即將上映的電影信息

pycoders插件 - 獲得訂閱數據

pythonweekly插件 - 獲得訂閱數據

頭條插件 - 獲得今日頭條新聞

travel插件 - 旅游推薦/景點介紹

v2ex feed插件 - 獲得一些節點的最新feed

help插件 - 列出所有插件的幫助信息

最主要的是小黃雞(simsim)

也可以直接發到個人的slackbot channel里:

提交pull request

我們歡迎你把你想要的idea實現出來, 或者在看過本項目代碼后用于個人以及私有公司的插件遇到bug, 發現瓶頸等時候給我們PR

插件編寫

插件放在plugins目錄下,每個插件是一個python文件,提供兩個接口,test和handle,格式如下:

def test(data): // your code

test方法返回True或False,說明是否要用該插件處理這一條請求

def handle(data, **kwargs): // your code

handle方法則實際處理請求,它需要返回一個utf-8編碼的字符串或者一個tuple,用來作為小黃雞對這條請求的答復:

  1. 返回只包含一個字符串表示不支持帶圖模式
  2. 返回一個(字符串, 一個attachment的列表), 每個attachment可以使用plugins/utils.py的gen_attachment生成

data是一個dict, 它是slack在回調的時候的請求, 一般情況下你只需要關注data['message']這個消息全文字段.

注意事項:

  1. 請把新的插件的名字也加在plugins/__init__.py的__all__里面
  2. 如果其他插件都不符合, 會默認使用小黃雞接口
  3. 本地調試可以使用這樣的http請求:

    http -f POST http://localhost:5000/slack_callback token=jLGMzrZn3P1lS2sD848KpPuN text='頤和園景點介紹' team_id=T0001 team_domain=example channel_id=C2147483705 channel_name=test timestamp=1355517523.000005 user_id=U2147483697 user_name=Steve trigger_word=''
  4. 你也可以這樣調試:

    $python manage.py send 今天天氣很不錯
    !是啊是啊  好想出去玩

項目主頁:http://www.baiduhome.net/lib/view/home/1435127640903

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!