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

Discord Python v2.0:如何在选择菜单中实现预选中

实现Discord Bot选择菜单启动时预选中JSON对应选项

步骤1:确认JSON数据结构

先确保你的streamplan.json结构能直接对应周一的状态,示例结构如下:

{
  "monday": "online"
}

这里monday的字段值要和选择菜单选项的value完全匹配(比如"online"、"offline"、"maybe")。

步骤2:加载JSON数据

在Bot启动阶段读取JSON文件,把状态值存储下来供后续使用:

import json
import discord
from discord.ui import Select, View

# 加载streamplan数据
try:
    with open("streamplan.json", "r", encoding="utf-8") as f:
        stream_plan = json.load(f)
except FileNotFoundError:
    # 处理文件不存在的情况,默认初始化状态
    stream_plan = {"monday": "offline"}

步骤3:创建选择菜单时设置预选中项

定义Select组件时,遍历选项并根据JSON中的状态设置default=True:

class MondaySelect(Select):
    def __init__(self):
        # 获取JSON中保存的周一状态
        monday_status = stream_plan.get("monday", "offline")
        
        # 构建选项,同时标记默认选中项
        options = [
            discord.SelectOption(label="在线", value="online", default=(monday_status == "online")),
            discord.SelectOption(label="离线", value="offline", default=(monday_status == "offline")),
            discord.SelectOption(label="可能", value="maybe", default=(monday_status == "maybe"))
        ]
        
        super().__init__(placeholder="选择周一状态...", options=options)
    
    # 可选:添加选择后的回调逻辑,更新JSON数据
    async def callback(self, interaction: discord.Interaction):
        stream_plan["monday"] = self.values[0]
        with open("streamplan.json", "w", encoding="utf-8") as f:
            json.dump(stream_plan, f, indent=2)
        await interaction.response.send_message(f"周一状态已更新为:{self.values[0]}", ephemeral=True)

步骤4:整合到Bot运行流程

在Bot启动后,将选择菜单添加到视图并发送到指定频道:

intents = discord.Intents.default()
intents.message_content = True

bot = discord.Bot(intents=intents)

@bot.event
async def on_ready():
    print(f"已登录:{bot.user}")
    # 替换为你要发送菜单的频道ID
    target_channel = bot.get_channel(1234567890)
    view = View()
    view.add_item(MondaySelect())
    await target_channel.send("设置周一直播状态:", view=view)

bot.run("你的Bot令牌")

关键注意事项

  • 确保JSON文件编码为UTF-8,避免读取时出现乱码
  • JSON中的字段值必须和菜单选项的value严格一致,否则预选中逻辑会失效
  • 选择菜单仅支持单个默认选中项,若多个选项设default=True,Discord会默认选中第一个符合条件的选项

内容的提问来源于stack exchange,提问作者Da Golem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:25:18