Discord.py发送自定义emoji异常:执行]rad命令仅显示表情ID字符串
Discord机器人自定义表情无法渲染问题解决
核心原因
自定义表情无法正常渲染通常由格式错误、权限不足或直接硬编码字符串容错性低导致,可按以下步骤排查修复:
- 核对表情格式与ID正确性:在Discord聊天框输入
\:die1:发送,即可得到该表情的标准转义字符串,确认与你代码中写入的<:die1:893805362019467295>完全一致,无多余空格、字符拼写错误。如果是动态GIF表情,格式需要调整为<a:die1:表情ID>。 - 确认表情使用权限:如果该表情属于当前命令触发的服务器,确认机器人角色拥有「发送表情」权限;如果表情属于其他服务器,需要表情所属服务器开启「允许外部使用表情」设置,同时机器人在当前服务器拥有「使用外部表情」权限。
- 改用API获取表情对象发送:直接硬编码表情字符串容错率低,推荐通过官方API获取表情对象后再发送,参考代码如下:
import discord @bot.command(name='rad') async def rolladice(ctx): # 从当前服务器表情列表中匹配指定名称的表情 die_emote = discord.utils.get(ctx.guild.emojis, name="die1") # 若已知表情唯一ID,也可直接通过ID获取(支持跨服表情) # die_emote = await bot.fetch_emoji(893805362019467295) if die_emote: await ctx.send(die_emote) else: await ctx.send("未找到对应表情,请检查名称/ID配置")
额外注意
如果使用的是discord.py的分支库(如nextcord、pycord),只需将上述代码中discord.utils.get替换为对应库的同名工具方法即可,逻辑保持一致。
内容的提问来源于stack exchange,提问作者Rovindu Thamuditha
相关产品推荐
相关产品推荐

