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

如何将Telegram高级表情转换为Telethon可发送的格式?

实现Telethon中用户输入高级表情到指定格式的转换

问题核心

需要将用户输入的单个高级表情字符(如🔹)自动转换为Telethon可识别的[🔹](emoji/5388790256772331442)格式,其中数字为表情对应的document_id。

解决方案

通过遍历用户输入文本的每个字符,逐个调用Telegram API匹配对应的高级表情document_id,再拼接成要求的格式。具体步骤如下:

1. 编写转换函数

创建异步函数处理文本中的高级表情,自动替换为指定格式:

async def convert_premium_emojis(client, text):
    converted_parts = []
    for char in text:
        try:
            # 搜索当前字符对应的高级表情
            search_result = await client(functions.messages.SearchCustomEmojiRequest(
                emoticon=char,
                hash=0  # 此处hash传0即可,无需用户access_hash
            ))
            if search_result.results:
                # 获取匹配到的第一个表情的document_id
                doc_id = search_result.results[0].document_id
                converted_parts.append(f"[{char}](emoji/{doc_id})")
            else:
                # 非高级表情,直接保留原字符
                converted_parts.append(char)
        except Exception:
            # 搜索失败时保留原字符
            converted_parts.append(char)
    return ''.join(converted_parts)

2. 使用转换后的文本发送消息

调用转换函数处理用户输入,再以Markdown格式发送:

# 假设client已完成初始化和登录
user_input = "示例文本🔹包含高级表情"
processed_text = await convert_premium_emojis(client, user_input)

# 发送消息时指定parse_mode为markdown
await client.send_message(
    chat_id=目标聊天ID,
    message=processed_text,
    parse_mode='markdown'
)

3. 优化建议

  • 缓存机制:对已获取过document_id的表情进行缓存,避免重复调用API,提升处理效率。
  • 多匹配处理:若单个字符对应多个高级表情,可根据需求筛选最匹配的结果(比如优先匹配官方表情)。

原代码问题说明

你之前的代码存在两个关键问题:

  • 错误将用户的access_hash传入SearchCustomEmojiRequest的hash参数,该参数实际传0即可。
  • 尝试从已格式化的文本中提取表情,而非直接处理用户输入的原始字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:04:57