博文

第一次翻墙 如何搭建你的第一个梯子

图片
本文针对  第一次 翻墙 的情况, 你除了对墙外事物的向往, 手中没有任何资源, 所有的操作需要从墙内出发. 如何自己搭建第一个梯子呢?

电报防广告机器人 telegram antispam bot 相关功能 踢除群组Exceptions列表中没有发言权限的用户

图片
有一些 防广告机器人为了防止误踢用户, 只对未通过验证的用户设置了禁言, 并没有将用户踢出群组. 那么, 这些用户会在 群组Exceptions列表中留下一条没有发言权限的记录. 当这样的记录非常多时, 逐条手工操作太费时. 那么, 我们让程序来帮忙吧. 再一次地, 用GPT开发. 基于我们的上个项目  https://github.com/crazypeace/tg-clean-exceptions 参考上面的代码, 实现以下功能 在群组 的 permissions 的 exceptions 里检查所有的设置, 如果某个用户没有发言权限, 则将这个用户踢出群组. 可以看到, 这样简单的项目, 完全不需要IDE开发工具, 也不需要氛围编程助手, 也不需要最新的模型. 随便找个GPT就行, 哪怕GPT-5的限额到了, 用GPT-4也足够了. 不过呢, 和前面博文中所述情况一样, 程序的大框架逻辑是正确的, 但是具体到 怎样将用户踢出群组, 调用的函数和参数会搞迷糊. 还是自己查一下 官方文档 . 最终效果 群组: test ✅ 保留: 6611601789 (蛙 女) - 可发言 🚫 踢出: 6701294471 (新 希望) - 无发言权限 完成检查,共检查 2 人,踢出 1 人 上传 Github  https://github.com/crazypeace/tg-kick-no-permission-user ======== 后记 我后面发布的这4个电报防广告机器人相关功能小工具都是基于telethon的. 相应的, 需要登录某个Telegram账户, 也就是说要输入一个手机号, 并完成验证过程. 对于这种偶尔使用的工具, 可以共用同一个Telegram账号. 我在代码中使用了同样的指定 session 的方法. client = TelegramClient('session_' + phone_number, api_id, api_hash) 所以指定的session文件名是一样的. 也就是说这些工具可以共用一个session. 只要把这些工具放在同一个目录下. root@rn-TEST:~/tg-antispam-bot-tool# tree . . |-- session_+8613812345678.session |-- tg...

电报防广告机器人 telegram antispam bot 在群内发言时需要人机验证 效率优化 验证用户列表缓存在内存

图片
我们前面实现的 首次发言 验证机器人. https://github.com/crazypeace/tg-send-msg-exam-bot 在阅读代码时发现, 机器人经常需要读取 yaml 文件. 这会显著增加I/O开销, 降低处理速度. 每次发现群内的新消息, 都要调用 is_valid_user()函数 -> load_valid_users()函数 -> 打开yaml文件 一个常见的优化策略是,  在内存里保留一份缓存.  当程序启动时, 从文件中加载到内存缓存. 当查询时, 在内存缓存中查询. 当修改时, 修改内存缓存 并且 修改文件. 这种缓存方案很常见, 所以再一次的, 我们使用GPT开发. 把原代码全量复制 粘贴, 再加上一句话. 上面的程序中, 每次验证都要读取VALID_USERS_FILE 会不会有效率问题 得益于原始代码的良好结构, 添加这个缓存的改动并不大. 提交到 Github https://github.com/crazypeace/tg-send-msg-exam-bot

电报防广告机器人 telegram antispam bot 相关功能 查询群组内的全部成员 对比ChannelParticipantsBanned与ChannelParticipantBanned

图片
上一篇 中, 我们通过查询群组中最近的1000条发言, 得到活跃群成员的id列表. 如果我想对这个群里的成员特别厚道, 只要是目前在群里的, 我都不希望有可能被机器人打扰. 那么我需要得到群组内的全部成员. 用GPT开发. 不要忘了, 我们刚刚做过的 查询群最近消息的项目 . 为了方便自己阅读和学习, 把上个项目的全部代码复制粘贴, 再加上下面的要求. 发给GPT. 查询一个telegram群组中的全部成员 输出格式为 yaml telegram账号的userid:  uesrname: telegram账号的username  full_name: telegram账号的full name 如 6611601789:   username: skypatch   full_name: 蛙 女 这个群组可能是公开群组, 也可能是不公开群组 经过一些简单的调试. 代码正常运行了. 但是获得的用户包括了 exceptions 里的用户. 这不是我们想要的, 我们想要的用户列表应该还把这部分用户排除. 这一步折腾了比较久, GPT返回的结果有问题.  我同时使用 claude, gemini, chatgpt. 再结合 Telethon 的官方文档 . 终于搞定了. 上传到 Github https://github.com/crazypeace/tg-get-group-member 运行效果 正在获取群组成员列表: FuckGFW-Newbie 翻墙新手村 跳过Exceptions列表中的用户 ID: 816194782 跳过Exceptions列表中的用户 ID: 6521155977 ...略 --- 群组成员列表 --- 6617181826:   username: atefatman   full_name: 子 肥 7919966027:   username: crazypeace_anti_bot_bot   full_name: CZ_antibot_bot ...略 ✅ 共获取 1216 名成员 📄 已保存到文件: members_1517821953.yaml ======== 后记 在 Telethon 中, ChannelParticipantBanne...

电报防广告机器人 telegram antispam bot 相关功能 查询群组最近的消息 统计发言账号的ID

图片
上一期我们实现了 第一次发言 人机验证 的机器人 . 那么就带来了这样一个需求: 我这个群已经有了很多群友. 天天发言, 也能看出来都不是机器人. 但是我把这个第一次发言人机验证的机器人一拉进群里. 那每个人在这个时间点之后的第一次发言之前都要验证一遍了. 这样会给这些群友带来不必要的麻烦. 当然, 这个项目本身也提供了一个验证列表文件 valid.yaml 你是可以手动添加群友的 userid 的. 其中, 只有userid是有效的, 其它信息是辅助人类管理这个文件用的, 不参与程序的逻辑判断. 所以, 你可以手动添加群友的userid进去. 就像这样: 所以, 本文要解决的需求就变成: 查询群组最近的消息 统计发言账号的ID

电报防广告机器人 telegram antispam bot 相关功能 清除群组Exceptions列表中实际上权限与群组默认权限一致的记录

图片
前面我们实现了两个防广告机器人 https://github.com/crazypeace/tg-join-group-exam-bot https://github.com/crazypeace/tg-send-msg-exam-bot 这两个机器人在设置群成员禁言和解除禁言时, 都是在 Exceptions 列表中添加了记录.  我们发现, 通过了验证的用户, 也在 Exceptions 中留有记录, 哪怕是与群组默认权限一致. 为了方便群组管理, 希望将这类记录清除掉. 这样, 剩下的记录肯定是屏蔽发言权限的, 也就是没有通过验证的. 我们可以直接踢出群组. 经过前面那么多天的使用, 我们已经是个GPT开发的"老手"了. 使用 Telethon 库, 可以做到下面的要求吗? 在群组 的 permissions 的 exceptions 里检查所有的设置, 如果某个群成员的权限 是与群组的默认权限相同的, 那么就从 exceptions 删除这一条设置. 不幸的, GPT给的代码 框架逻辑看起来没问题, 但是运行起来老报错. 看来又要读文档了. T_T 不断地在 官方文档 里学习哪个函数有什么参数, 参数有什么取值, 函数的返回值是个什么结构, 这个结构有哪些属性, ... 期间, 还遇到了一个关于用户权限的坑 https://zelikk.blogspot.com/2025/10/telethon-python-telegram-bot-music-voice-messages-audio-voice-notes-bug.html 最后总算是完成了. Github https://github.com/crazypeace/tg-clean-exceptions

Telethon 和 Python Telegram Bot 库 读取和设置群组的用户权限 Music和Voice Messages 即audio和voice_notes 有个坑Bug

图片
环境说明 Telegram界面设置群组的默认权限. 进群验证机器人 (tg-join-group-exam-bot.py) 在新成员通过验证后, 会在 Exceptions 里面设置权限. 清除 Exceptions 工具 (tg-clean-exceptions.py) 会读取群组的默认权限, 再读取 Exceptions 中某个用户的权限. 测试过程 Case 1.  群组默认权限  music - Close voice messages - Close tg-join-group-exam-bot.py 设置 permission can_send_audios=False, can_send_voice_notes=False, 新成员通过验证后, 在Exceptions中的记录是这样的, 符合期望 tg-clean-exceptions.py default_rights = entity.default_banned_rights 读出来的是什么 rights = getattr(p.participant, 'banned_rights', None)  读出来的是什么 可以看到默认权限是对的. 这个属性是 default_banned_rights. 所以 Ture 表示 Close. 而读取的 Exceptions 里面, 用户的权限是 错的 . False 表示 Open. Case 2.  群组默认权限  music - Close voice messages - Close tg-join-group-exam-bot.py 设置 permission can_send_audios=True,         (意思是 Open) can_send_voice_notes=True,        (意思是 Open) 新成员通过验证后, 在Exceptions中的记录是这样的,  不符合预期 . 因为上面的代码中设定的 permission 是 True, 应该是有这两个权限的. 而 telegram 界面上显示是没有.  tg-clean-exception...

The Hot3 in Last 7 Days

极简一键脚本 搭NaiveProxy梯子 自定义端口 与Caddy V2前置的VLESS/Vmess V2Ray共存 可开CDN

Woiden IPv6 VPS 搭 V2ray 梯子 VLESS+Websocket+TLS 模式 免费 白嫖 全程手机操作 2022-4-19