上搭一個(gè)OneBot 11的QQ機(jī)器人)
10分鐘跑通OpenShamrock如何在安卓手機(jī)上搭一個(gè)OneBot 11的QQ機(jī)器人【免費(fèi)下載鏈接】OpenShamrockA Bot Framework based on Xposed with OneBot11項(xiàng)目地址: https://gitcode.com/gh_mirrors/op/OpenShamrock想要一個(gè) QQ 機(jī)器人卻發(fā)現(xiàn) go-cqhttp 早已停止維護(hù)純協(xié)議實(shí)現(xiàn)又時(shí)刻擔(dān)心賬號(hào)安全。OpenShamrock 是一個(gè)基于 XposedLSPosed實(shí)現(xiàn)的 QQ 機(jī)器人框架它直接運(yùn)行在你手機(jī)上的 QQ 進(jìn)程里并對(duì)外提供 OneBot 11/12 標(biāo)準(zhǔn)的 WebSocket 接口——你現(xiàn)有的 OneBot 代碼通常不用改動(dòng)把連接地址換成手機(jī)上的地址就能接上。它不是一臺(tái)獨(dú)立的協(xié)議服務(wù)器而是一個(gè) Xposed 模塊QQ 正常登錄、正常聊天Shamrock 在進(jìn)程內(nèi)部監(jiān)聽(tīng)消息、執(zhí)行 API 調(diào)用再把事件推送給你的機(jī)器人程序。本文按拿到→跑起來(lái)→看懂→排坑的順序講解照著做即可。 OpenShamrock 項(xiàng)目快照10 秒看清它是什么一句話(huà)定位OpenShamrock 是基于 LSPosedNon-Riru實(shí)現(xiàn) Kritor 標(biāo)準(zhǔn)的 OneBot 11/12 QQ 機(jī)器人框架。項(xiàng)目說(shuō)明它是什么Xposed 模塊形式的 QQ 機(jī)器人框架實(shí)現(xiàn) OneBot 11/12 標(biāo)準(zhǔn)技術(shù)棧Kotlin Xposed內(nèi)置 KSP 代碼生成與 Silk 語(yǔ)音解碼 C 源碼運(yùn)行環(huán)境已 root 的安卓設(shè)備 LSPosedQQ 9.0.70 及以上TIM 也可掛載對(duì)外接口正向 WebSocket默認(rèn) 5700 端口、反向 WebSocket均支持鑒權(quán) token模塊劃分app配置應(yīng)用、xposed核心、qqinterface 與 protobuf接口/協(xié)議定義、processor代碼生成許可證GPL-3.0拿到 OpenShamrock 后如何最快跑起來(lái)裝好模塊優(yōu)先從官方 Release 下載 APK想自己編譯的話(huà)先克隆倉(cāng)庫(kù)git clone https://gitcode.com/gh_mirrors/op/OpenShamrock再用 Android Studio 構(gòu)建。配置 LSPosed設(shè)備已 root 并裝好 LSPosed 后在 LSPosed 管理器中啟用 Shamrock 模塊作用域同時(shí)勾選QQ和系統(tǒng)。效果QQ 啟動(dòng)時(shí)模塊完成掛載系統(tǒng)是?;顧C(jī)制需要的不能漏。啟動(dòng)并掛載把 QQ 升到 9.0.70 以上重新登錄。效果模塊在 QQ 主進(jìn)程內(nèi)啟動(dòng)服務(wù)日志里能看到初始化記錄。配置連接方式打開(kāi) Shamrock 應(yīng)用或默認(rèn)配置文件二選一打開(kāi)正向active_rpctrue端口 5700或反向passive_rpc連接并填上鑒權(quán) tokenactive_ticket。效果手機(jī)側(cè)開(kāi)始按你指定的方式暴露 OneBot 接口。接入機(jī)器人把你現(xiàn)有的 OneBot 客戶(hù)端如 NoneBot的 ws 地址指向手機(jī)IP:5700。效果發(fā)一條測(cè)試消息事件推送和發(fā) API 都通了即算跑通。它是怎么工作的一個(gè)寄生在 QQ 進(jìn)程里的前臺(tái)接線(xiàn)員把它理解成坐在 QQ 前臺(tái)的接線(xiàn)員。QQ 收到一條新消息相當(dāng)于電話(huà)鈴響了入口類(lèi) XposedEntry 在 QQ 啟動(dòng)流程上掛了分機(jī)鈴響時(shí)先讓接線(xiàn)員聽(tīng)一遍把內(nèi)容整理成標(biāo)準(zhǔn)事件轉(zhuǎn)給你的機(jī)器人機(jī)器人要回話(huà)時(shí)接線(xiàn)員再替你把電話(huà)撥回去。具體分工分三層。第一層是 xposed 核心模塊xposed/actions 目錄里是一批啟動(dòng)動(dòng)作比如 Hook 系統(tǒng)框架防止息屏殺進(jìn)程KeepAlive、拉取遠(yuǎn)端配置、平板模式等負(fù)責(zé)活著這件事。第二層是接口與協(xié)議qqinterface 里是 QQ 內(nèi)部類(lèi)的接口定義protobuf 是與 QQ 服務(wù)器通信的數(shù)據(jù)結(jié)構(gòu)定義processor 模塊在編譯期用 KSP 從這些定義批量生成代碼避免手寫(xiě)樣板。第三層是 API 服務(wù)kritor/service 下的 MessageService、GroupService、FriendService 等就是你調(diào)用的接口消息的格式轉(zhuǎn)換管道在 qq/service/msg負(fù)責(zé)把 QQ 內(nèi)部的消息對(duì)象轉(zhuǎn)成 OneBot 標(biāo)準(zhǔn)格式。三個(gè)真實(shí)用例遷移舊機(jī)器人、自動(dòng)管群、收語(yǔ)音消息用例一遷移 go-cqhttp 舊機(jī)器人兼容性場(chǎng)景手上已有一套按 go-cqhttp 寫(xiě)的 OneBot 11 機(jī)器人舊實(shí)現(xiàn)沒(méi)人維護(hù)了。能做什么項(xiàng)目本身就是按 go-cqhttp 的文檔開(kāi)發(fā)的README 明確寫(xiě)了一鍵移植把舊機(jī)器人的 ws 地址指到手機(jī)上即可也支持與別的協(xié)議實(shí)現(xiàn)平行部署。注意什么手機(jī)要長(zhǎng)期在線(xiàn)且網(wǎng)絡(luò)可達(dá)息屏不能斷服務(wù)這正是模塊要 Hook 系統(tǒng)框架的原因鑒權(quán) token 兩側(cè)必須一致。用例二群管理自動(dòng)化API 能力場(chǎng)景幾百人的群人工審入群申請(qǐng)、發(fā)公告、處理禁言太累。能做什么通過(guò) GroupService 等接口自動(dòng)審核入群申請(qǐng)、發(fā)群公告、管理群成員權(quán)限服務(wù)層按消息、好友、群、文件劃分寫(xiě)業(yè)務(wù)時(shí)找接口很直接。注意什么機(jī)器人賬號(hào)自身要有對(duì)應(yīng)權(quán)限比如群管理員權(quán)限不足的 API 調(diào)用會(huì)直接失敗。用例三接收并解碼語(yǔ)音消息媒體處理場(chǎng)景希望機(jī)器人能處理用戶(hù)發(fā)的語(yǔ)音而不是只回一句我不聽(tīng)語(yǔ)音。能做什么倉(cāng)庫(kù)內(nèi)置了完整的 Silk 編解碼 C 源碼app/src/main/cpp/src/語(yǔ)音解碼是它的原生能力配合文檔的語(yǔ)音支持部分配置后機(jī)器人可以解碼并轉(zhuǎn)寫(xiě)處理語(yǔ)音。注意什么語(yǔ)音支持有額外的配置步驟不是裝完即生效倉(cāng)庫(kù)里的 AudioLibrary 壓縮包對(duì)應(yīng)不同 CPU 架構(gòu)別用錯(cuò)。 OpenShamrock 常見(jiàn)坑與排查現(xiàn)象→原因→怎么辦現(xiàn)象QQ 能正常用但模塊完全不生效。原因QQ 低于 9.0.70官方明確低版本不再修復(fù)。怎么辦升級(jí)到 9.0.70 以上別在低版本上反復(fù)試?,F(xiàn)象連接正常息屏或放后臺(tái)一陣子后機(jī)器人掉線(xiàn)。原因作用域只勾了 QQ保活依賴(lài)的系統(tǒng)范圍沒(méi)加進(jìn)程被系統(tǒng)回收。怎么辦在 LSPosed 中把模塊作用域補(bǔ)上系統(tǒng)并授予對(duì)應(yīng)權(quán)限?,F(xiàn)象機(jī)器人程序一連就被斷開(kāi)或拒絕。原因鑒權(quán) token 為空或客戶(hù)端 token 與手機(jī)側(cè)active_ticket不一致。怎么辦兩側(cè)配置同一個(gè) token保存后重啟 QQ 讓配置生效?,F(xiàn)象5700 端口沒(méi)有監(jiān)聽(tīng)。原因正向 RPC 默認(rèn)是關(guān)閉的active_rpc默認(rèn)為 false或者端口被占用。怎么辦打開(kāi)active_rpc或把rpc_port改成空閑端口客戶(hù)端同步改?,F(xiàn)象擔(dān)心對(duì)賬號(hào)有風(fēng)險(xiǎn)。原因歷史上基于 Riru 的方案出過(guò)封號(hào)問(wèn)題。怎么辦按項(xiàng)目說(shuō)明選用 LSPosedNon-Rilu路線(xiàn)并用專(zhuān)門(mén)的副號(hào)跑機(jī)器人別用主號(hào)。該不該選 OpenShamrock一句話(huà)選型建議它適合手里有已 root 安卓設(shè)備、想拿真實(shí) QQ 跑 OneBot 11 機(jī)器人、又不想維護(hù)協(xié)議服務(wù)器的人不適合不想碰 root、需要部署在 PC/服務(wù)器或追求高并發(fā)穩(wěn)定運(yùn)行的場(chǎng)景那些情況純協(xié)議方案更合適。另外 README 聲明本項(xiàng)目以學(xué)習(xí)交流與研究 Xposed 為主商業(yè)或大規(guī)模部署前請(qǐng)自行評(píng)估合規(guī)與賬號(hào)風(fēng)險(xiǎn)。官方倉(cāng)庫(kù)入口https://gitcode.com/gh_mirrors/op/OpenShamrock【免費(fèi)下載鏈接】OpenShamrockA Bot Framework based on Xposed with OneBot11項(xiàng)目地址: https://gitcode.com/gh_mirrors/op/OpenShamrock創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考