初始提交:QQ 群入群验证机器人
基于 qqbotsdk-py 的入群验证:进群发按钮验证码、完成前禁言、 超时踢出(11253 时兜底长期禁言)、乱点他人按钮处罚、状态持久化 与重启恢复。38 个单元/集成测试。
This commit is contained in:
commit
755013b9db
17 files changed
+1864
No files matched your search
@@ -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()
|
||||
Reference in new issue
Block a user