【问题标题】:Discord API v13 Error: ReferenceError: message is not definedDiscord API v13 错误:ReferenceError:消息未定义
【发布时间】:2022-01-05 22:24:32
【问题描述】:

我正在执行清除命令删除所有通道并最终遇到错误:

C:\Users\zaned\Desktop\bot\main.js:13
    message.guild.channels.forEach(channel => channel.delete())
    ^

ReferenceError: message is not defined
    at Client.<anonymous> (C:\Users\zaned\Desktop\bot\main.js:13:5)
    at Client.emit (node:events:390:28)
    at MessageCreateAction.handle (C:\Users\zaned\node_modules\discord.js\src\client\actions\MessageCreate.js:25:14)
    at Object.module.exports [as MESSAGE_CREATE] (C:\Users\zaned\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (C:\Users\zaned\node_modules\discord.js\src\client\websocket\WebSocketManager.js:350:31)
    at WebSocketShard.onPacket (C:\Users\zaned\node_modules\discord.js\src\client\websocket\WebSocketShard.js:443:22)
    at WebSocketShard.onMessage (C:\Users\zaned\node_modules\discord.js\src\client\websocket\WebSocketShard.js:300:10)
    at WebSocket.onMessage (C:\Users\zaned\node_modules\ws\lib\event-target.js:199:18)
    at WebSocket.emit (node:events:390:28)
    at Receiver.receiverOnMessage (C:\Users\zaned\node_modules\ws\lib\websocket.js:1022:20)

这是我的代码:

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") {
    message.guild.channels.forEach(channel => channel.delete())
    msg.reply("Deleting all channels...");
  }
})

有人可以帮我解决这个问题吗?

【问题讨论】:

  • (msg) =&gt; 表示你的消息对象被命名为msg,你已经在使用msg.reply()

标签: javascript node.js discord discord.js


【解决方案1】:

这很容易限制您的机器人速率,并且很危险地接近成为“核弹”机器人,在某些情况下可能被视为 API 滥用并让您的 Discord 帐户和机器人被禁止。

在您的事件回调中,消息变量被定义为msg 而不是message。编辑您的代码以反映这一点。

除此之外,GuildChannelManager 类没有 #forEach 函数,为此您需要缓存频道。

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...");
  }
})

另一个潜在的未来错误是:如果您删除了每个频道,机器人将如何回复最后一行的消息?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2020-02-20
    • 1970-01-01
    • 2020-11-02
    • 2020-02-22
    • 2021-06-03
    • 2013-10-12
    相关资源
    最近更新 更多