博文

目前显示的是 十月, 2025的博文

编译钩子 LD_PRELOAD加载 拦截系统接口调用getaddrinfo 验证socks5和socks5h的区别

图片
前言 群友反馈在Deiban13下不能设置IPv4优先 分析 感谢 Debian中文群的群友 提供信息  https://t.me/c/1039975886/766705 感谢233群的群友提供信息  https://t.me/tg233boy/1228524 我们知道了, gai.conf 控制的是 getaddrinfo 系统接口的行为 /etc/gai.conf 怎么证明某个程序调用了 getaddrinfo(被gai.conf控制) 呢?  钩子拦截系统接口调用 感谢Debian中文群的群友的灵感  https://t.me/c/1039975886/766779 gdb调试我不会, 但是我会编译啊. 我问了一下GPT, getaddrinfo的库是 libc.so.6 可以在这里面查找到 getaddrinfo 的符号, 如 nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep getaddrinfo 我本来想找到源码自己编译一份 libc.so.6 文件. 思路是不影响原有的getaddrinfo功能, 只是在命令行多打印一份日志. 这样就可以确定某个软件 是不是 调用了 getaddrinfo , 于是就受到 gai.conf 的控制 (IPv4优先 / IPv6优先). 我拿这个想法去问GPT. 回答超出我的预期. GPT告诉我,  1. 最好不要替换系统库, 因为会影响整个系统. 2. 有办法可以针对 某个程序 挂个钩子. 在钩子 里监控 调用系统 getaddrinfo 的行为, 然后打印日志. 然后在钩子里原样 调用系统原本的 getaddrinfo, 不影响实际行为. 相关代码如下, 例如  hook_getaddrinfo.c #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <netdb.h> int getaddrinfo(const char *node, const char *service,                 con...

curl socks5h 模拟翻墙客户端 fakeip 行为

图片
前言 群友反馈在Deiban13下不能设置IPv4优先 通过进一步的交流, 群友的意思是 sing-box 向外访问, 无法通过 gai.conf 来设置是 IPv4优先 还是 IPv6优先 群友用的是fakeip的模式, 翻墙客户端发给梯子的数据包中只有域名, 没有IP. 需求 如果自己搭全套测试环境挺麻烦的. 而且自己到VPS之间的网络如果不稳定的话, 影响测试效率. 那么, 我们怎么在VPS上模拟这个fakeip行为呢? 问GPT 在"翻墙"领域, 有一种客户端 模式叫 fakeip  在这种模式下, 最终从客户端 发往服务端的数据包里面只有域名, 没有IP.  我需要在linux命令行模拟 这样的行为, 我可以用 curl 工具做到吗? 答案是使用 socks5h curl -x socks5h://proxy.example.com:1080 https://www.example.com/ 实践 sing-box 搭建一个简单的sing-box服务端 官方安装脚本  curl -fsSL https://sing-box.app/install.sh | sh 配置文件 nano /etc/sing-box/config.json {   "log": {     "level": "debug",     "output": "box.log",     "timestamp": true   },   "inbounds": [     {       "type": "socks",       "tag": "socks-in",       "listen": "127.0.0.1",       "listen_port": 1080     }   ],   "outbounds": [     {       "type": "direct"   ...

Debian13 IPv4优先 IPv6优先 curl api.myip.la

图片
需求 群友反馈在Deiban13下不能设置IPv4优先 1. 核实问题 a. 判断是否Debian13 cat /etc/os-release b. 判断是否同时有 ipv4 和 ipv6 出站 curl -4 api.myip.la  curl -6 api.myip.la  c. 判断当前是什么出站优先 curl api.myip.la  d. 设置为 IPv4 优先 bash <(curl -sL https://raw.githubusercontent.com/crazypeace/warp.sh/main/ipv4v6.sh) 4 * 本质上是 echo "precedence ::ffff:0:0/96  100" >> /etc/gai.conf e. 检测效果 curl api.myip.la  Debian12 环境下 curl 返回 IPv4 Debian13 环境下 curl 返回 IPv6 2. curl的版本不同 在与各大GPT交流一番后, GPT提示我用 curl -v 来获取更详细的信息. curl -v api.myip.la  可以发现  Debian12 使用的是 curl/7.88.1 Debian13 使用的是 curl/8.14.1 并且 Debian13 的 curl/8.14.1 在一开始多了2行 解析IP的结果 我们可以尝试在 Debian12 环境下测试 curl/8.14.1 3. Debian12 用C编译 curl v8.14.1 https://zelikk.blogspot.com/2025/10/debian12-c-curl-v8141.html 4. Debian12环境下测试 curl/8.14.1  Debian12 的 curl/8.14.1 的结果是 返回 IPv6  5. Debian13环境下测试 curl/7.88.1 可以看到 Debian13 的 curl/7.88.1 的结果是返回 IPv4 所以可以确定是 代码的变化导致结果发生了变化 . 而不是Debian12与13的环境差异. 6. 从哪个版本发生的变化 我们可以编译不同版本的 curl 观...

Debian12 用C编译 curl v8.14.1

图片
curl的 Github代码库 https://github.com/curl/curl 这是一个C语言的项目 参考 以前的C编译经验 大部分操作是一样的, 记录一下不同的地方 ./configure 的时候报错 checking for library containing psl_builtin... no configure: error: libpsl was not found 找GPT问了一下, 说要安装 apt install libpsl-dev 然后还会报错 configure: error: select TLS backend(s) or disable TLS with --without-ssl. 于是需要 ./configure --with-openssl 无错完成以后就可以 make 了 生成的 curl 在 src 目录下 * 注意 这个 curl 不是可执行文件 你可以cat看一下文件的内容 但你可以当作像可执行文件一样的去用, 只是不能挪位置. 如 ~/curl-8.14.1/src/curl -v api.myip.la

AutoHotKey 实现 CapsLock 一键双用 长按=Ctrl 短按=Esc

图片
逛B站的时候看到 <告别腱鞘炎!Vim 党必看! CapsLock 一键双用:Ctrl + Esc 全搞定> 目的是 长按CapsLock实现 Ctrl 的效果, 短按CapsLock实现 Esc 的效果 里面的AutoHotKey代码如下: SendMode Input SetWorkingDir %A_ScriptDir% SetCapsLockState, AlwaysOff CapsLock::   Send {Ctrl Down}   KeyWait, CapsLock   Send {Ctrl Up}      if (A_PriorKey = "CapsLock")     Send {Esc} return 走读代码就能发现问题, 不管是长按还是短按, 都会发出 Ctrl Down 和 Ctrl Up 信号 在大部分环境下, 这个多余的 Ctrl 信号没关系, 但是如果某个环境对这个多余的Ctrl信号有关系的话, ... 我想到的是, 应该加个延迟来判断是短按还是长按. 准备面向GPT开发的时候, 我想到, 不如给GPT一个开放的问题. 分析这段代码有什么问题, 可以怎样改进 结果超出我的期望. 1. 首先来看加延迟的方案 SendMode Input SetWorkingDir %A_ScriptDir% SetCapsLockState, AlwaysOff CapsLock::     KeyWait, CapsLock, T0.2  ; 等待释放 等待0.2秒          if (ErrorLevel)  { ; 长按超过0.2秒         Send {Ctrl Down}         KeyWait, CapsLock  ; 等待释放         Send {Ctrl Up}     }     else  { ; 轻按(短于0.2秒)   ...

丐版VPS装Xfce桌面 Firefox-ESR 支持VNC远程桌面

图片
前言 今天突然想试玩<逃离鸭科夫>(Escape From Duckov) 但是Telegram的资源频道里还没有. https://t.me/maopajia 所以就到网上搜了搜, 有磁力资源 magnet:?xt=urn:btih:de3270d5e38d84c4c79732c86c066af4f4a8180b 也有网盘下载 https://gofile.io/d/GEsP4C 磁力下载没什么说的, 我在VPS上搭建了离线下载系统. https://zelikk.blogspot.com/2022/01/vmess-websocket-tls-caddy-nginx-aria2-ariang-filebrowser.html 网盘下载嘛, 我以前也尝试过. https://zelikk.blogspot.com/2019/01/gcp-vps-xfce-vnc.html 不过, 今天按以前的教程操作下来, 有一些小变化,  所以记录一下.

电报防广告机器人 telegram antispam bot 相关功能 查询群组内的全部成员 增加入群时间信息

图片
前言 在前面一篇博文中 , 我们的入群验证机器人增加了一个功能, 可以手动启动对某个群成员的入群验证. 解决的问题是, 当机器人离开群组(或异常)的时候, 群组有了新的成员, 但是这些群成员没有经历入群验证. 那么一个新问题就随之而来, 我怎么知道哪些成员是在机器人离开群组的时间段入群的呢? 需求 输出群成员的入群时间. 具体实践 想到我们有过一个查群成员信息的工具 https://github.com/crazypeace/tg-get-group-member 我们只要面向GPT编程, 描述我们的需求. 基于以上代码, 增加功能:  保存群组成员加入群组的时间 修改量很小. 发现得到的结果中, 入群时间是无序的. 向GPT追加需求 查询结果需要按入群时间排序 GPT给出的结果 基本功能是正确的, 但是对于保存在文件中的格式, 我有一点特别的要求. 最初这个项目是为了生成一个用户列表, 供  发言验证机器人  作为 已验证用户列表 valid.yaml 所以需要保存在文件中的格式为: 6617181826:   username: atefatman   full_name: 子 肥 7919966027:   username: crazypeace_anti_bot_bot   full_name: CZ_antibot_bot 我尝试了几种方案. 如果用 list , 保存在文件中的形式是 - id: 399932510   username: crazypeace   full_name: ǝɔ∀ǝdʎz∀ɹɔ 👽   joined_at: '2025-10-06T17:47:39.202290' - id: 661519101   username: testuser   full_name: 测试 用户   joined_at: '2025-10-07T12:11:22.501119' 如果用 OrderedDict , 保存在文件中的形式是 !!python/object/apply:collections.OrderedDict - - - 1716213463     - username...

电报防广告机器人 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 命令除了解决一开始的原始问题, 还有一个好处就是 当...

极简一键脚本 搭Hysteria2梯子 UDP 使用BBR策略

图片
本文是整理博客补一篇. 并没有新的一键脚本发布. 一键执行 bash <(curl -L https://github.com/crazypeace/hy2/raw/main/install.sh) 这个一键脚本超级简单。有效语句 6 行(其中 安装Hysteria2 1 行, 安装Hysteria2服务 2 行, 生成自签证书 3 行) + 配置文件28行(其中你需要修改 4 行), 其它都是用来检验小白输入错误参数或者搭建条件不满足的。 你如果不放心开源的脚本,你可以自己执行那 6 行有效语句,再修改配置文件中的 4 行,也能达到一样的效果。 Github  https://github.com/crazypeace/hy2 前提条件 一个没有被墙的VPS Hysteria2底层是UDP直连,如果你的VPS已经被墙,那肯定用不了。出门左转  https://github.com/crazypeace/v2ray_wss 如果你能确定只是UDP有问题, 想试试TCP, 那么可以尝试 Reality https://github.com/crazypeace/xray-vless-reality 具体安装过程说明 bash <(curl -L https://github.com/crazypeace/hy2/raw/main/install.sh) 每个需要输入的地方都有提示 如果是IPv4+IPv6双栈的小鸡, 问你IPv4还是IPv6时 请按你的VPS的公网入口IP的情况填写. 公网IP为IPv4就输入 4 , 公网IP为IPv6就输入 6 . 单栈的小鸡直接按回车, 脚本会自动处理. 其它选项都可以回车使用脚本随机生成的默认值. 本项目配置文件不使用Brutal 我建此项目的目的是为了使用UDP这个通路. 不是为了Brutal策略. 所以在配置文件中使用了 ignoreClientBandwidth: true  如果你需要使用Brutal策略, 请自行修改配置文件, 或使用其它一键脚本. 带参数的使用方法 bash <(curl -L https://github.com/crazypeace/hy2/raw/main/install.sh) <netstack> <port>...

极简一键脚本 搭Xray梯子 VLESS + Reality + TLS 偷 x25519 证书

图片
本文是整理博客补一篇. 并没有新的一键脚本发布. 一键执行 bash <(curl -L https://github.com/crazypeace/xray-vless-reality/raw/main/install.sh) 这个一键脚本超级简单。有效语句 8 行(其中BBR 5 行, 安装Xray 1 行, 生成x25519公私钥 1 行,生成UUID 1 行)+Xray配置文件69行(其中你需要修改 4 行), 其它都是用来检验小白输入错误参数或者搭建条件不满足的。 你如果不放心开源的脚本,你可以自己执行那 8 行有效语句,再修改配置文件中的 4 行,也能达到一样的效果。 GitHub: https://github.com/crazypeace/xray-vless-reality 前提条件 一个没有被墙的VPS Reality底层是TCP直连,如果你的VPS已经被墙,那肯定用不了。出门左转  https://github.com/crazypeace/v2ray_wss 如果你能确定只是TCP有问题, 想试试UDP, 那么可以尝试 Hysteria2  https://github.com/crazypeace/hy2 具体安装过程说明 bash <(curl -L https://github.com/crazypeace/xray-vless-reality/raw/main/install.sh) 每个需要输入的地方都有提示 如果是IPv4+IPv6双栈的小鸡, 问你IPv4还是IPv6时 请按你的VPS的公网入口IP的情况填写. 公网IP为IPv4就输入 4 , 公网IP为IPv6就输入 6 . 单栈的小鸡直接按回车, 脚本会自动处理. 其它选项都可以回车使用脚本随机生成的默认值. 最后一步脚本会提示你安装WARP帮你把小鸡添加为IPv4+IPv6双栈出站的小鸡, 方便后续处理比如 Google人机验证,Youtube不让评论 等问题. 如果你不想装WARP, 此时Ctrl+C中断即可. 偷 x25519 证书 如果你不想使用脚本默认的设置, 想指定"偷"哪个域名的证书.  那么你需要确认该域名 使用了 TLS 1.3 x25519  具体操作为, 在浏览器打开你想"偷"的域名, 然后按F12 ...

关于telegram电报防广告机器人想到的

图片
我不支持把各种外部机器人拉到群里面来, 这样会让群里的信息更容易被抓取. 在给了这些机器人管理权限之后, 很难保证这些机器人会不会作恶. 不知道大家对于 双向聊天机器人livegarm bot 发广告的事件还有没有印象. 对于防广告, 基本上是两个思路. 一个是人机验证. 另一个是对消息内容进行分析是否广告. 人机验证有很多办法.  做题啊, 回答问题啊, 调用 cloudflare 的人机验证啊, 等等... 我选择的方案是回复文本. 一来是方便自定义, 二来是容易提升回答问题的难度. 如果要做到有意义的随机问题, 也是可以的, 比如, 我的博客最新一期博文的标题是什么 人机验证理论上无法解决 使用真人来做题的情况. 就看你的群组的规模与发广告的人的决心之间的博弈了. 对消息内容分析是否广告, 难度要大得多. 而且我觉得这中间涉及到一个信任问题, 所以我没有实施. 现在有不少人在做, 基于消息内容分析的防广告机器人. 有很多也提供免费的开放使用. 但是我有一些担心, 1. 如果这个防广告机器人 收广告商的钱,  "故意" 漏掉广告?  2. 如果这个防广告机器人依赖大家提供信息和反馈(广告消息, 非广告消息).  即使这个防广告机器人本身是中立的.  2a. 如果有人故意将广告消息报告成正常消息, 让防广告机器人学习并形成判断规则之后, 自己再用同样的模式发广告消息, 就可以躲过防御. 2b. 如果有人故意将正常消息报告成虚假的广告消息, 让防广告机器人学习并形成判断规则之后, 会产生误伤, 故意让防广告机器人的表现变差, 使得群主们不敢用这个机器人. 3. 如果这个广告机器人依赖作者或者一个小团体来提供 广告与非广告的数据来训练, 那么随着广告消息的模式每天都可能发生变化, 这个广告判断库也需要随之及时更新. 这是我无法想象的精力投入. 如果是我的话, 我不会维护这样一个项目. 像这种业余时间, 因兴趣而起的, 非商业的项目. 我在考虑设计为  大而完美 还是 小而粗糙,  大一统 / 功能强大  还是  各自独立 / 功能灵活 / 够用就好, 我会选择后者. 我最早实践部署的telegram电报关键字监控机器人, 是 别人的项目 .  该项目设计了机器人自动加入群...

电报防广告机器人 telegram antispam bot 相关功能 清除群组Removed Users列表

图片
有很多广告账号在防广告机器人处理下, 被踢出了群组. 也就是在群组的 Permissions - Removed Users 列表中. 而广告账号因为被举报得很多, 所以实际上比较快就会被telegram封禁, 成为 Deleted Account 本项目的目的就是清理这个列表, 把已经被封禁的账号移除. 再一次地, 用GPT开发. 基于我们的前一个项目, 全代码复制粘贴到chatgpt中, 再附上以下要求 基于上面的代码, 实现以下功能: 在群组的 permissions - removed users 里面, 找出被封禁的账户 Deleted Account, 清除掉. Github https://github.com/crazypeace/tg-clear-removed-users 使用效果 📢 群组: FuckGFW-Newbie 翻墙新手村 ✅ 保留: 7887288719 (Trinity Griselda) - 被踢出状态 ⏭️ 跳过: 8125834274 🗑️ 检测到 Deleted Account: 7623369260,正在清理... ✅ 保留: 6331849477 (bk ) - 被踢出状态 ✅ 保留: 6709325050 (易捷支付 机场特惠 ) - 被踢出状态 🗑️ 检测到 Deleted Account: 8173951376,正在清理... 🗑️ 检测到 Deleted Account: 7499278394,正在清理... 🗑️ 检测到 Deleted Account: 7548224690,正在清理... ...略 ✅ 完成检查,共检查 55 人,清理掉 19 个 Deleted Account。 其中 8125834274 是我设置在脚本中测试保留列表用的. 总结 不管是 Exceptions 还是 Removed users, 都是用 iter_participants 函数查询出来的群成员, 只是用的 filter 不同. 不管是清除 Exceptions 还是 Removed users, 都是设置一个空的 ChatBannedRights await client(EditBannedRequest(entity, p.id, ChatBannedRights(until_d...

怎么把梯子分享给长辈

图片
思路 1. 同时搭建多种协议 2. 创建订阅链接 3. 用办法保证墙内访问订阅链接 4. 选用解压即用的翻墙客户端 5. 配置完成后打压缩包 6. 告诉长辈   a. 解压缩包   b. 运行可执行文件   c. 更新订阅的操作   d. 切换节点的操作

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

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

电报防广告机器人 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

The Hot3 in Last 30 Days

酒馆SillyTavern 玩英文角色卡 也能以中文输出 设置世界书Lorebooks

搭 Docker版 Sub-Store订阅转换专家 带 http-meta 实现 集合订阅 测延迟 排序 筛选 生成新订阅 定时任务上传Gist