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

如何将搜索结果添加至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利巴

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:12:53