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
相关产品推荐
相关产品推荐

