最近由于項目需求,需要做個QQ群的聊天機器人用于回答咨詢的問題。在這樣的情況下,我開始了QQ機器人的踩坑之旅。
這個機器人需求就是在群裡有人@機器人+問題時,機器人通過檢測資訊是否有@之後,提取其中問題再進行檢索。其實就相當于一個制作一個簡單的問答系統基于QQ群這個平台。
通過查找的資料來看,QQ聊天機器人目前都是基于SmartQQ協定開發的。那麼首先讓我們來了解一下SmartQQ,這裡貼上wiki對SmartQQ的解釋:
WebQQ是騰訊于2009年9月15日正式推出的一項服務,該服務可以使使用者在不安裝QQ軟體的情況下使用QQ的部分服務。
2013年9月,WebQQ改名SmartQQ釋出。它在界面方面和手機QQ非常相似,聊天方式則又和Pad版的QQ類似。
域名為w.qq.com
由于安全問題,限制為僅能掃描二維碼登入。
至此,已經了解到QQ機器人是基于什麼基礎開發的了,若是自己根據SmartQQ協定開發一套API就太費時費力了。首先,我到github上搜尋了一波之後,發現有許多QQ機器人相關的項目,其中不乏有使用python開發的架構。花了一點時間download了一些項目測試之後,找到了一個比較友好的項目--------SmartQQBot
github位址如下:https://github.com/Yinzo/SmartQQBot
檢視一波文檔後,大概了解了如何進行二次開發(寫一個插件)。可以直接在manage.py中,添加你要實作的代碼。
from smart_qq_bot.messages import GroupMsg, PrivateMsg
from smart_qq_bot.signals import on_all_message, on_bot_inited
from smart_qq_bot.logger import logger
@on_all_message(name="PluginManger[test]")
def test_bot(msg, bot):
result = do_test(msg, bot)
if result is not None:
return bot.reply_msg(msg, result)
def do_test(msg, bot):
content = msg.content
content = Converter('zh-hans').convert(content)
nick = bot.username
atnick = '@'+nick
content_1 = content.replace(' ', '')
if atnick == content_1:
answer = "請按照以下方法進行詢問:{a} +您的問題".format(a=atnick)
return "%s" % answer
ask_message = content.replace(atnick+' ', '')
if atnick in content:
src_sender_name = msg.src_sender_name
print("%s" % src_sender_name)
try:
answer = getanswers(ask_message)
except:
response_json = tuling(ask_message)
answer = response_json.get('text')
# answer = "抱歉,機器人無法了解您的意思,請換一種問法試試!"
return "@%s %s"% (src_sender_name, answer)
def getanswers(ask_message):
connection = sqlite3.connect('./LZ_ZX.sqlite3')
sql = "select * from 'asks_answer' where class4='%{ask}%'".format(ask=ask_message)
sql_like = "select * from 'asks_answer' where class4 LIKE '%{ask}%'".format(ask=ask_message)
df = pd.read_sql_query(sql, connection)
if len(df) == 0:
df = pd.read_sql_query(sql_like, connection)
df = df[df["part"] == '0']
answer = df['answer']
answer = answer.values
answer_1 = answer[0]
connection.close()
return answer_1
不過問題還有一下幾個:
- 程式運作一天後,會因為登入cookie失效和退出
- 程式在大約4個小時沒有人通路的情況下會挂掉,不做出任何回應。
- QQBot隻能做出文本解析,和文本回應。這意味着這個項目的難點在于:怎樣使得Bot的回答是提問者想要的結果。