初始提交:QQ 群入群验证机器人

基于 qqbotsdk-py 的入群验证:进群发按钮验证码、完成前禁言、
超时踢出(11253 时兜底长期禁言)、乱点他人按钮处罚、状态持久化
与重启恢复。38 个单元/集成测试。
This commit is contained in:
snowy-yang committed 2026-10-04 18:44:08 +08:00
commit 755013b9db
17 files changed
+1864

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
"""AuthBot 入口:组装 qqbotsdk 的 Bot 与验证业务并启动。
首次使用请复制 .env.example 为 .env 并填入 APPID/APPSECRET,
事件订阅开关在 intents.toml。WebSocket 方式直接 `python main.py`。
"""
from loguru import logger
from qqbotsdk import Bot
from qqbotsdk.events import Event
from qqbotsdk.model import Opcode
from authbot.config import AuthConfig
from authbot.handlers import setup
def _log_every_event(bot: Bot) -> None:
"""给分发器加一层观测:任何业务事件到达即记日志。
SDK 对未注册 handler 的事件是静默跳过的,线上排查"平台到底推没推"
必须能看到每一个到达的 op=0 事件。
"""
orig_emit = bot._emitter.emit
async def logging_emit(payload: dict) -> None:
t = payload.get("t")
if payload.get("op") == Opcode.DISPATCH and isinstance(t, str):
logger.info(f"收到网关事件: {t}")
await orig_emit(payload)
bot._emitter.emit = logging_emit
def main() -> None:
bot = Bot() # 构造时读 .env,缺 APPID/APPSECRET 会直接报错退出
cfg = AuthConfig.load()
setup(bot, cfg)
_log_every_event(bot)
bot.run()
if __name__ == "__main__":
main()