如何让Discord Bot中random.sample的输出换行显示?
解决Discord Bot中Intrigues内容每行显示的问题
你当前的问题是直接将random.sample返回的列表转为字符串输出,导致显示成带括号和逗号的格式。要实现每行一个任务,只需将采样到的元素用换行符(或带项目符号的换行)拼接成字符串即可。
修改后的代码如下:
import disnake import random from disnake.ext import commands from variables import IntriguesList class IntrigueCog(commands.Cog): def __init__(self, bot): self.bot = bot @commands.slash_command(guild_ids= [guildID]) async def intrigue(interaction: disnake.ApplicationCommandInteraction): """Generate Intrigues for an upcoming battle""" await interaction.response.defer(with_message=True) intrigue = disnake.Embed( title="Intrigues", description="Three side-missions for your next battle", color = disnake.Colour.dark_green() ) # 采样3个任务并拼接成每行一个的字符串 sampled_intrigues = random.sample(IntriguesList, 3) # 可选:用带项目符号的格式提升可读性,替换下一行即可 # field_value = '\n- '.join(sampled_intrigues) field_value = '\n'.join(sampled_intrigues) intrigue.add_field(name="Your Intrigues", value=field_value) # 发送生成好的Embed消息 await interaction.followup.send(embed=intrigue)
关键改动说明:
- 替换列表转字符串逻辑:用
'\n'.join(sampled_intrigues)将采样到的任务逐个用换行符连接,生成Discord能解析的多行字符串,实现每行显示一个任务。 - 补充发送Embed代码:原代码仅创建了Embed但未发送,添加
await interaction.followup.send(embed=intrigue)才能让用户看到最终消息。 - 可选格式优化:如果想要更清晰的列表样式,改用
'\n- '.join(sampled_intrigues),每个任务前会添加短横线,提升可读性。
你之前尝试用\n没成功,是因为直接将列表转为字符串时,列表的默认格式(如['任务1', '任务2'])里的换行符不会被Discord解析,而join方法是真正将元素用换行符拼接成了新的字符串,才能正确实现每行显示的效果。
内容的提问来源于stack exchange,提问作者Albert Ross
相关产品推荐
相关产品推荐

