Discord.py结合Lavalink开发音乐bot时如何向单个Embed字段批量增加值
解决方案
你原来的写法每次遍历队列曲目都会调用一次add_field,自然会生成多个重名的「Enqueued Tracks」字段。你不需要为每首曲目单独新增字段,也不需要额外把曲目存到新列表里,直接把所有队列曲目的展示内容拼接为同一个字符串,再一次性赋值给字段即可,这是最简便高效的实现方式。
代码示例
# 添加当前播放曲目字段 embed.add_field(name="Currently playing",value=f"[{player.current.title}]({player.current.uri})") if player.queue: # 用生成器表达式直接迭代队列,拼接为换行分隔的内容 enqueued_tracks = "\n".join(f"[{track.title}]({track.uri})" for track in player.queue) embed.add_field(name="Enqueued Tracks", value=enqueued_tracks, inline=False) else: # 队列为空时可自定义提示内容,也可以选择不添加该字段 embed.add_field(name="Enqueued Tracks", value="暂无待播放曲目", inline=False)
补充说明
- 如果队列曲目较多,拼接后的内容超过Discord Embed单字段1024字符上限,可以做截断处理,比如仅展示前10首,末尾补充
... 还有X首待播放的提示 - 直接迭代
player.queue拼接内容的写法不会产生额外的内存开销,不需要提前把曲目信息存到独立列表中
内容的提问来源于stack exchange,提问作者SBECK1
相关产品推荐
相关产品推荐

