从0到1搭建QQ自动回复机器人:把群里重复的话交给代码去说
2026/8/14 13:02:41 网站建设 项目流程

从0到1搭建QQ自动回复机器人:把群里重复的话交给代码去说

【免费下载链接】qqbotQQBot: A conversation robot base on Tencent's SmartQQ项目地址: https://gitcode.com/gh_mirrors/qq/qqbot

QQBot 是一个基于 Python 与腾讯 SmartQQ 协议的 QQ 机器人框架,面向想用代码接管 QQ 消息的普通用户与开发者:消息自动回复、定时提醒、群成员查询都可以通过几个函数实现,不需要接触复杂的网络协议。本文用"给学习群配一个自动值守机器人"这条完整任务线,带你从安装、扫码登录一路走到定时任务与插件扩展,看完即可动手复刻。

一个群管员的日常:同样的话一天要说几十遍

假设你管理着一个学习打卡群,日常琐事大概长这样:

  • 新成员进来就问"怎么打卡",同一句答复每天被复制粘贴七八次;
  • 每晚十点的打卡提醒要靠人肉记忆,忘一次群里就安静一天;
  • 想统计群成员、群发一条通知,得先翻遍好友列表找群入口;
  • 电脑一关,机器人就失联,第二天重新扫码登录又是一套流程。

这四个小麻烦,恰好对应 QQBot 擅长的四件事:消息应答、定时推送、联系人管理与无人值守。与其逐条手工处理,不如把它们一次打包成代码。

QQBot 的运行机制:一个常驻进程,四个并行线程

QQBot 的本质是一个常驻进程:扫码登录后,它持续监听 QQ 消息,把每条消息交给你的回调函数处理。为了让"收到消息就回复"和"到点就发提醒"同时发生,它在登录完成后会启动多个子线程,分别负责消息轮询、定时任务、8188 端口命令监听与任务调度,主线程则统一调度各事件回调,并按需执行onQQMessageonIntervalonUpdate等插件函数。

从流程图可以直观看到:登录阶段读取配置并加载插件,登录成功后进入多线程事件循环,直到登录过期或主动退出才回收资源。这种"主线程控全局、子线程跑任务、插件回调接逻辑"的设计,让扩展功能时几乎不用碰框架内部代码。

第一步:环境准备与扫码登录的两种姿势

环境要求不高,Python 2.7 或 3.4+ 即可,支持 Linux、Windows 与 macOS。克隆仓库后一条命令完成安装:

git clone https://gitcode.com/gh_mirrors/qq/qqbot cd qqbot pip install .

在命令行输入qqbot启动,程序会弹出二维码,用手机 QQ 扫码授权即完成登录。登录信息会保存在本地,第二次启动时用qqbot -q 你的QQ号可免扫码直接恢复会话,省去重复扫码的麻烦。

如果跑在没有图形界面的服务器上,二维码有替代方案:配置mailAccountmailAuthCode走邮箱模式,二维码图片直接发到邮箱;也可以开启服务器模式或文本模式(后者需额外安装 pillow 与 wcwidth)。四种模式在 qrcodemanager.py 中统一调度,按环境选一种即可。

第二步:写第一个自动回复回调

实现机器人逻辑只需定义一个名为onQQMessage的函数,并按插件方式加载。参考 sample.py 的最小示例:

def onQQMessage(bot, contact, member, content): if content == '怎么打卡': bot.SendTo(contact, '每晚22:00前在群里回复“已打卡”即可')

函数签名固定为四个参数:bot是机器人对象,contact是消息发送者,member在群消息中代表实际发言的成员,content是消息文本。把文件存到~/.qqbot-tmp/plugins/目录后,在另一个终端执行qq plug 文件名即可热加载——不需要重启机器人。

第三步:让机器人"认人":联系人查询与@识别

回复写好后,还需要让机器人会找对象、认场合。bot.List负责联系人查询:bot.List('buddy')取好友列表,bot.List('group', '学习打卡群')按名称找群,把群对象再传给List就能拿到成员列表,支持精确与模糊匹配。bot.SendTo负责发消息,只面向好友、群与讨论组三种对象。

群聊场景下,如果有人 @ 机器人,content开头会带上[@ME]标记,据此可以写出"被点名才响应"的逻辑:

def onQQMessage(bot, contact, member, content): if '@ME' in content: bot.SendTo(contact, member.name + ',我在,请讲')

另外,bot.isMe(contact, member)能判断消息是否来自自己,避免机器人对着自己的消息自问自答。

第四步:用 qqbotsched 定制定时提醒任务

每天十点的打卡提醒,交给装饰器qqbotsched最合适。它是对 apscheduler 的简单封装,参数采用 crontab 格式,支持 year 到 timezone 共 11 个关键字:

from qqbot import qqbotsched @qqbotsched(hour='22', minute='0') # 每天 22:00 触发 def checkin_reminder(bot): groups = bot.List('group', '学习打卡群') if groups is None: return for group in groups: bot.SendTo(group, '打卡时间到,回复“已打卡”完成今日记录')

多时段写法也很直观:hour='8,12,18'表示一天三个整点触发,minute='0-55/5'表示每五分钟执行一次。定时任务与消息回调都跑在主线程、依次调用,因此无需担心全局变量的线程安全问题。

第五步:配置无人值守,让机器人长期在线

机器人写好后,长期运行的稳定性靠配置文件~/.qqbot-tmp/v2.x.conf支撑,它支持按用户分段配置,并可通过qqbot -u somebody指定加载哪段。几个关键项:

配置项作用
restartOnOffline掉线或出错后自动重启,保证值守不中断
daemon后台守护运行,日志写入独立文件
plugins启动时自动加载的插件列表
resendOn1202控制消息发送遇到 1202 码时是否重发

内置插件也值得直接复用:qqbot.plugins.schedrestart实现定时重启(默认 8:00),qqbot.plugins.sampleslots展示了从onInitonExit的全部九个生命周期回调,是学习插件写法的现成教材。

把任务交给机器人之后

回到开头的四个小麻烦:自动回复接住了重复提问,qqbotsched接住了定时提醒,List@ME解决了找人认人,配置项则保证了无人值守。整个流程下来,你接触到的其实只有"一个函数 + 一个装饰器 + 一份配置",其余交给常驻进程即可。

建议直接动手:先按sample.py跑通第一句自动回复,再给qqbotsched加一个你真正需要的提醒,最后用配置文件把restartOnOffline打开——从第一行代码到正式值守,通常用不了一个晚上。

【免费下载链接】qqbotQQBot: A conversation robot base on Tencent's SmartQQ项目地址: https://gitcode.com/gh_mirrors/qq/qqbot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询