You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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)

关键改动说明:

  1. 替换列表转字符串逻辑:用'\n'.join(sampled_intrigues)将采样到的任务逐个用换行符连接,生成Discord能解析的多行字符串,实现每行显示一个任务。
  2. 补充发送Embed代码:原代码仅创建了Embed但未发送,添加await interaction.followup.send(embed=intrigue)才能让用户看到最终消息。
  3. 可选格式优化:如果想要更清晰的列表样式,改用'\n- '.join(sampled_intrigues),每个任务前会添加短横线,提升可读性。

你之前尝试用\n没成功,是因为直接将列表转为字符串时,列表的默认格式(如['任务1', '任务2'])里的换行符不会被Discord解析,而join方法是真正将元素用换行符拼接成了新的字符串,才能正确实现每行显示的效果。

内容的提问来源于stack exchange,提问作者Albert Ross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:30:50