【问题标题】:Getting Error: "TypeError: Cannot read property 'channels' of undefined"出现错误:“TypeError:无法读取未定义的属性‘通道’”
【发布时间】:2021-11-17 05:23:39
【问题描述】:

这是我的代码:

module.exports = {
    name: 'suggestions',
    aliases: ['suggest'],
    execute(message, args, cmd, client, discord) {
        let channel = message.guild.channel.cache.find(ch=>ch.id==='890313569260937247')
        if(!channel) return message.channel.send({ content: 'There is no suggestion channel on this Server!' });

        let messageArgs = args.join(' ')
        const embed = new Discord.MessageEmbed()
        .setColor('#008000')
        .setAuthor(message.author.tag)
        .setDescription(messageArgs)
        .setTitle(`${message.author.tag} has a suggestion!!`)

        message.channel.send({ embeds: [embed] })
    }
}

我基本上是用我的命令处理程序创建一个命令,执行一个建议命令,用户的参数将在 MessageEmbed 中发送。

如果我运行实际的命令,就会出现这个错误:

TypeError: Cannot read property 'channel' of undefined
    at Object.execute (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\commands\suggestions.js:5:37)
    at module.exports (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\events\guild\message.js:11:25)
    at Client.emit (node:events:394:28)
    at MessageCreateAction.handle (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\node_modules\discord.js\src\client\actions\MessageCreate.js:31:18)
    at Object.module.exports [as MESSAGE_CREATE] (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\node_modules\discord.js\src\client\websocket\WebSocketManager.js:345:31)
    at WebSocketShard.onPacket (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\node_modules\discord.js\src\client\websocket\WebSocketShard.js:443:22)
    at WebSocketShard.onMessage (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\node_modules\discord.js\src\client\websocket\WebSocketShard.js:300:10)
    at WebSocket.onMessage (D:\Programming\Workspaces\Discord Bots\Mita Bot v1\node_modules\discord.js\node_modules\ws\lib\event-target.js:132:16)
    at WebSocket.emit (node:events:394:28)

【问题讨论】:

  • guildMessage 的可选属性:The guild the message was sent in (if in a guild channel) 所以这表明您正在登录的消息不是在公会频道中发送的。

标签: javascript node.js discord.js


【解决方案1】:

作为t.niese said in their commentMessage#guild 可以是null。如果是message.guild === null,则表示该消息是在 DM 中发送的。

首先检查消息是否在公会中发送:

if (!message.guild)
  return message.channel.send('This command can only be used in a server!')

const channel = message.guild.channels.get('890313569260937247')
if (!channel)
  return message.channel.send('There is no suggestion channel on this Server!')

其他几点:

  • Guild 上没有 channel 属性;请改用channels
  • 您可以使用Collection#get通过其ID获取频道(无需使用.find(c => c.id === someId)
  • 您可以直接在send 中使用字符串:channel.send('the message') 而不是channel.send({ content: 'the message' })

【讨论】:

    【解决方案2】:

    'channel' 不是 Guild 类的属性,您可能指的是 Guild#channels,它返回 GuildChannelManager 的必要类型。

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 2021-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      • 2023-02-26
      • 2021-08-02
      相关资源
      最近更新 更多