如何在单个Discord embed中展示所属guild的全部emoji
问题原因
- 现有逻辑每次调用命令仅遍历取出1个emoji,就直接创建并发送embed,所以会单独生成多条embed消息
- 全局变量j的计数逻辑完全不需要,也不需要用while True死循环遍历,直接一次性遍历所有emoji拼接内容即可
- 没有提前对emoji按动态、静态分类拼接,也没有一次性把所有内容填入单个embed再发送
修复后代码
@commands.command() async def gimmeem(self, ctx): emojilist = ctx.guild.emojis # 分开存储动态和静态emoji,不需要区分可以去掉分类逻辑 animated_emojis = [] static_emojis = [] for emoji in emojilist: if emoji.animated: animated_emojis.append(str(emoji)) else: static_emojis.append(str(emoji)) emb = discord.Embed(title = "Server Emojis") # 拼接内容后一次性填入字段 if animated_emojis: emb.add_field(name = "动态Emoji", value = " ".join(animated_emojis), inline=False) if static_emojis: emb.add_field(name = "静态Emoji", value = " ".join(static_emojis), inline=False) # 所有内容填充完成后再发送一次embed await ctx.send(embed=emb)
注意事项
- discord embed单个字段的
value最大长度限制为1024字符,如果服务器emoji数量很多导致拼接后的内容超出长度,你可以按数量拆分多个字段存储 - 如果不需要区分动态和静态emoji,直接把所有emoji拼到同一个字段的value里即可
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

