电报防广告机器人 telegram antispam bot 新成员入群时需要人机验证 增加一个命令手动触发

背景 今天在查看机器人日志的时候, 发现有4个异常. 异常的原因不完全清楚, 猜测是网络原因, 机器人程序向Telegram服务器要求设置用户权限时 超时了. 这样就带来一个漏洞, 这4个新用户没有被设置禁言, 没有通过人机验证流程. 需求 需要能对特定用户 主动发起 就像是新成员入群时一样的流程 (禁言, 要求在与机器人的私聊中完成人机验证, 再解除禁言) 实践 通过阅读代码, 发现 新成员的验证流程 track_chat_member 函数中, 需要的外部数据就是chat和user. 很适合进行重构. 那么我们再一次地, 面向GPT编程 对 track_chat_member 函数进行重构, 目的是为机器人新增一个命令 /new_member_verify <telegram user> 这样可以主动将某个成员当作好像新成员一样进行验证流程. (禁言, 与机器人私聊, 回答问题, 等等) 结果让我非常满意. 不仅是按我的想法重构了函数, 再生成新的 new_member_verify 函数. 而且, 新函数中也考虑了调用命令的用户的身份(需要是管理员或群主). 只是 GPT 改动了原程序中本不需要改动的部分(比如把注释的文字描述换了一种写法, 把提示性的消息的文字内容换了一种写法, ...). 我并不是全选-复制-粘贴, 而且走读代码, 再手工合并. 因为原程序的代码量就小, 涉及到的修改代码量也很小, 所以合并工作比较轻松. 调试过程中发现了GPT写代码的错误. GPT生成的代码以为 get_chat_member 函数不仅可以传入userid, 还可以传入 username, 甚至还假模假样地写了相关代码. 结果传入username时报错, 再查 官方文档 . 发现只支持传入 userid 我自己再做了一点小小的优化. 机器人在群组中发出的提示消息都在一段时间后自动删除. 在群组中, 忽略 /start 命令 提交 Github https://github.com/crazypeace/tg-join-group-exam-bot ======== 后记 这样的 new_member_verify 命令除了解决一开始的原始问题, 还有一个好处就是 当...