Python開發(fā)QQ聊天機器人——Yes醬的部署與調(diào)教

Yes醬是一個會發(fā)s圖的群管理機器人滤蝠,基于 go-cqhttp疫诽,使用OneBot標(biāo)準(zhǔn)的插件開發(fā)的一個機器人上沐,支持以下功能:

  • 發(fā)送setu/貓貓圖返回一張澀圖/貓貓圖
  • 檢測關(guān)鍵字禁言
  • 私聊調(diào)教對話

本文主要參考了其官方博客燃观,結(jié)合Yes醬的githubgo-cqhttp的github的官方教程

最終實現(xiàn)的效果如下:


群聊

環(huán)境

  • 系統(tǒng):Windows 10 or Ubuntu 18.04
  • 編輯器:Sublime Text 3(記事本也可)
  • 瀏覽器:這里用的Chrome
  • 框架:go-cqhttp
  • Yes醬:Go-CQHTTP-YesBot

準(zhǔn)備工作

注:由于該程序依賴的框架go-cqhttp有多處更新叶组,因此在原版基礎(chǔ)上進行了改良阶祭,詳見Python開發(fā)QQ聊天機器人——進階的yes醬部署與調(diào)教一文糙俗,本文僅留作紀(jì)念勒奇,不再維護

QQ號注冊

一個手機號能夠綁定十個QQ號,所以直接在官方網(wǎng)站注冊QQ即可巧骚,注冊完之后記得馬上登陸并記下QQ號赊颠,最好保持活躍,否則會被收回

程序下載

github下載go-cqhttp劈彪,windows 64位選擇go-cqhttp_windows_amd64.exe竣蹦,linux選擇go-cqhttp_0.9.40-fix5_linux_amd64.deb

下載go-cqhttp

github下載Yes醬源碼,可以使用Git下載沧奴,也可以直接網(wǎng)頁下載解壓即可:

下載Yes醬源碼

程序配置

go-cqhttp配置

Windows的話直接雙擊運行下載好的EXE程序痘括,會出現(xiàn)如圖所示界面:


雙擊運行EXE

然后會自動在同級目錄下生成一個config.hjson的文件:

生成配置文件

Linux的話直接sudo dpkg -i go-cqhttp_0.9.40-fix5_linux_amd64.deb安裝框架,然后在任意處使用命令go-cqhttp啟動程序滔吠,即會在當(dāng)前目錄下生成config文件

編輯該文件纲菌,編輯內(nèi)容如下:


/*
    go-cqhttp 默認(rèn)配置文件
*/

{
    // QQ號
    uin: 123456789
    // QQ密碼
    password: "XXXXX"
    // 是否啟用密碼加密
    encrypt_password: false
    // 加密后的密碼, 如未啟用密碼加密將為空, 請勿隨意修改.
    password_encrypted: ""
    // 是否啟用內(nèi)置數(shù)據(jù)庫
    // 啟用將會增加10-20MB的內(nèi)存占用和一定的磁盤空間
    // 關(guān)閉將無法使用 撤回 回復(fù) get_msg 等上下文相關(guān)功能
    enable_db: true
    // 訪問密鑰, 強烈推薦在公網(wǎng)的服務(wù)器設(shè)置
    access_token: ""
    // 重連設(shè)置
    relogin: {
        // 是否啟用自動重連
        // 如不啟用掉線后將不會自動重連
        enabled: true
        // 重連延遲, 單位秒
        relogin_delay: 3
        // 最大重連次數(shù), 0為無限制
        max_relogin_times: 0
    }
    // API限速設(shè)置
    // 該設(shè)置為全局生效
    // 原 cqhttp 雖然啟用了 rate_limit 后綴, 但是基本沒插件適配
    // 目前該限速設(shè)置為令牌桶算法, 請參考: 
    // https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
    _rate_limit: {
        // 是否啟用限速
        enabled: false
        // 令牌回復(fù)頻率, 單位秒
        frequency: 1
        // 令牌桶大小
        bucket_size: 1
    }
    // 是否忽略無效的CQ碼
    // 如果為假將原樣發(fā)送
    ignore_invalid_cqcode: false
    // 是否強制分片發(fā)送消息
    // 分片發(fā)送將會帶來更快的速度
    // 但是兼容性會有些問題
    force_fragmented: false
    // 心跳頻率, 單位秒
    // -1 為關(guān)閉心跳
    heartbeat_interval: 0
    // HTTP設(shè)置
    http_config: {
        // 是否啟用正向HTTP服務(wù)器
        enabled: true
        // 服務(wù)端監(jiān)聽地址
        host: 0.0.0.0
        // 服務(wù)端監(jiān)聽端口
        port: 5700
        // 反向HTTP超時時間, 單位秒
        // 最小值為5,小于5將會忽略本項設(shè)置
        timeout: 0
        // 反向HTTP POST地址列表
        // 格式: 
        // {
        //    地址: secret
        // }
        post_urls: {
            "127.0.0.1:5701": secret
        }
    }
    // 正向WS設(shè)置
    ws_config: {
        // 是否啟用正向WS服務(wù)器
        enabled: true
        // 正向WS服務(wù)器監(jiān)聽地址
        host: 0.0.0.0
        // 正向WS服務(wù)器監(jiān)聽端口
        port: 6700
    }
    // 反向WS設(shè)置
    ws_reverse_servers: [
        // 可以添加多個反向WS推送
        {
            // 是否啟用該推送
            enabled: false
            // 反向WS Universal 地址
            // 注意 設(shè)置了此項地址后下面兩項將會被忽略
            // 留空請使用 ""
            reverse_url: ws://127.0.0.1:5701
            // 反向WS API 地址
            reverse_api_url: ws://127.0.0.1:5701
            // 反向WS Event 地址
            reverse_event_url: ws://127.0.0.1:5701
            // 重連間隔 單位毫秒
            reverse_reconnect_interval: 3000
        }
    ]
    // 上報數(shù)據(jù)類型
    // 可選: string array
    post_message_format: string
    // 是否使用服務(wù)器下發(fā)的新地址進行重連
    // 注意, 此設(shè)置可能導(dǎo)致在海外服務(wù)器上連接情況更差
    use_sso_address: false
    // 是否啟用 DEBUG
    debug: false
    // 日志等級 trace,debug,info,warn,error
    log_level: ""
    // WebUi 設(shè)置
    web_ui: {
        // 是否啟用 WebUi
        enabled: true
        // 監(jiān)聽地址
        host: 127.0.0.1
        // 監(jiān)聽端口
        web_ui_port: 9999
        // 是否接收來自web的輸入
        web_input: false
    }
}

主要改動的有這么幾處:

  • 開頭的QQ號和密碼
  • http設(shè)置里的post_urls
  • 反向ws設(shè)置中的三個url

linux版本配置

還沒試過疮绷,配了再寫

Yes醬配置

打開yes醬所在的文件夾翰舌,找到config.json文件,配置如下:

{
    "path":"E:\\test\\QQbot\\Go-CQHTTP-YesBot-master\\pic\\mao\\",
    "ban_words":["科學(xué)上網(wǎng)","黑產(chǎn)","翻墻","huangse"],
    "apikey":"",
    "group":[987654321],
    "self_qq":"123456789"
}

其中:

  • path為項目文件夾下的pic文件夾下的mao文件夾地址冬骚,注意使用雙反斜杠椅贱,末尾也有一個雙反斜杠

  • ban_words為想要yes醬禁言的關(guān)鍵詞

  • apikey為yes醬調(diào)用的setuAPI,可以去申請一個只冻,也可以不填庇麦,申請方式如圖所示:

    apikey申請

  • group為想要yes醬管理的群號,可以填寫多個喜德,用英文逗號分隔即可

  • self_qq為之前注冊申請想要用來當(dāng)機器人的QQ號

找到send_message文件夾下的word_detect.py文件山橄,修改其第106行代碼為:

local_img_url = "[CQ:image,file=file:///"+path+choice(setu_list)+"]"

程序運行

go-cqhttp運行

windows的話直接右鍵,以管理員權(quán)限運行即可:


運行g(shù)o-cqhttp

Linux的話住诸,使用命令nohup go-cqhttp &后臺運行:

linux運行

初次運行會自動創(chuàng)建設(shè)備:


創(chuàng)建設(shè)備

然后需要驗證新設(shè)備以登錄:


驗證新設(shè)備登錄

這里輸入1按下回車:

回車之后

鼠標(biāo)選中-><-之間的網(wǎng)址驾胆,按下ctri+shift+C復(fù)制鏈接,然后打開瀏覽器贱呐,在地址欄粘貼鏈接進入驗證頁面丧诺,在頁面空白處右鍵單擊檢查

驗證頁面

選擇network等候抓包:

選擇network

然后手動拖動滑塊,完成驗證奄薇,查看右邊抓到的包:


驗證的包

其中的ticket即為需要在命令行輸入的字符串驳阎。雙擊該字符串選中復(fù)制,隨便找個地方粘貼出來看看再復(fù)制一遍,然后在命令行窗口單擊鼠標(biāo)右鍵即可粘貼進去呵晚,然后回車蜘腌,即可看到登陸成功:

登陸成功

yes醬啟動

windows的話在yes醬根目錄下啟動cmd命令行窗口,輸入命令啟動:

python main.py

linux的話使用命令nohup python main.py &啟動饵隙,可后臺運行

yes醬啟動:


yes醬啟動

程序效果

在群聊里艾特yes醬即可:


群聊

在群里艾特yes醬發(fā)送help即可獲得菜單:


help菜單

添加yes醬為好友之后撮珠,即可私聊開始調(diào)教(這里diy了一下yes醬回答的話語,原句是添加成功金矛!):

私聊

bug解決

注:由于該程序依賴的框架go-cqhttp有多處更新芯急,因此在原版基礎(chǔ)上進行了改良,詳見Python開發(fā)QQ聊天機器人——進階的yes醬部署與調(diào)教一文驶俊,本文僅留作紀(jì)念娶耍,不再維護

因為是第一次接觸QQ機器人的開發(fā),其中遇到了不少bug饼酿,這里記錄下:

P1. 兩邊程序都沒報錯榕酒,yes醬也顯示start,但是在群里艾特她卻沒有回復(fù)
S1. 首先看看是不是自己的網(wǎng)絡(luò)問題故俐,網(wǎng)速如果太慢的話會需要等一會想鹰。這里我自己是因為go-cqhttp的config配置不對,忘了配置反向ws配置選項中的url為本地地址的5701端口购披,配置好了之后就解決了問題

P2. 貓貓圖發(fā)送報錯杖挣,顯示路徑不對
S2. 按照上述配置仔細(xì)檢查修改即可

P3. 貓貓圖發(fā)送內(nèi)容為一串字符[CQ:image,file=file://E:NPC_Gocqhttppicmao0DEE3C4C2AE7A02C39C86F1E0F618B6A.png]肩榕,而不是一張圖片
S3. 修改路徑為上述配置中的樣子刚陡,并且找到send_message文件夾下的word_detect.py文件,修改其第106行代碼為:

local_img_url = "[CQ:image,file=file:///"+path+choice(setu_list)+"]"

主要原因是因為file這個路徑會吞掉一個字符株汉,而按照原博主的設(shè)置又會報P2的錯筐乳,因此直接修改源程序,在代碼中加入這個字符即可

P4. 其他都o(jì)k乔妈,但是setu這個api幾次之后就沒有反應(yīng)了
S4. 這是因為apikey為空的話每天可以調(diào)用的次數(shù)有限蝙云,按照setuAPI的申請方式申請一個apikey即可獲得300次/天的調(diào)用次數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市路召,隨后出現(xiàn)的幾起案子勃刨,更是在濱河造成了極大的恐慌,老刑警劉巖股淡,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件身隐,死亡現(xiàn)場離奇詭異,居然都是意外死亡唯灵,警方通過查閱死者的電腦和手機贾铝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玖绿,“玉大人叁巨,你說我怎么就攤上這事斑匪。” “怎么了锋勺?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苍姜。 經(jīng)常有香客問我,道長悬包,這世上最難降的妖魔是什么衙猪? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮垫释,結(jié)果婚禮上撑瞧,老公的妹妹穿的比我還像新娘。我一直安慰自己预伺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布脏嚷。 她就那樣靜靜地躺著瞒御,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趾唱。 梳的紋絲不亂的頭發(fā)上蜻懦,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音带欢,去河邊找鬼。 笑死吁朦,一個胖子當(dāng)著我的面吹牛渡贾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播空骚,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囤屹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肋坚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤诲泌,失蹤者是張志新(化名)和其女友劉穎铣鹏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诚卸,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡惨险,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年脊髓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恭朗。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡依疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膀值,到底是詐尸還是另有隱情,我是刑警寧澤歌逢,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布翘狱,位于F島的核電站,受9級特大地震影響阱高,放射性物質(zhì)發(fā)生泄漏茬缩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一荐捻、第九天 我趴在偏房一處隱蔽的房頂上張望寡夹。 院中可真熱鬧,春花似錦菩掏、人聲如沸智绸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹恐。三九已至,卻和暖如春殴边,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竖幔。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工是偷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留募逞,地道東北人馋评。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓栗恩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磕秤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 智能機器人在生活中隨處可見:iPhone里會說話的siri、會下棋的阿法狗蒙兰、調(diào)皮可愛的微軟小冰……她們都具有一定的...
    宇哥聊AI閱讀 2,050評論 1 7
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月搜变,有人笑有人哭,有人歡樂有人憂愁挠他,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53
  • 信任包括信任自己和信任他人 很多時候贸呢,很多事情拢军,失敗、遺憾固蛾、錯過赌渣,源于不自信,不信任他人 覺得自己做不成坚芜,別人做不...
    吳氵晃閱讀 6,187評論 4 8
  • 怎么對待生活缚忧,它也會怎么對你 人都是哭著來到這個美麗的人間。每個人從來到塵寰到升入天堂糕非,整個生命的歷程都是一本書球榆,...
    靜靜在等你閱讀 4,974評論 1 6