Telegram频道管理员查看用户帖子具体反应及代码问题排查
修复Telegram频道反应监听Bot的问题
原代码的核心问题
- 代码顺序错误:
@bot.message_handler装饰器必须放在bot.polling()之前,否则Bot不会加载命令处理器,导致/start按钮无响应 - 重复获取更新:同时用
bot.polling()和while True + get_updates()会冲突,二者只能选其一 - 未正确监听反应事件:原代码只检查消息自带的reactions,但频道的反应更新需要单独监听
reaction类型的事件 - 反应对象结构错误:telebot中反应的用户信息不是直接
reaction.user,要从reaction.users列表里获取
修正后的可用代码
import telebot from telebot.types import ReactionUpdated # 替换成你的Bot令牌 BOT_TOKEN = "YOUR_BOT_TOKEN" # 替换成你的管理员ID(仅你能收到反应详情) ADMIN_ID = 123456789 bot = telebot.TeleBot(BOT_TOKEN) # 处理启动命令,验证管理员身份 @bot.message_handler(commands=["start"]) def start_command(message): if message.from_user.id == ADMIN_ID: bot.send_message(message.chat.id, "反应监听已启动,频道反应详情会实时发送给你") else: bot.send_message(message.chat.id, "你没有权限使用此Bot") # 监听频道的反应更新 @bot.reaction_handler(func=lambda reaction: True) def handle_reactions(reaction_update: ReactionUpdated): # 仅向管理员推送详情 if ADMIN_ID: for reaction in reaction_update.reaction: # 遍历每个反应对应的用户 for user in reaction.users: # 拼接反应信息(优先显示用户名,没有则显示昵称) user_name = user.username or user.first_name reaction_info = f"用户@{user_name}(ID:{user.id})对帖子发送了{reaction.emoji}" # 发送给管理员 bot.send_message(ADMIN_ID, reaction_info) # 启动Bot,意外断开后自动重连 bot.polling(none_stop=True, interval=0, timeout=20)
必做配置
- 把Bot设为频道管理员,开启「读取消息」「管理消息」权限
- 用@userinfobot获取你的真实Telegram用户ID,替换代码里的
ADMIN_ID - 若频道隐私设置限制,Bot可能无法获取用户完整信息,仅能拿到匿名标识
内容的提问来源于stack exchange,提问作者reza
相关产品推荐
相关产品推荐

