从0到1搭建QQ自动回复机器人把群里重复的话交给代码去说【免费下载链接】qqbotQQBot: A conversation robot base on Tencents SmartQQ项目地址: https://gitcode.com/gh_mirrors/qq/qqbotQQBot 是一个基于 Python 与腾讯 SmartQQ 协议的 QQ 机器人框架面向想用代码接管 QQ 消息的普通用户与开发者消息自动回复、定时提醒、群成员查询都可以通过几个函数实现不需要接触复杂的网络协议。本文用给学习群配一个自动值守机器人这条完整任务线带你从安装、扫码登录一路走到定时任务与插件扩展看完即可动手复刻。一个群管员的日常同样的话一天要说几十遍假设你管理着一个学习打卡群日常琐事大概长这样新成员进来就问怎么打卡同一句答复每天被复制粘贴七八次每晚十点的打卡提醒要靠人肉记忆忘一次群里就安静一天想统计群成员、群发一条通知得先翻遍好友列表找群入口电脑一关机器人就失联第二天重新扫码登录又是一套流程。这四个小麻烦恰好对应 QQBot 擅长的四件事消息应答、定时推送、联系人管理与无人值守。与其逐条手工处理不如把它们一次打包成代码。QQBot 的运行机制一个常驻进程四个并行线程QQBot 的本质是一个常驻进程扫码登录后它持续监听 QQ 消息把每条消息交给你的回调函数处理。为了让收到消息就回复和到点就发提醒同时发生它在登录完成后会启动多个子线程分别负责消息轮询、定时任务、8188 端口命令监听与任务调度主线程则统一调度各事件回调并按需执行onQQMessage、onInterval、onUpdate等插件函数。从流程图可以直观看到登录阶段读取配置并加载插件登录成功后进入多线程事件循环直到登录过期或主动退出才回收资源。这种主线程控全局、子线程跑任务、插件回调接逻辑的设计让扩展功能时几乎不用碰框架内部代码。第一步环境准备与扫码登录的两种姿势环境要求不高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号可免扫码直接恢复会话省去重复扫码的麻烦。如果跑在没有图形界面的服务器上二维码有替代方案配置mailAccount与mailAuthCode走邮箱模式二维码图片直接发到邮箱也可以开启服务器模式或文本模式后者需额外安装 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(hour22, minute0) # 每天 22:00 触发 def checkin_reminder(bot): groups bot.List(group, 学习打卡群) if groups is None: return for group in groups: bot.SendTo(group, 打卡时间到回复“已打卡”完成今日记录)多时段写法也很直观hour8,12,18表示一天三个整点触发minute0-55/5表示每五分钟执行一次。定时任务与消息回调都跑在主线程、依次调用因此无需担心全局变量的线程安全问题。第五步配置无人值守让机器人长期在线机器人写好后长期运行的稳定性靠配置文件~/.qqbot-tmp/v2.x.conf支撑它支持按用户分段配置并可通过qqbot -u somebody指定加载哪段。几个关键项配置项作用restartOnOffline掉线或出错后自动重启保证值守不中断daemon后台守护运行日志写入独立文件plugins启动时自动加载的插件列表resendOn1202控制消息发送遇到 1202 码时是否重发内置插件也值得直接复用qqbot.plugins.schedrestart实现定时重启默认 8:00qqbot.plugins.sampleslots展示了从onInit到onExit的全部九个生命周期回调是学习插件写法的现成教材。把任务交给机器人之后回到开头的四个小麻烦自动回复接住了重复提问qqbotsched接住了定时提醒List与ME解决了找人认人配置项则保证了无人值守。整个流程下来你接触到的其实只有一个函数 一个装饰器 一份配置其余交给常驻进程即可。建议直接动手先按sample.py跑通第一句自动回复再给qqbotsched加一个你真正需要的提醒最后用配置文件把restartOnOffline打开——从第一行代码到正式值守通常用不了一个晚上。【免费下载链接】qqbotQQBot: A conversation robot base on Tencents SmartQQ项目地址: https://gitcode.com/gh_mirrors/qq/qqbot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考