Discord API v13 开发purge清除频道命令时报ReferenceError: message未定义
错误原因
- 核心错误是变量名不匹配:你在
messageCreate事件的回调函数中,将接收的消息对象命名为msg,但在!purgec的判断逻辑里直接使用了未声明的message变量,触发ReferenceError变量未定义报错。 - 额外兼容问题:discord.js v13及以上版本中,
guild.channels是频道管理器,不能直接遍历,需要先获取cache属性拿到频道集合才能正常遍历执行删除操作。
修复方案
代码修改点
将message.guild.channels.forEach替换为msg.guild.channels.cache.forEach即可。
完整修复后代码
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] }); client.on("ready", () => { console.log(`Logged in as ${client.user.tag}!`) }) client.on("messageCreate", (msg) => { if (msg.content === "!test") { msg.reply("Hello world!"); } if (msg.content === "!purgec") { msg.guild.channels.cache.forEach(channel => channel.delete()) msg.reply("Deleting all channels..."); } })
额外注意事项
- 运行该命令需要机器人账号拥有对应服务器的
管理频道权限,否则会触发权限不足报错。 - 频道删除操作不可恢复,建议仅在私用测试服务器调试该功能。
内容的提问来源于stack exchange,提问作者Zachyr Edith
相关产品推荐
相关产品推荐

