如何将搜索结果添加至Discord音乐机器人的Select菜单选项?
解决Discord音乐机器人Select菜单添加搜索结果的问题
你的代码存在几个关键问题,导致搜索结果无法正确加载到Select菜单里,下面是修正后的代码和说明:
问题点与修正说明
- 错误用
discord.ui.select包裹SelectOption,应该直接实例化SelectOption对象 - 定义select组件时没有传入生成的选项列表
- 回调里的
select.Values[0]是拼写错误,应为小写的select.values[0] - 未给选项设置有效
value,后续无法关联到对应的歌曲资源
修正后的完整代码
class MyView(discord.ui.View): def __init__(self, search_results, update): super().__init__() self.update = update # 用于更新队列中的歌曲URL self.search_results = search_results # 生成Select菜单选项:label显示截断后的标题(加序号区分),value存歌曲URL options = [] for idx, result in enumerate(search_results): truncated_title = result['title'][:20] options.append(discord.SelectOption( label=f"{idx+1}. {truncated_title}", value=result['url'] # 存储实际需要的歌曲URL,方便后续调用 )) # 找到视图中的Select组件,将生成的选项赋值给它 for child in self.children: if isinstance(child, discord.ui.Select): child.options = options @discord.ui.select( placeholder="选择你想听的歌曲", min_values=1, max_values=1 ) async def select_callback(self, select, interaction): selected_url = select.values[0] self.update(selected_url) # 将选中的歌曲URL更新到播放队列 # 匹配选中歌曲的完整标题,给用户发送反馈 selected_song = next(r for r in self.search_results if r['url'] == selected_url) await interaction.response.send_message(f"你选择了:{selected_song['title']}")
使用说明
当你拿到搜索结果(比如从音乐源返回的包含title和url的字典列表),直接把这个列表传给MyView的search_results参数即可,Select菜单会自动加载所有选项。
内容的提问来源于stack exchange,提问作者zaber8787利巴
相关产品推荐
相关产品推荐

