烧饼论坛 LZ.SB
登录

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

662
  • crazypeace
    UID 313Lv.3 初识社区

    前言

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

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

    面向 Agent 开发

    Hermes 对接 白嫖 公益站 的 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

  • 收藏支持反对打赏

2 条回复

  • BSD
    UID 755Lv.6 经常露面
    #1

    搬到 CF 不错

  • Luke
    UID 9023Lv.1 初来乍到
    #2

    好想法

发表回复