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

如何解决Telethon抓取Telegram频道消息时无法获取互动表情的问题?

解决Telethon抓取Telegram互动表情(骰子等)的问题

你当前的代码仅读取了消息的message.text字段,但骰子、石头剪刀布这类互动表情并不属于普通文本内容——它们要么是服务消息(Service Message),要么以媒体对象(MessageMediaDice)的形式存在,因此无法通过message.text获取。

解决方案代码

先导入Telethon对应的类型来识别这类特殊消息,再在遍历消息时针对性处理:

from telethon import TelegramClient
from telethon.tl.types import MessageService, MessageMediaDice, MessageActionDice

with TelegramClient('session_name', api_id, api_hash) as client:
    for message in client.iter_messages(chat):
        # 处理带骰子媒体的普通消息(多数场景)
        if isinstance(message.media, MessageMediaDice):
            dice = message.media.dice
            print(f"{message.sender_id}: 互动表情 - {dice.emoji},结果: {dice.value}")
        # 处理骰子类服务消息(少数频道场景)
        elif isinstance(message, MessageService):
            if isinstance(message.action, MessageActionDice):
                dice = message.action.dice
                print(f"{message.sender_id}: 互动服务消息 - {dice.emoji},结果: {dice.value}")
        # 保留原有普通文本消息的处理逻辑
        elif message.text:
            print(f"{message.sender_id}: {message.text}")

代码说明

  • MessageMediaDice:绝大多数互动表情会以媒体对象的形式附着在普通消息中,通过判断message.media的类型,可以直接获取骰子对应的emoji和随机结果值。
  • MessageService + MessageActionDice:部分频道内的互动操作会以服务消息的形式发送,需要同时校验消息类型和动作类型才能捕获。
  • 保留了原有的文本消息处理逻辑,确保普通文本消息的抓取不受影响。

内容的提问来源于stack exchange,提问作者augustfu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:58:56