
QQBot 快速上手指南一個 QQ 群管小哥的救贖之路【免費下載鏈接】qqbotQQBot: A conversation robot base on Tencents SmartQQ項目地址: https://gitcode.com/gh_mirrors/qq/qqbot如果你也曾在深夜里一邊給群友解釋第 108 遍怎么改群名片一邊盤算著要不要把群主之位拱手讓人那么接下來的三分鐘很可能改變你的群管生涯。我是小林一個被 QQ 群日?,嵤卤漂偟囊吧芾韱T直到我遇見了 QQBot——一個用 Python 寫成的開源 QQ 機器人框架我的噩夢才算真正結束。一、先聊聊為什么你需要一個會編程的 QQ 管家先別急著劃走我?guī)湍慊貞泿讉€扎心瞬間新人進群你要手打一遍歡迎語 群規(guī) 入群改名片三連一天八遍手指頭都快磨出老繭每晚十點你得掐著秒表去群里發(fā)打卡提醒偶爾忘一次第二天就被艾特到懷疑人生有人反復問多少錢怎么發(fā)貨售后找誰你復制粘貼到手軟對方還嫌你回復慢。而 QQBot 能做的恰恰是把這些低價值重復勞動全部接盤自動回復、定時播報、關鍵詞匹配、群成員信息查詢、甚至遠程控制設備——只要你能想到的腳本邏輯它都能按你的指令在 QQ 上跑起來。一句話總結它的定位QQBot 是一個基于騰訊 SmartQQ 協(xié)議的開源框架讓你用幾行 Python 代碼把任何 QQ 賬號改造成 7×24 小時在線的自動應答機。二、先別急著裝把三件套概念搞清楚在動手之前你得先理解 QQBot 的三個核心角色不然接下來會看代碼看到頭暈角色它是誰你要關心的QQBot 對象bot機器人的大腦中樞提供List、SendTo、Stop、Restart等接口QContact 對象contact消息的發(fā)送者有ctype/qq/uin/nick/mark/card/name等只讀屬性member 參數(shù)群消息里真正發(fā)言的那位好友私聊時它是None群聊時才有值有個新手極易踩的坑我必須先敲黑板bot.SendTo(member, ...)是非法操作。你只能給好友、群、討論組發(fā)消息不能直接對群成員這個對象發(fā)消息。想給某個群友發(fā)私信老老實實先bot.List(buddy, 他的昵稱)把好友對象找出來。三、從零安裝五分鐘跑通你的第一個 QQ 機器人安裝過程簡單到讓人想哭前提是你電腦里有 Python2.7 或 3.4 均可git clone https://gitcode.com/gh_mirrors/qq/qqbot cd qqbot pip install .裝完之后命令行敲下魔法咒語qqbot程序會自動彈出一張二維碼掏出手機 QQ 掃一掃完成授權你的機器人就上線了。更貼心的是登錄憑證會被保存在本地文件里下次啟動時輸入qqbot -q 你的QQ號就能免掃碼直接登錄——當然這份憑證大概兩天后過期過期了還得乖乖再掃一次這點后面我會專門講怎么續(xù)命。四、實戰(zhàn)第一步寫一個會打招呼、報時間的群管家現(xiàn)在讓我給你展示什么叫三行代碼改變命運。在插件目錄默認是~/.qqbot-tmp/plugins/新建一個文件比如叫helper.py敲入# -*- coding: utf-8 -*- def onQQMessage(bot, contact, member, content): if content 你好: bot.SendTo(contact, 你好呀我是這個群的機器人小管) elif 現(xiàn)在幾點 in content: from datetime import datetime now datetime.now().strftime(%Y-%m-%d %H:%M:%S) bot.SendTo(contact, 現(xiàn)在是 now)保存后保持 qqbot 進程在跑另開一個終端窗口執(zhí)行qq plug helper插件掛載成功的那一瞬間你再去群里發(fā)一句你好試試——機器人秒回這感覺就像給群請了個不要工資的實習生。完整示例可參考項目里的 qqbot/plugins/sample.py功能雖簡但五臟俱全。五、進階玩法讓機器人學會按時打卡只做自動回復那還只是開胃菜。QQBot 真正的殺手锏是內置的定時任務系統(tǒng)——qqbotsched裝飾器。它的參數(shù)采用類 Unix crontab 格式簡單、直觀、好記。比如每晚十點提醒群友打卡你可以這樣寫from qqbot import qqbotsched qqbotsched(hour22, minute0) def daily_reminder(bot): 每晚10點整執(zhí)行 groups bot.List(group, 學習打卡群) if groups is not None: for group in groups: bot.SendTo(group, 今日打卡時間到請回復已打卡完成記錄~)這裝飾器一共支持 11 個關鍵字參數(shù)year、month、day、week、hour、minute……可以拼出幾乎任何你想要的執(zhí)行節(jié)奏minute0-55/5每 5 分鐘跑一次hour8,12,18, minute0每天 8 點、12 點、18 點整點觸發(fā)day_of_weekmon-fri只在工作日執(zhí)行定時任務的函數(shù)簽名是鐵律參數(shù)必須且只能有一個名字必須叫bot。別問問就是框架約定。六、扒一扒 QQBot 的內臟它到底是怎么轉起來的好奇寶寶可能會問我寫個函數(shù)它怎么就能在 QQ 上自動跑呢項目自帶的架構圖給出了完整答案這張圖來自 doc-data/main.png把整個運行機制畫得明明白白我?guī)湍惴g成人話登錄階段主線程讀配置 → 加載插件 → 觸發(fā)onInit()→ 獲取二維碼 → 等待手機授權。登錄成功后再觸發(fā)onPlug()、onStartupComplete()此時你的插件才真正活過來。運行階段主循環(huán)主線程進入一個死循環(huán)依次處理onQQMessage()消息、onInterval()每 5 分鐘的心跳、終端命令、調度任務等事件。并行子線程四個子線程各司其職——消息輪詢、5 分鐘休眠計時、8188 端口 Web 服務監(jiān)聽、定時任務調度?;ゲ桓蓴_誰也不會卡住誰。除了onQQMessage框架還預留了onInit/onQrcode/onInterval/onUpdate/onPlug/onUnplug/onExit等一大票回調鉤子全部示例在 qqbot/plugins/sampleslots.py 里照葫蘆畫瓢就能擴展出各種花活。七、把聯(lián)系人玩明白搜群、查成員、發(fā)消息的一條龍操作日常群管最頻繁的操作是什么找人、找人、還是找人。QQBot 的qq命令和bot.List()接口把聯(lián)系人查詢做得跟搜索引擎一樣順手。幾個高頻姿勢都在qq命令下# 列出所有好友 qq list buddy # 按名稱模糊搜索群 qq list group :like:測試 # 列出456班群的全部成員 qq list group-member 456班 # 找出群里名片為 mike 的成員 qq list group-member 456班 cardmike # 直接給好友jack發(fā)消息 qq send buddy jack 你好在代碼里則是調用bot.List它會在本地聯(lián)系人數(shù)據(jù)庫里查查不到再去服務器拉取并緩存省時省流量。注意三點List返回的是QContact 對象列表不是字符串要用.qq、.name取屬性返回[]表示沒匹配到返回None表示服務器拉取失敗——務必分情況判斷再往下走Update接口可以強制刷新某類聯(lián)系人緩存2000 人的大群成員列表刷新也就一兩秒快到離譜。哦對如果你不想寫代碼也可以直接調 HTTP API——機器人啟動后本機 8188 端口就是現(xiàn)成的接口服務比如瀏覽器里訪問http://127.0.0.1:8188/send/buddy/jack/hello就能發(fā)消息前端同學狂喜。八、避坑手冊資深玩家的血淚經驗新增章節(jié)這部分是文檔里散落的雷區(qū)我替你集中排一遍雷每一條都是我和無數(shù)前浪用頭發(fā)換來的雷區(qū) 1消息莫名其妙發(fā)不出去或重復發(fā)騰訊服務器偶爾會返回 1202 錯誤碼語義含糊——可能失敗。SendTo默認會重試最多 3 次來確保送達代價是偶爾出現(xiàn)重復消息。想不重發(fā)就把參數(shù)關了bot.SendTo(contact, 這條消息只發(fā)一次, resendOn1202False)雷區(qū) 2機器人自己發(fā)的消息自己也會收到對你沒看錯。你的 QQ 發(fā)出去的消息也會流經機器人所以回調里一定要用bot.isMe(contact, member)過濾否則機器人會對自己的話作出回應形成自嗨死循環(huán)。雷區(qū) 3永遠不要在回調函數(shù)里調os.system(qq send ...)這是官方文檔蓋章的死鎖陷阱os.system要等命令執(zhí)行完才返回而命令要等主線程空閑才執(zhí)行——兩邊互相等待程序直接僵死。想發(fā)消息請用bot.SendTo。雷區(qū) 4回調函數(shù)里別做重活所有回調都在主線程里串行執(zhí)行誰在里面 sleep 十秒全體消息就得排隊等你。每個函數(shù)盡量控制在 5 秒內。雷區(qū) 5被艾特的誤判如果群里有人的昵稱和你的昵稱前綴相同你叫 ab他叫 abc艾特他時可能會誤判成艾特你。這是協(xié)議層的怪癖改個群名片就能繞開。更多細節(jié)見 faq.md 與 qcontact-attr.md。九、配置這件事一臺機器怎么管住多個 QQQQBot 的配置文件首次運行后自動生成在~/.qqbot-tmp/v2.x.confJSON 格式一眼就能看懂。它支持多用戶配置在文件里給每個 QQ 號開一個配置項然后用qqbot -u 用戶名指定用哪套配置啟動。我貼一份我自己的配置骨架供你參考{ mybot: { termServerPort: 8188, qq: 3497303033, restartOnOffline: true, plugins: [helper, schedrestart], pluginsConf: { qqbot.plugins.schedrestart: 8:00 } } }幾個關鍵選項的作用記住這幾個就夠了配置項干什么用的termServerPort命令行/HTTP 服務端口設為 0 則關閉外部控制qq自動登錄的 QQ 號restartOnOffline掉線后自動重啟在線率的保障cmdQrcode開啟文本模式二維碼免圖形界面掃碼mailAccount/mailAuthCode二維碼發(fā)到郵箱遠程服務器福音plugins/pluginPath啟動時自動加載的插件清單和插件目錄配置優(yōu)先級是固定鏈條根配置 → 默認配置 → 用戶配置 → 命令行參數(shù)后加載的覆蓋先加載的。改配置不生效先檢查你是不是改錯了層級。十、讓機器人永不掉線的三板斧SmartQQ 協(xié)議的硬傷登錄憑證 12 天后必失效騰訊會強制踢下線。但別慌有三個招疊加使用能把在線率拉到 95% 以上開啟restartOnOffline掉線自動拉起進程先自動續(xù)命一次加載定時重啟插件項目自帶 qqbot/plugins/schedrestart.py默認每天 8:00 執(zhí)行一次fresh-restart配合pluginsConf自定義時間配置郵箱模式收二維碼把二維碼直接發(fā)到郵箱手機 QQ 秒收通知長按即掃掃碼體驗行云流水。這三板斧下來基本就是每天固定掃一次碼其余時間機器人都乖乖在線。十一、它還能這么玩從密碼登錄到 IRC 客戶端你以為這就完了QQBot 的生態(tài)比你想的豐富免掃碼登錄插件 passwordlogin.py 借助 selenium 自動化瀏覽器完成用戶名密碼登錄徹底告別人工掃碼需裝 selenium 和瀏覽器驅動Linux 極客玩法加載 miniirc.py 插件后機器人會在 6667 端口開一個微型 IRC 服務器用 weechat、irssi 這些終端客戶端就能躺著聊 QQ熱插拔機制qq plug 插件名/qq unplug 插件名隨時掛載卸載跑著的進程不用重啟插件想換就換發(fā)送表情消息里嵌入/微笑、/可愛這類關鍵詞就能發(fā) QQ 表情完整對照表在 facemap.py 里。十二、最后說兩句掏心窩的話說實話第一次看到這個項目時我是有點將信將疑的——一個開源 QQ 機器人能有多強但當我真正把自動回復、定時打卡、群成員查詢全部跑通之后我只想說一句真香。現(xiàn)在的我每天到點有人幫我喊打卡新人進群有人替我發(fā)歡迎語群友問價格我連手指都不用動。省下來的時間夠我多刷十集劇。所以別光看別人家的機器人流口水了??寺№椖?、裝好依賴、寫第一個onQQMessage、qq plug掛上去——屬于你自己的 QQ 智能助手三十分鐘就能誕生。動手吧你的群友在等你驚艷全場?!久赓M下載鏈接】qqbotQQBot: A conversation robot base on Tencents SmartQQ項目地址: https://gitcode.com/gh_mirrors/qq/qqbot創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考