基于 qqbotsdk-py 的入群验证:进群发按钮验证码、完成前禁言、 超时踢出(11253 时兜底长期禁言)、乱点他人按钮处罚、状态持久化 与重启恢复。38 个单元/集成测试。
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""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()
|