1.前置說明
-
該部署文檔會按照先在 Windows 上部署運(yùn)行再在 Linux 服務(wù)器上部署運(yùn)行的步驟講解,每一步操作都會比較詳細(xì),提供保姆級教程,因此可以放心食用。
-
你在 Windows 上部署運(yùn)行需要有的環(huán)境:
- JDK8 及以上版本;
- 集成開發(fā)環(huán)境 IDEA;
- Maven(IDEA 會自帶,也可以額外下載)。
-
如果你想讓你的機(jī)器人持續(xù)運(yùn)行,監(jiān)聽消息,你需要購買一個 Linux 服務(wù)器,同時將服務(wù)器防火墻所有端口開放。
-
當(dāng)然,你還需要準(zhǔn)備一個 QQ 號作為我們的機(jī)器人,等級不要太低,群聊容易被封,私聊應(yīng)該沒什么問題。
-
我們等會需要從 Github 上下載一些東西,如果你受到了網(wǎng)速的影響無法下載,可以從我的網(wǎng)盤中直接獲?。篽ttps://pan.baidu.com/s/17s2usSxazCoV0FtqOGajTQ?pwd=1314
需要下載的東西包括了:
- pbbot-rq-v0.1.14-win-x86_64.exe
- static.zip
- Spring-Mirai-Server-master.zip
- socksdroid-1.0.3.apk
- pbbot-rq-v0.1.14-linux-x86_64
2.機(jī)器人框架的下載與運(yùn)行
這里我們選用基于 ricq-高性能 QQ 協(xié)議 的機(jī)器人框架 pbbot-rq。
2.1 下載機(jī)器人框架
框架版本地址:https://github.com/ProtobufBot/pbrq/releases
由于先在 Windows 上進(jìn)行演示,這里我們選擇下載當(dāng)前最新 0.0.14 windows 版本。
在硬盤任意位置創(chuàng)建一個文件夾,這里取名為 pbrq
,將下載好的 pbbot-rq-v0.1.14-win-x86_64.exe 放到 pbrq 文件夾下。
為了 方便/簡化 后續(xù)命令的執(zhí)行,我們在這里將 pbbot-rq-v0.1.14-win-x86_64.exe 重命名為 pbbot-rq.exe
:
2.2 下載可操作框架的靜態(tài)頁面
靜態(tài)頁面版本地址:https://github.com/lz1998/ricq-react-ui/releases
這里我們下載當(dāng)前最新的 v0.1.7 版本。
將下載好的 static.zip 解壓后也放到 pbrq
文件夾下。
2.3 運(yùn)行機(jī)器人框架
在 pbrq 文件夾下打開 cmd 窗口:
執(zhí)行命令:
pbbot-rq --bind-addr 0.0.0.0:9000 --static-dir static
3.登錄QQ機(jī)器人
?? 如果你下定決心嘗試實(shí)現(xiàn) QQ 機(jī)器人,請不要半途而廢,最好找到比較充裕的時間把該文檔的過程一次性走完。因?yàn)槿绻l繁的下線又登錄QQ機(jī)器人存在賬號被封的風(fēng)險。當(dāng)然這是我遇到的情況,雖然解封非常簡單,只需要掃臉認(rèn)證一下是本人即可。但還是最好不要這么做。
3.1 前提說明
為了保證 QQ 登錄的可靠性,我們需要先對作為機(jī)器人登錄的 QQ 做以下處理:
-
在手機(jī)上登錄 QQ,找到
設(shè)置
->賬號安全
->登錄設(shè)備管理
,把除了當(dāng)前本機(jī)之外的其他設(shè)備管理全刪除,效果如圖: -
將你的手機(jī)與使用的電腦處于同一網(wǎng)絡(luò)中,有兩種可選方式:
- 手機(jī)關(guān)閉 wifi,使用流量,同時開啟手機(jī)熱點(diǎn),讓電腦連上手機(jī)熱點(diǎn);
- 手機(jī)和電腦使用同一 wifi 信號,例如 校園網(wǎng)。
?? 記得如果在手機(jī)和電腦上啟動了代理設(shè)備(翻墻軟件),記得關(guān)閉下。
3.2 掃碼登錄
?? 訪問本地網(wǎng)頁:http://localhost:9000
點(diǎn)擊“創(chuàng)建賬號”,切換到“QRCode”掃碼登錄方式,將 QQ 號
作為“Seed”,將 Watch
作為“Protocol”。
配置信息完畢,點(diǎn)擊“Login”,就會彈出一個二維碼,直接使用手機(jī)進(jìn)行掃碼。
掃碼后,手機(jī)上會彈出“登錄確認(rèn)”提醒:
點(diǎn)擊“登錄”,再次查看網(wǎng)頁界面,切換到“正在運(yùn)行”界面,就可以看到我們正在運(yùn)行的 QQ 了:
運(yùn)行成功后,建議不要頻繁關(guān)閉又運(yùn)行 pbbot-cq 機(jī)器人框架程序,因?yàn)橐坏╆P(guān)閉了 cmd 就意味著 QQ 下線了,頻繁登錄可能導(dǎo)致被封。
這時候查看我們的 cmd 控制臺,發(fā)現(xiàn)一直在發(fā)出警告:
這是正常的,因?yàn)樵?pbbot-rq 框架一直在嘗試與本機(jī)的 8081 端口建立連接。也就是我們可以編寫后端程序來處理這些消息了,例如存儲或者回復(fù)消息。
當(dāng)然,如果你嘗試使用其它 QQ 賬號向該 QQ 發(fā)送消息,pbbot-rq 是可以收到消息的,會在 cmd 控制臺上顯示出來:
3.3 注意事項(xiàng)
如果遇到如下圖所示登陸失敗的情況:當(dāng)前設(shè)備網(wǎng)絡(luò)不穩(wěn)定或處于夏雜網(wǎng)絡(luò)環(huán)境,為了你的帳號安全,建議將兩個設(shè)備連接同一網(wǎng)絡(luò)或?qū)⒈粧呙柙O(shè)備連接你的手機(jī)熱點(diǎn)后,重新掃碼登錄。
那么你在電腦上登錄校驗(yàn)時,注意以下幾點(diǎn):
- 設(shè)備種子統(tǒng)一使用 QQ 號;
- 電腦要連接你手機(jī)的熱點(diǎn)或使用同一 wifi,且保證代理軟件已關(guān)閉;
- QQ中
設(shè)置
-->賬號安全
-->登錄設(shè)備管理
--> 刪除所有除了你登錄在當(dāng)前手機(jī)的設(shè)備,相當(dāng)于只留下了一個當(dāng)前登錄 QQ 的本地手機(jī)設(shè)備。
4.后端程序處理消息
我們使用一個后端程序來與 pbbot-rq 建立連接,可以接收到消息并做出處理后交給 pbbot-rq 進(jìn)一步處理。
關(guān)于這個后端程序,pbbot-rq 的作者已經(jīng)為我們提供了一個快速開發(fā)的 spring boot stateer,我們只需要在此基礎(chǔ)上進(jìn)一步修改代碼做自定義處理即可。
4.1 下載 stater
?? 倉庫地址:https://github.com/ProtobufBot/Spring-Mirai-Server
4.2 stater 基本說明
下載完成后解壓縮,使用 IDEA 打開該項(xiàng)目。
Plugin 包下有四個插件類,是對消息進(jìn)行處理的插件,允許執(zhí)行的插件以及插件的執(zhí)行順序在 application.yml 中進(jìn)行配置:
spring:
bot:
plugin-list: # 配置插件列表(有序),如果插件返回0,繼續(xù)執(zhí)行剩余插件,如果插件返回1,終止剩余插件執(zhí)行
- net.lz1998.pbbot.plugin.LogPlugin # 日志插件
- net.lz1998.pbbot.plugin.DemoPlugin # 測試插件
- net.lz1998.pbbot.plugin.ImagePlugin # 動態(tài)生成圖片插件
- net.lz1998.pbbot.plugin.HelloPlugin # 測試插件
server:
port: 8081 # 不要去動這個端口,因?yàn)?pbbot-rq 在嘗試向本機(jī)的 8081 端口建立連接。
4.3 運(yùn)行后端程序
為了方便測試與便于理解,我們先將 ImagePlugin
和 HelloPlugin
的配置注釋掉:
spring:
bot:
plugin-list: # 配置插件列表(有序),如果插件返回0,繼續(xù)執(zhí)行剩余插件,如果插件返回1,終止剩余插件執(zhí)行
- net.lz1998.pbbot.plugin.LogPlugin # 日志插件
- net.lz1998.pbbot.plugin.DemoPlugin # 測試插件
# - net.lz1998.pbbot.plugin.ImagePlugin # 動態(tài)生成圖片插件
# - net.lz1998.pbbot.plugin.HelloPlugin # 測試插件
server:
port: 8081
再將 DemoPlugin
修改為以下內(nèi)容:
@Component
public class DemoPlugin extends BotPlugin {
/**
* 對私聊消息進(jìn)行處理,這里我們實(shí)現(xiàn)一個QQ機(jī)器人復(fù)讀機(jī)效果
*/
@Override
public int onPrivateMessage(@NotNull Bot bot, @NotNull OnebotEvent.PrivateMessageEvent event) {
// 拿到發(fā)送給 QQ 機(jī)器人消息的發(fā)送者的 QQ 號
long userId = event.getUserId();
// 拿到發(fā)送者的發(fā)送消息內(nèi)容
String eventRawMessage = event.getRawMessage();
// 構(gòu)建準(zhǔn)備回復(fù)的消息,將發(fā)送者消息作為 QQ 機(jī)器人的回復(fù)
Msg msg = Msg.builder().text(eventRawMessage);
// 發(fā)送消息
bot.sendPrivateMsg(userId, msg, false);
// 表示不繼續(xù)執(zhí)行下一個插件
return MESSAGE_BLOCK;
}
}
將 MyAspect
類的 @Component
注解注釋掉:
找到 SpringMiraiServerApplication
啟動類,啟動項(xiàng)目。
可以看到新的連接已經(jīng)建立了,其實(shí)是與 pbbot-rq 建立了連接。我們再觀察 cmd 控制臺,發(fā)現(xiàn)也不報警告了:
4.4 測試消息處理
我們在上一步修改了 DemoPlugin 的代碼,對發(fā)送給 QQ 機(jī)器人私有消息進(jìn)行了處理,即會回復(fù)重復(fù)的消息,我們就此進(jìn)行測試。
拿其它 QQ 賬號向 QQ 機(jī)器人發(fā)送消息,發(fā)現(xiàn) QQ 機(jī)器人進(jìn)行了回復(fù):
查看 cmd 控制臺:
查看后端應(yīng)用程序控制臺:
4.5 關(guān)于擴(kuò)展消息處理
你可以自定義插件類去對消息做更多處理,作者提供的四個插件類已經(jīng)做了一些示例來處理來自“私聊”和“群聊”的消息。
當(dāng)然,了解更多的功能,你可以參考作者的博客:lz1998’s blog
?? 在對群聊消息進(jìn)行處理回復(fù)時,你需要注意 QQ 機(jī)器人的等級不要太低。我目前的 QQ 機(jī)器人等級是 3 個月亮,在十幾個人的群聊里進(jìn)行 QQ 機(jī)器人的消息回復(fù)沒有任何問題,但當(dāng)加入了一百多個人的大群進(jìn)行消息回復(fù)一段時間后,就會被騰訊禁用無法發(fā)送消息到群聊(隔 24 個小時后又恢復(fù)了,如此往復(fù)幾天后不再會被禁用),但私聊還是被允許的。
5.Linux 服務(wù)器持續(xù)運(yùn)行 QQ 機(jī)器人
上述已經(jīng)演示了如何在 Windows 上運(yùn)行,為了讓 QQ 機(jī)器人持續(xù)運(yùn)行提供服務(wù),我們需要把 QQ 機(jī)器人放到 Linux 服務(wù)器上。
5.1 安裝 docker
?? 基于centos的安裝
-
安裝yum-utils
sudo yum install -y yum-utils
-
從國內(nèi)服務(wù)器上下載docker
sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安裝docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
驗(yàn)證是否成功
sudo docker --version
?? 基于ubuntu
-
安裝需要的包
sudo apt-get update
-
安裝依賴包
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
-
添加 阿里 GPG 密鑰
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
-
設(shè)置遠(yuǎn)程倉庫
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
-
安裝 Docker-CE
sudo apt-get update
# 會讓你輸入 y/n,選擇輸入 y sudo apt-get install docker-ce docker-ce-cli containerd.io
-
驗(yàn)證是否成功
sudo docker --version
5.2 配置阿里云加速器
國內(nèi)鏡像中心常用的為阿里云與網(wǎng)易云,選擇其中一個加速器進(jìn)行配置即可。在本地 Docker 中指定要使用的國內(nèi)加速器地址后,就可以直接從國內(nèi)鏡像中心下載鏡像了。這里我們配置阿里云加速器。
?? 找到相應(yīng)頁面
若要配置阿里云加速器,必須首先要有阿里云的賬號。
登錄阿里云后,打開阿里云的容器鏡像服務(wù) (aliyun.com)。
然后找到如下頁面,可以查看到你的 registry-mirrors
:
?? 創(chuàng)建 docker 目錄
sudo mkdir -p /etc/docker
?? 創(chuàng)建 daemon.json 文件
注意,該 json 數(shù)據(jù)中的 URL 地址是與阿里云用戶登錄賬號綁定的,不同的阿里云用戶所生成的地址是不同的。
sudo vim /etc/docker/daemon.json
將以下內(nèi)容放入 daemon.json 中,registry-mirrors 的值需要查看你的阿里云用戶的加速器地址。
{
"registry-mirrors": ["https://*******.mirror.aliyuncs.com"]
}
?? 重新加載服務(wù)配置文件
sudo systemctl daemon-reload
?? 重啟 docker 引擎
sudo systemctl restart docker
5.3 將手機(jī)與服務(wù)器處于同一網(wǎng)絡(luò):socks5
在 Windows 上登錄 QQ 機(jī)器人時,我們說明了需要讓手機(jī)和電腦處于同一網(wǎng)絡(luò),這里我們需要同樣進(jìn)行處理,讓手機(jī)和 Linux 服務(wù)器也處于同一網(wǎng)絡(luò)。
?? 什么是 SOCKS5
SOCKS5 是一個代理協(xié)議,它在使用 TCP/IP 協(xié)議通訊的前端機(jī)器和服務(wù)器機(jī)器之間扮演一個中介角色,使得內(nèi)部網(wǎng)中的前端機(jī)器變得能夠訪問 Internet 網(wǎng)中的服務(wù)器,或者使通訊更加安全。
socks5 類似于梯子,可以通過 socks5 協(xié)議,將自己的設(shè)備“偽裝”成對應(yīng)的服務(wù)器(socks5 屬于明文代理,不能用來做一些特殊的事),可以使用 socks5 來做跳板機(jī)等常用的運(yùn)維工具。
?? 設(shè)置數(shù)據(jù)卷
# 創(chuàng)建目錄
sudo mkdir -p /app/socks5-docker
# 編輯配置信息
sudo vim /app/socks5-docker/sockd.passwd
將以下內(nèi)容寫入到 sockd.passwd 中:
sockd:xJY9EJy0Bk//U
?? 運(yùn)行容器
sudo docker run \
--name sockd \
--publish 2020:2020 \
--volume /app/socks5-docker/sockd.passwd:/home/danted/conf/sockd.passwd \
-d lozyme/sockd
?? 創(chuàng)建用戶
這里我將用戶的用戶名設(shè)置為 testu
,密碼設(shè)置為 testp
。
sudo docker exec sockd script/pam add testu testp
?? 驗(yàn)證
sudo curl https://ifconfig.co --socks5 127.0.0.1:2020 --proxy-user testu:testp
#此處顯示為你的服務(wù)器 ip,則為成功
?? 下載連接工具
這個工具是在手機(jī)上進(jìn)行安裝使用的。
?? 下載地址:Releases · bndeff/socksdroid (github.com)
下載完成后,將安裝包發(fā)送給手機(jī),然后手機(jī)上安裝。
?? 手機(jī)與服務(wù)器建立連接
進(jìn)行如下配置:
- Server IP:你的服務(wù)器的 IP 地址;
- Server Port:2020;
- Username:用戶名,使用我們之前配置的 testu;
- Password:密碼,使用我們之前配置的 testp。
設(shè)置完成后,點(diǎn)擊右上角的“開關(guān)”,即可開啟代理。
5.4 將所有啟動文件放到 Linux
?? 下載并上傳 Linux 版的 pbbot-rq.exe
?? Releases · ProtobufBot/pbrq (github.com)
在 Linux 服務(wù)器上新建 qqrobot
文件夾,添加權(quán)限,并進(jìn)入到該目錄下:
# 在根目錄下創(chuàng)建 qqrobot 文件夾
sudo rmdir /qqrobot
# 添加權(quán)限,方便文件上傳
sudo chmod 777 /qqrobot
# 進(jìn)入 qqrobot 文件夾
cd qqrobot
將從 Github 下載好的 pbbot-rq-v0.1.14-linux-x86_64
上傳到 qqrobott
文件夾下:
# 將 pbbot-rq-v0.1.14-linux-x86_64 重命名為 pbbot-rq
sudo mv pbbot-rq-v0.1.14-linux-x86_64 pbbot-rq
# 添加權(quán)限
sudo chmod 777 pbbot-rq
?? 上傳靜態(tài)頁面
我們只需要將之前下載的 static.zip
重新解壓一份上傳到 Linux 服務(wù)器的 qqrobot
文件夾下即可。
?? 打包并上傳后端程序
使用 IDEA 打開我們在本文第四節(jié)使用的 Spring-Mirai-Serve,該項(xiàng)目我們已經(jīng)實(shí)現(xiàn)了私聊時的復(fù)讀機(jī)功能。
現(xiàn)在我們把這個項(xiàng)目打包成 jar
,放到 Linux 服務(wù)器上去運(yùn)行。
打包后在 target 文件夾下就可以看到了:
我們將 spring-mirai-server-0.0.1-SNAPSHOT.jar
同樣上傳到 Linux 服務(wù)器的 qqrobot
文件夾下:
?? Linux 安裝 JDK 環(huán)境
-
centos
sudo yum install java-1.8.0-openjdk
-
ubuntu
# 會讓你輸入 y/n,選擇輸入 y sudo apt install openjdk-8-jre-headless
?? 登錄 QQ 機(jī)器人
?? 前提說明
這里與之前在 Windows 上登錄 QQ 機(jī)器人同樣的要求:
- 保證登錄設(shè)備只存在手機(jī)本機(jī)一個;
- 服務(wù)器和手機(jī)處于同一網(wǎng)絡(luò),這個問題我們已經(jīng)使用 socks 解決了,登錄成功后就可以關(guān)閉 socks 了。
?? 啟動 pbbot-rq
# 在 qqrobot 文件夾下執(zhí)行該命令,采用的后臺運(yùn)行模式
sudo nohup ./pbbot-rq --bind-addr 0.0.0.0:9000 --static-dir static >pbrq.log 2>&1 &
?? 在自己電腦上訪問:http://【服務(wù)器IP】:9000
?? 掃碼登錄
點(diǎn)擊“Login”,就會顯示登錄二維碼。
使用手機(jī)掃碼后,就能登錄成功了。
登陸成功后,就可以關(guān)閉 socks 了,在 Linux 上的操作:
# 關(guān)閉 socks
sudo docker stop sockd
# 啟動 socks
sudo docker start sockd
?? 啟動后端程序
# 在 qqrobot 文件夾下執(zhí)行該命令,采用的后臺運(yùn)行模式
sudo nohup java -jar spring-mirai-server-0.0.1-SNAPSHOT.jar >qqrobot.log 2>&1 &
?? 測試
使用其它賬號嘗試向 QQ 機(jī)器人發(fā)送消息:
?? 停止運(yùn)行
?? 停止后端程序運(yùn)行
如果你是想讓 QQ 機(jī)器人停止對消息的處理而不是退出登錄,則只需要停止后端程序的運(yùn)行。當(dāng)然也推薦這么做,避免重復(fù)登錄。
# 查看后端程序運(yùn)行的 pid
sudo ps -ef | grep java
# 格式:sudo kill <pid>
sudo kill 22016
?? 停止 pbbot-rq 框架運(yùn)行
這意味著 QQ 機(jī)器人下線。
# 查看框架運(yùn)行的 pid
sudo ps -ef | grep pbbot-rq
# 格式:sudo kill <pid>
sudo kill 21915
6.總結(jié)
以上就是全部說明,每一步都是我的實(shí)際操作。
最后,如果你在運(yùn)行 QQ 機(jī)器人一段時間后遇到了如下問題被迫下線:
文章來源:http://www.zghlxwxcb.cn/news/detail-720718.html
你只需要點(diǎn)擊“去處理”,認(rèn)證是本人登錄即可,非常簡單。初次使用 QQ 機(jī)器人時可能會遇到這個問題,運(yùn)行久了就不會出現(xiàn)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-720718.html
到了這里,關(guān)于2023 版 QQ 機(jī)器人運(yùn)行部署文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!