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

如何为Discord.js机器人实现超25个车辆选项的自动补全

解决Discord.js Slash命令Choice选项数量限制的动态搜索方案

核心解决方案

Discord原生静态Choice选项上限是25个,要支持290+车辆的动态匹配,必须改用Autocomplete自动补全功能——它会在用户输入时实时触发后端逻辑,返回匹配的选项,完美绕过数量限制。

具体实现步骤

1. 重构命令定义:替换静态Choice为Autocomplete

先移除原代码里的静态addChoices配置,启用Autocomplete开关,并添加对应的处理逻辑。

原静态Choice写法(问题示例)

const { SlashCommandBuilder } = require('discord.js');

// 290+车辆数据
const allVehicles = [
  { name: "Model 3", value: "model3" },
  { name: "Model Y", value: "modely" },
  // ... 其他车辆
];

module.exports = {
  data: new SlashCommandBuilder()
    .setName('add-car')
    .setDescription('添加车辆信息到数据库')
    .addStringOption(option =>
      option.setName('vehicle')
        .setDescription('选择车辆')
        .setRequired(true)
        .addChoices(...allVehicles.map(car => ({ name: car.name, value: car.value })))
    ),
  async execute(interaction) {
    // 存入数据库逻辑
  }
};

修改后的Autocomplete实现

const { SlashCommandBuilder } = require('discord.js');

module.exports = {
  data: new SlashCommandBuilder()
    .setName('add-car')
    .setDescription('添加车辆信息到数据库')
    .addStringOption(option =>
      option.setName('vehicle')
        .setDescription('输入车辆名称搜索')
        .setRequired(true)
        .setAutocomplete(true) // 关键:开启自动补全
    ),

  // 自动补全处理逻辑
  async autocomplete(interaction) {
    const userInput = interaction.options.getFocused().toLowerCase();
    // 从数据库/全局数组获取全部车辆数据(替换成你的实际数据获取方式)
    const allVehicles = await yourDatabase.query('SELECT name, id FROM vehicles');
    
    // 过滤匹配项,最多返回25个
    const matchedVehicles = allVehicles
      .filter(car => car.name.toLowerCase().includes(userInput))
      .slice(0, 25)
      .map(car => ({ name: car.name, value: car.id.toString() }));

    // 返回匹配结果给Discord
    await interaction.respond(matchedVehicles);
  },

  // 原命令执行逻辑保留
  async execute(interaction) {
    const selectedVehicleId = interaction.options.getString('vehicle');
    // 后续存入车辆、颜色、车牌到数据库的逻辑
  }
};

2. 关键优化点

  • 匹配规则调整:如果想要更精准的匹配,可以把includes改成startsWith,只匹配以用户输入开头的车辆名称。
  • 数据库查询优化:如果车辆数据存在数据库,直接在SQL里做模糊查询(比如WHERE name LIKE ?),比把全量数据拉到内存过滤更高效。
  • 响应时效:Discord要求Autocomplete必须在3秒内响应,确保数据查询/过滤逻辑足够快,避免超时。

排查问题的常见要点

如果修改后仍不生效,检查这几点:

  • 命令是否重新部署同步到Discord了?修改命令定义后必须重新执行部署脚本。
  • 你的Discord.js版本是否是v14及以上?Autocomplete功能仅在v14+支持。
  • 过滤逻辑是否正确?比如是否不小心写死了返回25个固定选项,而非动态匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:55:10