Discord机器人emoji.url无法获取跨服务器emoji链接 报错如何解决
问题根源
你当前的报错是因为discord.Emoji类型转换器仅能识别机器人已加入服务器内的自定义表情,跨服表情不在机器人的缓存范围内,所以匹配失败抛出EmojiNotFound异常。
解决方法
不需要依赖内置的Emoji转换器,直接接收字符串参数,通过正则提取表情的ID和动静态属性,手动拼接Discord固定规则的CDN链接即可,所有自定义表情的CDN资源不需要权限就能公开访问。
修改后的完整代码示例:
import re # 你原有其他代码保持不变 @bot.command(brief='Allows you to steal an emoji', description='Will return the image file for a requested emoji', usage='[emoji](can be from anywhere and animated if you have nitro)') async def steal(ctx, emoji_str: str): receivedcommand(ctx) # 匹配自定义表情的标准格式 emoji_pattern = r'<(?P<animated>a?):(?P<name>[a-zA-Z0-9_]+):(?P<id>[0-9]+)>' match = re.match(emoji_pattern, emoji_str) if not match: await ctx.send("请输入有效的自定义表情") return emoji_info = match.groupdict() # 按动静态拼接资源链接,size参数最大支持4096,可按需调整 file_suffix = 'gif' if emoji_info['animated'] else 'png' emoji_url = f"https://cdn.discordapp.com/emojis/{emoji_info['id']}.{file_suffix}?size=4096" await ctx.send(emoji_url)
该实现支持所有服务器的静态、动态自定义表情,不需要机器人加入对应服务器,只要用户能正常发送该表情就能解析出原图链接。
内容的提问来源于stack exchange,提问作者user15114419
相关产品推荐
相关产品推荐

