电报防广告机器人 实现发言验证的功能 tg-send-msg-exam-bot-worker 迁移到 cloudflare worker

前言

之前 用python实现了自用的简易防广告机器人, 实现发言验证的功能.

最近服务器到期了, 突然心里动了一个念头, 能转换成cloudflare worker吗?


面向Agent开发

Hermes 对接 白嫖 公益站agentrouter 的 deepseek-v4-flash

* 本次开发并不是简单的one-shot. 本身这个最终效果, 我也不是在一开头就想好的. 我是在整个过程中, 逐渐想清楚我的需求的. 

以下记录一些开发方案的思路.


加群验证机器人考虑过的问题, 此处略.


我的python原方案有一个白名单列表, 验证通过的用户userid会保存在里面. 这样bot发现群里面有新消息时, 会检查发消息的人是不是在白名单里面.

这个信息需要保存, 这是逃不掉的事情. 所以我就用了一个KV

结果, 在测试过程中, 发现KV对worker来说, 有状态延迟的问题. 

具体表现为:
1. 用户完成了整个验证流程. KV中有白名单记录
2. 我操作cloudflare面板从KV白名单记录中把用户删除, 再触发一次测试
3. 用户在群组中发言, 并没有被禁言.
4. 过了几分钟之后, 用户再次发言, 被禁言了 (正确的, 预期的 结果)

好消息是, 正常流程中, worker在KV白名单记录中保存了用户, 用户接着发消息, 是正常的.
也就是说, worker在操作了KV后, 很短的时间内, 再访问KV, 使用的是自己刚刚操作的那一份KV数据.


但是! 我要说但是了!

天知道我的鬼脑子是怎么转的. 我居然想到telegram用户是可以设置自定义标签的. 这是今年开放的新鲜功能, 以前只有群管理员能设置自定义标签, 今年开放给全体群成员了.
所以, 我可以把有没有自定义标签当作判断是否白名单的信息.

这样就不需要操作KV了. 哈!哈!哈!

* 我的群是翻墙群, 我就让脚本设置FQer的自定义标签. 如果你的群是粉丝群, 也可以设置成 TUTU's Friend 之类的. 又或者你的群是玩Agent的, 就可以设置成CLAWer哈哈


我的python原方案有一个功能是: 在禁言用户后, 将用户在群组中发的消息转到一个仓库频道, 当用户完成验证后, 从仓库频道把消息再转发回群组中. 为了保存用户userid仓库频道中的消息id的这个对应关系, 是需要写KV的. 我很喜欢这个功能, 所以我保留了下来, 虽说有KV的消耗.

如果你希望KV操作零消耗, 你不绑定这个KV就是了. (相应的, 也不需要配置 STORAGE_CHANNEL_ID 这个变量)


Github

https://github.com/crazypeace/tg-send-msg-exam-bot-worker


评论