前言:
程序上云的服務(wù)器搭建步驟已經(jīng)發(fā)布,大家可以移步至此查看:【0基礎(chǔ)QQ機(jī)器人開發(fā)二】服務(wù)器篇
一、本文目的:
前段時間由于學(xué)習(xí)原因產(chǎn)生了一個自動化管理QQ群的需求,在我?guī)滋斓呐χ?通過各種學(xué)習(xí)CV,終于實(shí)現(xiàn)了該需求,但是因?yàn)檫@個項(xiàng)目并不是很完美,里面有些許的bug,導(dǎo)致身為完美主義的我很快就將其棄用,等過了一段時間想將其完善一下的時候,發(fā)現(xiàn)之前在項(xiàng)目中所需要的知識已經(jīng)忘得一干二凈,因此有了這篇博客,這也是我在學(xué)習(xí)編程路上的一大痛點(diǎn),因此,以后我會堅持發(fā)文,鞏固學(xué)習(xí),也希望大家可以互相監(jiān)督,共同進(jìn)步!!!
同時也可以為想要打造自己的QQ機(jī)器人的同學(xué)提供一點(diǎn)點(diǎn)經(jīng)驗(yàn).
二、實(shí)現(xiàn)歷程:
有了需求之后,我便開始了我的面向百度編程,一開始想要通過web端QQ實(shí)現(xiàn),結(jié)果突然想起web端qq已經(jīng)停運(yùn),因此想要借助win32這個庫,通過程序界面實(shí)現(xiàn)自動化,結(jié)果還是太年輕了,作為一個六邊形小白,我連pywin32的庫都看不太懂,因此繼續(xù)面向百度編程,終于我在網(wǎng)上發(fā)現(xiàn)了不知道哪位大佬寫的基于一個我也不知道的語言開發(fā)的框架基于go語言開發(fā)的框架go-cqhttp。
三、開發(fā)過程
1.準(zhǔn)備工作
搭建一個QQ機(jī)器人需要什么?
- 一臺windows電腦
- 一臺云服務(wù)器
我們需要準(zhǔn)備go-cqhttp以及python環(huán)境,如果想要把機(jī)器人部署在服務(wù)器上可以去騰訊云買一個服務(wù)器,服務(wù)器相當(dāng)于一個遠(yuǎn)程的電腦,由專人維護(hù)而且穩(wěn)定性高,可以實(shí)現(xiàn)7*24小時的運(yùn)行,有了云服務(wù)器即可實(shí)現(xiàn)QQ機(jī)器人24小時在線啦,所以推薦大家使用服務(wù)器運(yùn)行,什么?都3202年了你還沒有服務(wù)器!趕緊去騰訊云買一個,具體教程選購云服務(wù)器,下面就跟上我的步伐,let’s go!!!
1.cq-http的下載地址:Releases · Mrs4s/go-cqhttp (github.com)
友情提示:如果登錄不上github,大家可以通過我的百度云連接下載,我提供了x86機(jī)器的windows版和linux版兩個包
進(jìn)去之后我們可以看到有眾多版本可以選擇,大家根據(jù)電腦選擇即可
不管你部署在哪里,都必須要安裝windows版本,這個具體原因后面再說。
-
如果要部署在服務(wù)器,可以再服務(wù)器使用
uanem -a
查看機(jī)器的架構(gòu),一般服務(wù)器都是x86_64所以我們選擇linux_amd64.deb的版本即可 -
- 如果要部署在windows可以點(diǎn)擊show all 25 assets選擇windows_amd64.zip即可
下載好后
-
如果要在windows上進(jìn)行部署,直接解壓可以看到如下安裝包,
-
如果要在linux服務(wù)器上進(jìn)行部署,如果下載的是deb包,可以直接使用
sudo dpkg -i go-cqhttp_1.1.0_adm64.deb
即可安裝成功
2. 運(yùn)行
windows平臺
再windows平臺下直接打開解壓好的壓縮包,運(yùn)行g(shù)o-cqhttp.exe即可運(yùn)行
可能會出現(xiàn)如下彈窗,點(diǎn)擊仍要運(yùn)行
一直點(diǎn)確定即可
最后可以看到文件夾多出了一個.bat文件 雙擊運(yùn)行
運(yùn)行后選擇0 回車再關(guān)掉窗口
可以看到又多出了一個config.yml文件,這是文件用來設(shè)置我們要登陸的qq號以及一些其他的配置信息,雙擊使用記事本打開
在相應(yīng)位置輸入賬號和密碼
保存并關(guān)閉
重點(diǎn)來了?。?!
電腦要和登錄qq的手機(jī)處于同一局域網(wǎng)下,也就是連接同一個wifi
然后雙擊go-cqhttp.bat運(yùn)行
未完待續(xù)。。。
一下內(nèi)容為之前寫的,版本有些老了
- linux平臺在安裝好后直接輸入命令
go-cqhttp
即可運(yùn)行
第一次運(yùn)行會生成一個config.yml文件,這個文件是用來配置我們要登錄的qq號和密碼以及一些其他配置的文件
- windows平臺直接雙擊使用記事本打開config.yml,在相應(yīng)的位置輸入你的qq號
- linux平臺需要使用文本編輯器來編輯文件。
2.python環(huán)境的配置
在linux服務(wù)器上安裝python,一般服務(wù)器都會自帶python開發(fā)環(huán)境
2.程序配置
1.將go-cqhttp解壓之后出現(xiàn)會三個文件
我們雙擊go-cqhttp.exe文件
這時候會出現(xiàn)如下界面:
我們無腦確認(rèn)就可以
2.這時候我們發(fā)現(xiàn)文件里多出了一個.bat文件
.bat文件是批處理文件,我們可以通過運(yùn)行.bat文件運(yùn)行我們提前在里面寫好的cmd命令
這時我們運(yùn)行.bat文件,出現(xiàn)如下窗口
這里我們輸入0再回車,選擇HTTP通信
- 這時文件中又多出了一個config.yml文件
4.重點(diǎn)來了
這個配置文件就是一直讓我出錯,出bug的根源,這里是我配置好的,可以直接復(fù)制到你的.yml文件中用,只需要吧QQ賬號和密碼(密碼為空時會使用掃碼登陸)替換成你的即可(.yml文件可以直接用記事本打開)
這里說幾個我認(rèn)為比較重要的點(diǎn):
-
heartbeat是心跳頻率,貌似是用于防止騰訊把你踢下線的,不需要可以改為-1
-
5700端口是用于向服務(wù)器發(fā)送請求的端口 -
5701端口是用于監(jiān)聽返回的消息的端口 -
max-retries最好設(shè)置為0,因?yàn)榈谝淮斡玫臅r候發(fā)現(xiàn)一條消息總是接收好幾遍,原來是這個參數(shù)搞的鬼
以上兩個端口如果跟你電腦使用的端口有重復(fù)可以進(jìn)行修改,防止出問題
# go-cqhttp 默認(rèn)配置文件
account: # 賬號相關(guān)
uin: 123456 # QQ賬號
password: '' # 密碼為空時使用掃碼登錄
encrypt: false # 是否開啟密碼加密
status: 0 # 在線狀態(tài) 請參考 https://docs.go-cqhttp.org/guide/config.html#在線狀態(tài)
relogin: # 重連設(shè)置
delay: 3 # 首次重連延遲, 單位秒
interval: 3 # 重連間隔
max-times: 0 # 最大重連次數(shù), 0為無限制
# 是否使用服務(wù)器下發(fā)的新地址進(jìn)行重連
# 注意, 此設(shè)置可能導(dǎo)致在海外服務(wù)器上連接情況更差
use-sso-address: true
# 是否允許發(fā)送臨時會話消息
allow-temp-session: false
heartbeat:
# 心跳頻率, 單位秒
# -1 為關(guān)閉心跳
interval: 5
message:
# 上報數(shù)據(jù)類型
# 可選: string,array
post-format: string
# 是否忽略無效的CQ碼, 如果為假將原樣發(fā)送
ignore-invalid-cqcode: false
# 是否強(qiáng)制分片發(fā)送消息
# 分片發(fā)送將會帶來更快的速度
# 但是兼容性會有些問題
force-fragment: false
# 是否將url分片發(fā)送
fix-url: false
# 下載圖片等請求網(wǎng)絡(luò)代理
proxy-rewrite: ''
# 是否上報自身消息
report-self-message: false
# 移除服務(wù)端的Reply附帶的At
remove-reply-at: false
# 為Reply附加更多信息
extra-reply-data: false
# 跳過 Mime 掃描, 忽略錯誤數(shù)據(jù)
skip-mime-scan: false
output:
# 日志等級 trace,debug,info,warn,error
log-level: warn
# 日志時效 單位天. 超過這個時間之前的日志將會被自動刪除. 設(shè)置為 0 表示永久保留.
log-aging: 15
# 是否在每次啟動時強(qiáng)制創(chuàng)建全新的文件儲存日志. 為 false 的情況下將會在上次啟動時創(chuàng)建的日志文件續(xù)寫
log-force-new: true
# 是否啟用日志顏色
log-colorful: true
# 是否啟用 DEBUG
debug: false # 開啟調(diào)試模式
# 默認(rèn)中間件錨點(diǎn)
default-middlewares: &default
# 訪問密鑰, 強(qiáng)烈推薦在公網(wǎng)的服務(wù)器設(shè)置
access-token: ''
# 事件過濾器文件目錄
filter: ''
# 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 # 是否啟用限速
frequency: 1 # 令牌回復(fù)頻率, 單位秒
bucket: 1 # 令牌桶大小
database: # 數(shù)據(jù)庫相關(guān)設(shè)置
leveldb:
# 是否啟用內(nèi)置leveldb數(shù)據(jù)庫
# 啟用將會增加10-20MB的內(nèi)存占用和一定的磁盤空間
# 關(guān)閉將無法使用 撤回 回復(fù) get_msg 等上下文相關(guān)功能
enable: true
# 媒體文件緩存, 刪除此項(xiàng)則使用緩存文件(舊版行為)
cache:
image: data/image.db
video: data/video.db
# 連接服務(wù)列表
servers:
# 添加方式,同一連接方式可添加多個,具體配置說明請查看文檔
#- http: # http 通信
#- ws: # 正向 Websocket
#- ws-reverse: # 反向 Websocket
#- pprof: #性能分析服務(wù)器
- http: # HTTP 通信設(shè)置
address: 0.0.0.0:5700 # HTTP監(jiān)聽地址
timeout: 5 # 反向 HTTP 超時時間, 單位秒,<5 時將被忽略
long-polling: # 長輪詢拓展
enabled: false # 是否開啟
max-queue-size: 2000 # 消息隊列大小,0 表示不限制隊列大小,謹(jǐn)慎使用
middlewares:
<<: *default # 引用默認(rèn)中間件
post: # 反向HTTP POST地址列表
- url: 'http://127.0.0.1:5701/' # 地址
secret: '' # 密鑰
max-retries: 0 # 最大重試,0 時禁用
# retries-interval: 1500 # 重試時間,單位毫秒,0 時立即
#- url: http://127.0.0.1:5701/ # 地址
# secret: '' # 密鑰
# max-retries: 10 # 最大重試,0 時禁用
# retries-interval: 1000 # 重試時間,單位毫秒,0 時立即
5.當(dāng)我們配置好以后,運(yùn)行go-cqhttp.bat文件,按照提示進(jìn)行登陸即可
出現(xiàn)如下界面即表示登陸成功
3.python程序開發(fā)
在這里我先為大家提供簡單的接收和發(fā)送消息的代碼以及一些官方文檔中的API,等有時間有人看了我再上傳一些自己寫的代碼
import requests
import socket
import json
ListenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ListenSocket.bind(('localhost', 5701))
ListenSocket.listen(100)
HttpResponseHeader = '''HTTP/1.1 200 OK
Content-Type: text/html
'''
def request_to_json(msg):
for i in range(len(msg)):
if msg[i]=="{" and msg[-1]=="}":
return json.loads(msg[i:])
return None
def rev_msg():
Client, Address = ListenSocket.accept()
Request = Client.recv(1024).decode(encoding='utf-8')
# print(Request)
rev_json=request_to_json(Request)
Client.sendall((HttpResponseHeader).encode(encoding='utf-8'))
Client.close()
return rev_json
data = {
'user_id': 123456,# QQ號
'message': '你好',# 消息內(nèi)容
'auto_escape': False
}
cq_url = "http://127.0.0.1:5700/send_private_msg"
rev = requests.post(cq_url, data=data)
print(rev.url)
if __name__ == '__main__':
print('============start==================')
while True:
rev_msg = rev_msg()
user_id = rev_msg.setdefault('user_id')
raw_message = rev_msg.setdefault('raw_message')
print(f'您收到了來自{user_id}的{raw_message}')
4.常用API
API | 功能 |
---|---|
/send_private_msg | 發(fā)送私聊消息 |
/send_group_msg | 發(fā)送群消息 |
/send_msg | 發(fā)送消息 |
/delete_msg | 撤回信息 |
/set_group_kick | 群組踢人 |
/set_group_ban | 群組單人禁言 |
/set_group_whole_ban | 群組全員禁言 |
/set_group_admin | 群組設(shè)置管理員 |
/set_group_card | 設(shè)置群名片(群備注) |
/set_group_name | 設(shè)置群名 |
/set_group_leave | 退出群組 |
/set_group_special_title | 設(shè)置群組專屬頭銜 |
/set_friend_add_request | 處理加好友請求 |
/set_group_add_request | 處理加群請求/邀請 |
/get_login_info | 獲取登錄號信息 |
/get_stranger_info | 獲取陌生人信息 |
/get_friend_list | 獲取好友列表 |
/get_group_info | 獲取群信息 |
/get_group_list | 獲取群列表 |
/get_group_member_info | 獲取群成員信息 |
/get_group_member_list | 獲取群成員列表 |
/get_group_honor_info | 獲取群榮譽(yù)信息 |
/can_send_image | 檢查是否可以發(fā)送圖片 |
/can_send_record | 檢查是否可以發(fā)送語音 |
/get_version_info | 獲取版本信息 |
/set_restart | 重啟 go-cqhttp |
/.handle_quick_operation | 對事件執(zhí)行快速操作 |
拓展 API 及與 OneBot 標(biāo)準(zhǔn)有略微差異的 API
拓展 API | 功能 |
---|---|
/set_group_portrait | 設(shè)置群頭像 |
/get_image | 獲取圖片信息 |
/get_msg | 獲取消息 |
/get_forward_msg | 獲取合并轉(zhuǎn)發(fā)內(nèi)容 |
/send_group_forward_msg | 發(fā)送合并轉(zhuǎn)發(fā)(群) |
/.get_word_slices | 獲取中文分詞 |
/.ocr_image |
四、心得
1.本文中有些知識點(diǎn)我還沒來得及寫下來,等過段時間我再繼續(xù)整理
2.有需求才會有動力,通過這次QQ機(jī)器人的需求,我學(xué)習(xí)了TCP/IP協(xié)議,socket網(wǎng)絡(luò)編程,requests庫,json庫等等,在此過程中收獲頗豐,相較于看視頻學(xué)習(xí)和看書學(xué)習(xí),這樣邊學(xué)邊用的過程極大地提高了知識點(diǎn)的復(fù)用性和實(shí)用性,因此也建議大家可以采用這樣的方式來學(xué)習(xí)!!!
3.由于本人小白一枚,文中的不足之處還請各位童鞋多多指出!栓Q!!!文章來源:http://www.zghlxwxcb.cn/news/detail-402860.html
4.喜歡本文的同學(xué)不妨點(diǎn)個關(guān)注,我會持續(xù)更新一些有趣的內(nèi)容~~文章來源地址http://www.zghlxwxcb.cn/news/detail-402860.html
到了這里,關(guān)于【0基礎(chǔ)QQ機(jī)器人開發(fā)】基于go-cqhttp的QQ機(jī)器人開發(fā)教程,僅供自學(xué)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!