电报防广告机器人 实现发言验证的功能 tg-send-msg-exam-bot-worker 迁移到 cloudflare worker
前言
之前 用 python 实现了自用的简易防广告机器人 , 实现发言验证的功能.
最近服务器到期了, 突然心里动了一个念头, 能转换成 cloudflare worker 吗?
面向 Agent 开发
Hermes 对接 白嫖 公益站 的 deepseek-v4-flash
* 本次开发并不是简单的 one-shot. 本身这个最终效果, 我也不是在一开头就想好的. 我是在整个过程中, 逐渐想清楚我的需求的.
以下记录一些开发方案的思路.
加群验证机器人考虑过的问题 , 此处略.
我的 python 原方案有一个白名单列表, 验证通过的用户 userid会保存在里面. 这样 bot 发现群里面有新消息时, 会检查发消息的人是不是在白名单里面.
这个信息需要保存, 这是逃不掉的事情. 所以我就用了一个 KV
结果, 在测试过程中, 发现 KV 对 worker 来说, 有状态延迟的问题.
具体表现为:
- 用户完成了整个验证流程. KV 中有白名单记录
- 我操作 cloudflare 面板从 KV 白名单记录中把用户删除, 再触发一次测试
- 用户在群组中发言, 并没有被禁言.
- 过了几分钟之后, 用户再次发言, 被禁言了 (正确的, 预期的 结果)
好消息是, 正常流程中, worker 在 KV 白名单记录中保存了用户, 用户接着发消息, 是正常的.
也就是说, worker 在操作了 KV 后, 很短的时间内, 再访问 KV, 使用的是自己刚刚操作的那一份 KV 数据.
但是! 我要说但是了!
天知道我的鬼脑子是怎么转的. 我居然想到 telegram 用户是可以设置自定义标签的. 这是今年开放的新鲜功能, 以前只有群管理员能设置自定义标签, 今年开放给全体群成员了.
所以, 我可以把有没有自定义标签当作判断是否白名单的信息.
这样就不需要操作 KV 了. 哈!哈!哈!
* 我的群是翻墙群 , 我就让脚本设置FQer的自定义标签. 如果 你的群是粉丝群 , 也可以设置成 TUTU's Friend 之类的. 又或者 你的群是玩 Agent 的 , 就可以设置成CLAWer哈哈

我的 python 原方案有一个功能是: 在禁言用户后, 将用户在群组中发的消息转到一个仓库频道, 当用户完成验证后, 从仓库频道把消息再转发回群组中. 为了保存用户 userid与仓库频道中的消息 id的这个对应关系, 是需要写 KV 的. 我很喜欢这个功能, 所以我保留了下来, 虽说有 KV 的消耗.
如果你希望 KV 操作零消耗, 你不绑定这个 KV 就是了. (相应的, 也不需要配置 STORAGE_CHANNEL_ID 这个变量)