如何将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
相关产品推荐
相关产品推荐

