Python Telegram Bot:如何检测隐藏资料的用户?
Telegram反馈机器人:检测隐私设置导致无法回复的用户方案
问题背景
我开发的反馈机器人原本功能是:接收用户消息后转发到管理员群组,管理员回复消息时,机器人再把回复发回给原用户。但遇到一个问题——当用户开启Telegram的「禁用转发消息与用户账号关联」隐私设置时,机器人无法向该用户发送回复。现在需要找到方法检测这类用户,提前提醒他们无法收到回复。
可行解决思路
1. 前置验证可回复性(最可靠)
在用户提交第一条反馈时,先尝试给用户发送一条确认消息(比如「你的反馈已收到,我们会尽快回复」),如果发送失败,捕获对应的API异常,就能判断用户开启了隐私保护,这时直接提示用户调整设置。
用python-telegram-bot库的示例代码:
from telegram import Update from telegram.ext import ContextTypes ADMIN_GROUP_ID = 123456789 # 替换为你的管理员群组ID async def handle_user_feedback(update: Update, context: ContextTypes.DEFAULT_TYPE): user_chat_id = update.effective_chat.id # 先尝试发送确认消息,验证能否回复用户 try: await context.bot.send_message( chat_id=user_chat_id, text="你的反馈已收到,我们会尽快处理并回复你" ) # 验证通过,转发消息到管理员群 await context.bot.forward_message( chat_id=ADMIN_GROUP_ID, from_chat_id=user_chat_id, message_id=update.effective_message.id ) except Exception as e: # 匹配无法发送的异常类型 if "Forbidden" in str(e) or "Bad Request: chat not found" in str(e): await update.effective_message.reply_text( "检测到你开启了账号隐私保护设置,我们无法向你发送回复,请调整隐私设置后再提交反馈。调整路径:Telegram设置→隐私与安全→转发消息,关闭「隐藏账号信息」选项" ) else: await update.effective_message.reply_text("提交反馈失败,请稍后再试")
2. 前置引导提示
在用户提交反馈的入口处(比如机器人的启动菜单、反馈指令说明里),直接添加提示:「请确保未开启「禁用转发消息与用户账号关联」的隐私设置,否则将无法收到回复。调整路径:Telegram设置→隐私与安全→转发消息→关闭隐藏账号信息」。
3. 转发后特征判断(备选)
当用户开启隐私设置时,机器人转发到管理员群的消息中,forward_from字段会为空(正常情况会包含用户ID等信息)。不过这种方法的局限性在于,此时可能已经无法向用户发送提示了,所以只能作为辅助判断,还是优先用第一种方法。
关键说明
- Telegram Bot API没有直接提供检测该隐私设置的接口,只能通过「尝试发送消息」这种间接方式判断。
- 不同Bot库或API版本返回的异常信息可能有差异,需要根据实际测试调整异常匹配的关键词。
内容的提问来源于stack exchange,提问作者Elektrocabel
相关产品推荐
相关产品推荐

