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

Discord.js编写强制Bot离开服务器命令运行报错如何解决?

问题原因
  • 你使用了Discord.js v12及以上的版本,但代码中调用的get_server()、leave_server()都是v11及更早版本的废弃API,新版本已完全移除这些方法,这是触发报错的核心原因
  • 权限判断代码存在语法错误:if (message.author.id = botowner)中使用了赋值运算符=,而非相等判断运算符===,会导致任意用户触发命令都能进入所有者权限分支,还会意外修改message.author.id的原值
  • 代码逻辑存在错位:导出的run函数第一个参数是传入的bot实例,但你操作服务器时调用了全局定义的client,如果你的命令框架是通过参数传递机器人实例的,全局client可能未完成登录绑定,无法正常获取服务器数据
修复方案

你可以直接使用以下修正后的代码:

const Discord = require('discord.js')
const client = new Discord.Client({ws: {intents: Discord.Intents.ALL}});
const botowner = 'xxx' // 替换为你的个人用户ID

exports.run = async (bot,message,args) => {
   // 严格校验触发者是否为机器人所有者
   if (message.author.id === botowner) {
      // 获取当前服务器实例,替换旧版本的get_server方法
      const targetGuild = bot.guilds.cache.get(message.guild.id)
      if (!targetGuild) return message.channel.send("无法获取当前服务器信息")
      try {
         // 直接调用服务器实例的leave方法离开,替换旧版本的leave_server方法
         await targetGuild.leave()
         message.channel.send("已成功离开当前服务器")
      } catch (err) {
         message.channel.send(`离开服务器失败:${err.message}`)
         console.error(err)
      }
   } else {
      message.channel.send("You are not the bot owner")
   }
}

exports.help = {
    name: ['leavediscordserver']
}

补充注意事项

  • 如果你使用的是Discord.js v14及以上版本,还需要调整初始化客户端的意图配置,Discord.Intents.ALL在v14版本已被移除,需要按开发需求手动声明所需的权限意图
  • 执行命令前请确认机器人在目标服务器中拥有正常的运行权限,避免因权限不足导致离开操作失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:15:03