是否可以通过Telegram bot设置用户黑名单禁止其使用对应功能?
Telegram转发Bot黑名单设置方案
完全可以通过新增黑名单校验逻辑解决垃圾消息骚扰问题,具体实现步骤如下:
1. 准备黑名单存储结构
优先选择TG用户唯一ID作为拉黑依据(比用户名稳定不会变更),可以用本地JSON文件、轻量数据库SQLite存储黑名单列表,不需要复杂的服务部署。
2. 新增消息前置校验逻辑
在原有消息转发逻辑之前新增黑名单判断步骤:
- 每次收到用户消息时,先提取发送者的用户ID
- 用该ID匹配黑名单存储列表
- 命中黑名单直接终止处理流程,可选择返回禁用提示或者直接忽略消息
3. 新增管理员操作命令
仅允许指定的管理员账号操作黑名单,建议预留3个基础命令:
/ban <用户ID>:将指定用户ID加入黑名单/unban <用户ID>:将指定用户ID移出黑名单/list_ban:查看当前所有拉黑的用户ID
如果你用的是Python的python-telegram-bot库,可以参考核心实现代码:
import json # 初始化加载本地黑名单 def load_blacklist(): try: with open("blacklist.json", "r", encoding="utf-8") as f: return set(json.load(f)) except FileNotFoundError: return set() # 全局变量存储黑名单,管理员ID替换为你自己的TG用户ID blacklist = load_blacklist() ADMIN_UID = 123456789 # 消息处理主逻辑 async def message_handler(update, context): sender_uid = update.effective_user.id # 黑名单校验 if sender_uid in blacklist: await update.message.reply_text("你已被禁止使用该机器人") return # 原有消息转发逻辑放在此处 # ... # 拉黑命令处理 async def ban_cmd(update, context): # 仅管理员可操作 if update.effective_user.id != ADMIN_UID: return if not context.args: await update.message.reply_text("格式错误,正确用法:/ban 要拉黑的用户ID") return target_uid = int(context.args[0]) blacklist.add(target_uid) # 持久化保存到本地文件 with open("blacklist.json", "w", encoding="utf-8") as f: json.dump(list(blacklist), f) await update.message.reply_text(f"已成功拉黑用户{target_uid}")
拓展优化建议
- 可以额外新增消息关键词过滤、发送频率限制逻辑,短时间内发送多条消息的账号自动拉入黑名单,进一步降低人工维护成本
- 如果垃圾消息量很大,可以对接第三方反垃圾接口自动识别违规内容自动拉黑
内容的提问来源于stack exchange,提问作者vincenrius filbert
相关产品推荐
相关产品推荐

