Yes醬是一個會發(fā)s圖的群管理機器人滤蝠,基于 go-cqhttp疫诽,使用OneBot標(biāo)準(zhǔn)的插件開發(fā)的一個機器人上沐,支持以下功能:
- 發(fā)送setu/貓貓圖返回一張澀圖/貓貓圖
- 檢測關(guān)鍵字禁言
- 私聊調(diào)教對話
本文主要參考了其官方博客燃观,結(jié)合Yes醬的github和go-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
:
在github下載Yes醬源碼,可以使用Git下載沧奴,也可以直接網(wǎng)頁下載解壓即可:
程序配置
go-cqhttp配置
Windows的話直接雙擊運行下載好的EXE程序痘括,會出現(xiàn)如圖所示界面:
然后會自動在同級目錄下生成一個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)限運行即可:
Linux的話住诸,使用命令nohup go-cqhttp &
后臺運行:
初次運行會自動創(chuàng)建設(shè)備:
然后需要驗證新設(shè)備以登錄:
這里輸入1
按下回車:
鼠標(biāo)選中->
和<-
之間的網(wǎng)址驾胆,按下ctri+shift+C
復(fù)制鏈接,然后打開瀏覽器贱呐,在地址欄粘貼鏈接進入驗證頁面丧诺,在頁面空白處右鍵單擊檢查
:
選擇network
等候抓包:
然后手動拖動滑塊,完成驗證奄薇,查看右邊抓到的包:
其中的ticket
即為需要在命令行輸入的字符串驳阎。雙擊該字符串選中復(fù)制,隨便找個地方粘貼出來看看再復(fù)制一遍,然后在命令行窗口單擊鼠標(biāo)右鍵即可粘貼進去呵晚,然后回車蜘腌,即可看到登陸成功:
yes醬啟動
windows的話在yes醬根目錄下啟動cmd命令行窗口,輸入命令啟動:
python main.py
linux的話使用命令nohup python main.py &
啟動饵隙,可后臺運行
yes醬啟動:
程序效果
在群聊里艾特yes醬即可:
在群里艾特yes醬發(fā)送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ù)