Discord.py使用for循环将多个值添加到单个字段

2024-06-16 18:10:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用Lavalink设置Musicbot
对于我的队列函数,我希望使用带有两个字段的嵌入:一个用于当前播放的曲目,另一个用于排队的曲目
使用for循环从Lavalink Audiotrack对象获取信息:

embed.add_field(name="Currently playing",value=f"[{player.current.title}]({player.current.uri})")
for track in player.queue:
    embed.add_field(name="Enqueued Tracks",value=f"[{track.title}]({track.uri})",inline=False)

每次将轨迹添加到排队的轨迹时,它都会添加一个new field。 有没有一种方法可以向特定的嵌入字段添加值,或者我必须将对象存储在列表中才能使用它们,而无需使用for循环
只是问问这里最有效最简单的方法是什么


Tags: 对象nameaddfieldfortitlevaluetrack
1条回答
网友
1楼 · 发布于 2024-06-16 18:10:43

这一切都取决于你的目标是什么——而我在写我的答案时对此并不清楚,所以请容忍我。如果您的目标是为每个排队的磁道创建一个新的嵌入字段,请存储一个对嵌入的引用,并像您一样使用.add_field()方法

刚才说,如果你想用一个排队的列表列出一个EME>字段,你可以考虑尝试这样的生成器。

embed: discord.Embed = discord.Embed().add_field(
    name="Currently Playing",
    value=f"[{player.current.title}]({player.current.uri})"
)

embed.add_field(
    name="Enqueued Tracks",
    value='\n'.join([f"[{track.title}]({track.uri})" for track in player.queue]), 
    inline=False
)

这个内联for循环所做的是创建一个格式化为[title](url)的字符串列表,用换行符(每行一个磁道)连接它们,并将它们插入到字段的值中。在与换行符连接之前,您可以预期它的外观如下所示

["[title1](url1)", "[title2](url2)", "[title3](url3)"]

如果您想更新嵌入,可以通过两种方式进行。将此代码提取到自己的方法中,并在每次需要更新时将所有曲目(包括新曲目)传递到方法中(我认为最好),或者,因为您知道这是嵌入的第二个字段,所以可以在

embed.fields[1].value = "New Value"

选择权在你,祝你好运

相关问题 更多 >