Discord.js开发unban命令出现'return' outside of function错误如何解决
错误原因
return语句仅允许在函数内部使用,你当前写的unban命令处理代码直接放在了全局作用域,没有包裹在Discord消息事件的回调函数中,才会触发这个语法错误。- 额外注意:你代码里用到的
msg、command、args三个变量,也需要在消息事件回调里定义生成,否则运行时还会报变量未定义的错误。
解决方法
把你写的这段unban命令逻辑,完整放到消息事件的回调函数内部即可,参考完整示例(适配你当前用的Discord.js v12版本语法):
// 引入Discord.js、初始化客户端逻辑省略 const Discord = require('discord.js'); const client = new Discord.Client(); const prefix = ":"; client.on("message", (msg) => { // 忽略机器人自身发送的消息 if (msg.author.bot) return; // 非指定前缀开头的消息直接跳过 if (!msg.content.startsWith(prefix)) return; // 拆分生成command和args变量 const args = msg.content.slice(prefix.length).trim().split(/ +/); const command = args.shift().toLowerCase(); // 你的unban命令逻辑放在此处即可解决报错 if (command === "unban") { if (!msg.member.hasPermission("BAN_MEMBERS")) { return msg.channel.send(`**${msg.author.username}**, You do not have perms to unban someone`); } if (!msg.guild.me.hasPermission("BAN_MEMBERS")) { return msg.channel.send(`**${msg.author.username}**, I do not have perms to unban someone`); } let userID = args[0] if (!userID) { return msg.channel.send(`**${msg.author.username}**, 请输入要解封的用户ID`); } msg.guild.fetchBans().then(bans=> { if (bans.size == 0) return msg.channel.send("当前服务器没有被封禁的用户"); let bUser = bans.find(b => b.user.id == userID); if (!bUser) return msg.channel.send("该用户未被封禁"); msg.guild.members.unban(bUser.user).then(() => { msg.channel.send(`已成功解封用户 ${bUser.user.tag}`); }).catch(err => { msg.channel.send("解封失败,请检查权限是否正常、用户ID是否正确"); }); }); } }); client.login("你的机器人Token");
额外优化说明
示例中补充了用户ID为空、无封禁用户、目标用户未被封禁的提示,同时给解封操作添加了错误捕获逻辑,避免异常情况导致机器人无响应或崩溃。
内容的提问来源于stack exchange,提问作者isteqsnip gaming
相关产品推荐
相关产品推荐

