Discord选择列表添加服务器自定义表情不显示问题求助
解决Discord选择菜单自定义表情不显示的问题
问题根源:你当前是把自定义表情的<:ProEvent:1274673606239981598>格式字符串直接拼接在label里,Discord不会自动解析这种文本为表情,只会当成普通字符显示。正确的方式是使用discord.SelectOption的emoji参数,传入正确的表情对象。
修复步骤
- 解析自定义表情字符串:从JSON配置里提取的表情格式是
<:表情名:表情ID>,拆分出表情名和ID后,构建discord.PartialEmoji对象。 - 修改SelectOption创建逻辑:把表情对象传入
emoji参数,label可只保留工单名称(表情会通过参数单独显示在选项左侧)。
修改后的代码
view = TicketTypeSelectView(ticket_data['ticket_types']) await interaction.response.send_message("请选择你要创建的工单类型:", view=view, ephemeral=True, delete_after=60.0) class TicketTypeSelectView(discord.ui.View): def __init__(self, ticket_types): super().__init__(timeout=None) options = [] for name, data in ticket_types.items(): emoji_str = data.get('emoji', '') emoji = None # 解析自定义表情格式 if emoji_str.startswith('<:') and emoji_str.endswith('>'): parts = emoji_str[2:-1].split(':') if len(parts) == 2: emoji_name, emoji_id = parts emoji = discord.PartialEmoji(name=emoji_name, id=int(emoji_id)) # 用emoji参数传入表情对象,label保留工单名称 options.append(discord.SelectOption(label=name, value=name, emoji=emoji)) self.add_item(TicketTypeSelect(options))
注意事项
- 确保你的机器人在自定义表情所在的服务器中,否则无法正常渲染该表情。
- 跨服务器可用的Nitro表情,也可以用同样的方式解析。
内容的提问来源于stack exchange,提问作者Leon Hu
相关产品推荐
相关产品推荐

