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

使用Autocode开发的Discord机器人无法移动语音用户问题求助

问题原因分析
  • 未定义guild对象:你使用的是Autocode封装的Discord API调用方式,没有引入discord.js原生的guild实例,直接调用guild.member()会直接抛出未定义错误,导致后续逻辑终止。
  • 未实现sleep方法:JS原生没有全局sleep函数,直接调用会触发引用错误,打断循环执行。
  • 单频道移动逻辑无效:如果目标用户本来就待在ID为789946095341535242的语音频道,重复调用设置同个频道不会产生移动效果,需要准备至少两个语音频道来回切换。
  • 权限遗漏:机器人需要拥有移动成员的权限,同时目标语音频道也要给机器人开放连接、移动成员的权限,否则API调用会被拒绝。
修复方案

替换为如下适配Autocode调用规则的代码,注意提前准备同服务器下第二个语音频道的ID,填入代码对应位置:

const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
// 实现sleep方法
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
// 两个语音频道ID,用于来回切换
const CHANNEL_A = "789946095341535242"; // 你原有的目标频道
const CHANNEL_B = "替换为第二个语音频道的ID"; // 补充同服务器下另一个语音频道ID

let isAdmin = (context.params.event.member.permissions & (1<<3)) === (1<<3);

if (isAdmin) {
  let userId = context.params.event.data.options[0].value;
  let number = context.params.event.data.options[1].value;
  // 获取当前服务器ID
  const guildId = context.params.event.guild_id;

  await lib.discord.channels['@0.1.0'].messages.create({
    channel_id: `${context.params.event.channel_id}`,
    content: `It's time to Jump for ${number} times`
  });

  for(let i = 0; i < number; i++){
    // 交替切换两个频道
    const targetChannel = i % 2 === 0 ? CHANNEL_A : CHANNEL_B;
    // 用Autocode官方API移动成员
    await lib.discord.guilds['@0.1.0'].members.voice.update({
      guild_id: guildId,
      user_id: userId,
      channel_id: targetChannel
    });
    await sleep(1000);
  }
} else {
  await lib.discord.channels['@0.1.0'].messages.create({
    channel_id: `${context.params.event.channel_id}`,
    content: `This command is admin only!`,
  });
}
额外注意事项
  • 提前确认机器人角色拥有「移动成员」权限,且两个目标语音频道都对机器人开放了对应权限
  • 如果目标用户没有加入任何语音频道,API调用会失败,可根据需求在循环前添加用户语音状态判断逻辑
  • 不要设置过大的number数值,否则容易触发Discord的API速率限制,导致机器人被临时限制调用接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:09:06