博文

目前显示的是标签为“开发”的博文

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秒)   ...

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

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

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

电报防广告机器人 telegram antispam bot 在群内发言时需要人机验证

图片
现在有很多广告机器人, 在第一次加群时通过了验证, 然后一直不发言. 直到某天晚上开始发广告信息. 所以我想, 如果在群成员第一次发言时加上一个人机验证, 是不是可以大幅改善这个问题?

电报防广告机器人 telegram antispam bot 我的博客最新一期博文的标题是什么 html解析 rss xml解析

图片
上一期中, 我们实现了自定义 问题-答案 . 但是过于死板. 那么, 除了算术题, 还有什么可以生成灵活 问题-答案 的方式呢? 比如, 我的博客最新一期博文的标题是什么? html解析 如果是人, 怎么找到我的博客的最新一期博文呢?  打开  https://zelikk.blogspot.com/ 找到这个位置, 标题就是答案了. 那么, 计算机程序怎么获取这一条呢? 我们 按 F12 打开浏览器开发者工具. 使用选择工具, 选中我们需要的博文标题.  可以看到在html中, 博文标题对应元素是 class="post-title entry-title" 那么, 我们使用GPT编程. python实现如下功能, 访问 https://zelikk.blogspot.com/ 在 html 中找到 第1个 class="post-title entry-title" 元素,  输出该元素的文本内容 把GPT编程的结果和原来的 youtube.py 里面的4行代码融合一下, 就得到这样的 blog.py  放到 pset 目录下就生效了.  import requests from bs4 import BeautifulSoup def buildQA():   question = '我的博客的最新一期博文标题是什么?'   correct_answer = ''   url = "https://zelikk.blogspot.com/"   # 请求网页   response = requests.get(url)   # 解析 HTML   soup = BeautifulSoup(response.text, "html.parser")   # 找到第一个 class="post-title entry-title" 的元素   element = soup.find(class_="post-title entry-title")   if element:     correct_answer = element.get_text(strip=True)   e...

Cloudflare worker 反代 blogspot 实现免翻墙域名镜像站 path关键词屏蔽

图片
前面实现了一个反代 blogspot 实现免翻墙域名镜像站 .  用KV中保存需要屏蔽的path的方式, 做到了, 指定path显示固定页面, 而不是原页面的功能. 有的用户也许会觉得, 写了一篇不想在墙内显示的博文, 还要去KV里面添加一条记录, 好麻烦呀. 还有一个办法, 就是对path先进行关键字筛选, 含有关键字的path, 直接就显示固定页面, 不需要去查KV了. 比如, 我在写博文的时候, 就有自定义链接的习惯, 会在 xxx.html 的这个xxx里面 包含博文的主题 https://zelikk.blogspot.com//2022/01/v2ray-caddy-ws-tls-cdn.html 利用GPT开发, 把 项目的work.js 丢进去, 附上这么一段话 GPT返回的结果有问题. 直接return Response 再多打几句. 这样的结果就对了. 更新到Github https://github.com/crazypeace/cf-worker-proxy-blogspot

Cloudflare worker 反代 blogspot 实现免翻墙域名镜像站 绑定KV屏蔽path列表

图片
灵感 我有了一个想法, 想提高我这个博客在GFW墙内搜索引擎的曝光. 思路 1. 需要有一个没有被墙的域名, 用来访问我的博客 2. 我不想使用blogspot的自定义域名方案.  一是, 我原来的域名已经在墙外的搜索引擎中存在多年. 二是, 如果改为使用自己的域名, 我就需要维护域名的解析. 如果遇到攻击, 域名解析受影响, 我需要额外做不少工作.  3. 所以我需要一个没有被墙的域名作为镜像站 4. 作为墙内可以直接访问的域名, 显示的内容也应该是不涉及翻墙的. 所以需要屏蔽掉直接描述翻墙节点搭建, 翻墙工具使用的博文. 具体细节 1. Cloudflare worker反代是好多年的技术了. 可以做到显示 html 的效果. 2. 图片 来自 https://blogger.googleusercontent.com 可以用 uniproxy 的技术. 在第1步获得html之后, 把里面所有访问 https://blogger.googleusercontent.com 的链接前面加上 uniproxy  3. CSS 对于 blogspot 来说, 是内嵌在html中的. 4. js 我不想管了, 在我的blogspot中, 对页面的阅读影响不大.  5. 跳转到其它页面的链接 在第1步获得html之后, 查找替换, 把blogspot域名替换为免翻墙域名. 6. worker绑定一个KV, 里面保存我不希望在墙内显示的链接. 当访问这些链接时, 显示一个固定的页面. 落实 反代 worker 在google中搜索"cloudflare worker 反代 代码", 没想到直接就给了AI结果 因为本项目体量不大, 而现在的各个GPT上下文都足够大, 哪怕我的M$ copilot使用受限了, 我也可以直接把全量代码复制粘贴, 再附上我的功能描述, 丢给gemini啊 chatgpt啊 去生成代码. chatgpt 5.0 有限额, 但是我的项目比较简单, 哪怕降级成 GPT-4 也有用. 具体的调试过程还是有点繁琐的, 就是遇到个问题, 复制代码加上报错信息(或者是自己想要做到什么功能的描述), 丢给GPT, 得到答案, 再部署应用, 再测试, ... 不断循环, ... 最终成果 Github htt...

电报防广告机器人 telegram antispam bot 重构产生问题和回答的方式

图片
上一期我们实现了防广告机器人的基本框架 如果我们想实现丰富的 问题-答案 生成方式, 怎么做呢? 看一下目前的代码. 是生成了 问题-答案 后, 保存起来, 然后新成员再回答问题, 并检查答案. 那么, 我们来做这样一件事. 在一个python文件 main.py 的目录下, 有一个 pset 目录.  pset 目录下有多份 .py 文件.  这些 .py 文件中, 都至少包含1个函数. buildQA buildQA 返回2个字符串, 一个是 question, 一个是 correct_answer 我要在 main.py 中随机调用 pset 目录下的一个 .py 文件中的 buildQA 函数 把这段文字丢给 M$ copilot (或者你手边的任意一个GPT), 很容易就得到答案. 把修改方案应用到项目中. 主 py 文件中. 增加这样一个函数 def get_random_module():     # 找出 pset 目录下的所有 .py 文件(排除 __init__.py)     files = [         f[:-3] for f in os.listdir("pset")         if f.endswith(".py") and f != "__init__.py"     ]     # 随机选择一个     chosen = random.choice(files)     # 动态导入     module = importlib.import_module(f"pset.{chosen}")     return module 再把原来生成 问题-答案的地方改成这样 # 生成验证问题和答案 mod = get_random_module() question, correct_answer = mod.buildQA() 然后在 pset 目录下, 新建一个 add.py 文件. 内容如下: import random def buildQA():...

电报防广告机器人 telegram antispam bot 新成员入群时需要人机验证 用回复文本的方式增加发广告的成本

图片
用了这么久的telegram, 看到的防广告机器人, 都是用选按钮的方式回答问题, 理论上有被穷举题库的可能性. 如果你的群足够有吸引力, 想加群的广告机器人足够多, 总是可以找到入群问题的答案的. 而入群问题如果太变态 ( https://github.com/XTLS/Xray-core/discussions/3487 ) 反而拒绝了一些能力不强的正常人类 (TA们本身并不是想发广告, 只是想入群提问或交流) 所以我有了一个思路, 如果这个人机检查的问题需要回答文本呢? 用干就干, 利用claude进行初步构建. 我要开发这样的一个telegram机器人 机器人在群组中工作 当机器人检测到有新成员加入时, 机器人将新成员设置禁言. 机器人要求新成员在与机器人的私聊过程中完成人机检测. 如果通过人机检测, 那么机器人解除新成员的禁言状态. 人机检测的具体过程是这样的 当新成员向机器人发送/start时, 机器人提问, 新成员输入文本回答. 得到的结果放到 VS Code, 和 M$ Copilot 合作, 进行调试. 效果 Github https://github.com/crazypeace/tg-join-group-exam-bot/ 总代表量(算上空行和注释)不到300行, 是不是很轻量! * 考虑到后续还会有几期更新. 所以本期的代码也复制了一份  tg-join-group-exam-bot1.py 在项目里. 部署方法见项目 readme 目前这只是一个最基础的架子, 后续我们再慢慢优化. 欢迎关注我的博客 https://zelikk.blogspot.com/p/icdyct.html

商业化电报关键词提醒机器人 telegram keyword monitor bot

图片
书接止文. 今天接着说商业化电报关键词提醒机器人 telegram keyword monitor bot 的一些思考. 也就是, 你可以怎样用项目去卖钱. Github https://github.com/crazypeace/tg-keyword-monitor-bot 再复习一下本项目的架构 卖的是搭建项目的劳动 对于项目的使用者来说, 如果还要操作linux系统, 修改配置文件来修改关键字, 使用起来会不方便. 本项目提供向机器人发命令来修改关键字的操作方式, 使用者不需要接触linux环境. 示例, 甲方 提供 tg账号, 作为采集者, 把信息源的群都加好. 你把这个项目搭起来, 把甲方的tg账号设置为 管理员 和 消费者. 使用方式就是, 如果要监听更多的群, 甲方自己操作tg账号去加群. 如果要修改关键字, 甲方自己操作tg账号和机器人交互修改关键字. 甲方在tg账号上接收机器人发送的关键字消息. 卖的是信息源 比如, 某些群 加群要收费, 或者不接收新群成员了.  而你手里有已经加了这些群的tg账号, 作为 采集者. 示例,  在同一个大圈子里, 不同的甲方有不同的关键字需求. 你的采集者是同一个tg账号. 你为每一个甲方, 分别 运行一个项目. (可以共用VPS, python环境. 建不同的目录就行了) 其它设置都和标准流程一样, 只是设置同样的 采集者 (配置文件中的 user_phone 参数) 卖消费者权限 如果这个行业关注的关键字相当同质化, 你也掌握了信息源. 想降低维护成本, 你可以直接卖消费者权限. 示例, 你可以直接修改配置文件的 result_id_list 列表, 添加不同的 接收关键字消息的 tg 账号的ID. 你也可以把一个tg频道的id 设置为 result_id_list. 然后把 发布者的 bot 添加为频道的管理员, 这样就可以发关键字通知了. 你可以把频道设置为私有的, 你控制订阅这个频道的权限就行. 你收了钱, 再把某个tg用户添加进频道. 我自己公开了一个关键字消息的频道示例: https://t.me/FuckGFWNewbieNeedHelp 使用多个采集者 不希望一个tg账号加太多的群, 担心一下子被封号的风险. 或者是你已经触达500个群组的上限. 运行多套程序, 分别使用不同的采...

The Hot3 in Last 7 Days

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

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