我写了一个 QQ 群机器人:从修仙修炼到俄罗斯轮盘

出发点

QQ 群需要一个活跃气氛的东西。签到打卡太无聊,问答机器人又容易被滥用。想了很久,决定做几个群内小游戏——既能增加互动,又不会太打扰。

架构设计

QQ Webhook 接收消息
  → Python Flask API 处理
    → 意图识别(关键词匹配 + 简单 NLP)
      → 路由到对应插件
        → MongoDB 存取用户数据
      → 生成回复

插件用简单的注册机制:

PLUGINS = {}

def register(name):
    def decorator(func):
        PLUGINS[name] = func
        return func
    return decorator

@register('cultivation')
def handle_cultivation(msg, user):
    # 修仙修炼逻辑
    pass

三个游戏

1. 修仙修炼

群友每天可以"修炼"获取修为,突破境界(练气→筑基→金丹→元婴→化神)。有随机事件(渡劫、奇遇、走火入魔),还有 PVP 切磋。数据持久化到 MongoDB。

# 境界体系
CULTIVATION_LEVELS = [
    ("练气期", 0),
    ("筑基期", 1000),
    ("金丹期", 5000),
    ("元婴期", 20000),
    ("化神期", 80000),
]

2. 故事接龙

机器人给一个开头,群友每人续写一句。用简单的规则判断句子是否合理(长度限制、敏感词过滤),攒够一定轮数后输出完整故事。

3. 俄罗斯轮盘

群友报名参加,随机一颗"子弹"在 6 发弹仓中。每人轮流"开枪",活着的人进入下一轮。最后存活的人获得积分。

防止滥用

  • 每条命令有冷却时间(不同游戏不同)
  • 频率限制:同一用户 1 分钟内最多 5 条游戏指令
  • 关键词黑名单:过滤敏感词

技术栈

  • Python Flask 作为 HTTP API 服务
  • MongoDB 存储用户数据(修为、积分、游戏记录)
  • QQ Webhook 接收和发送消息
  • 宝塔面板部署,Nginx 反代

效果比预期好——群里活跃度明显提升,有人甚至为了突破金丹期每天坚持"修炼" 😂