You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:55:07