【问题标题】:What is the reason for giving this error: cannot read property 'send' of undefined给出此错误的原因是什么:无法读取未定义的属性“发送”
【发布时间】:2021-03-05 14:20:28
【问题描述】:

我不明白出了什么问题。

注意:我是初学者。

我没有任何回报client.channels.get

我的代码:

const client = new Discord.Client();

module.exports.run = async (bot, message, args) => {

message.delete().catch(O_o => {});
message.channel.send(`Olá <@&702918917588385858>`)

}

client.channels.get("780108435940835378").send(); 

【问题讨论】:

  • 小挑剔,绝对超出了你所说的问题的范围,但我坚信message.delete().catch(O_o =&gt; {}); 是一种糟糕的做法——你真的应该正确地捕捉和处理你的异常。跨度>
  • 试试client.channels.cache.get而不是client.channels.get -- stackoverflow.com/a/60667394/600135
  • 一些澄清问题,更多的是您最初的询问:(1)您能否具体分享您在哪一行遇到您发布的错误?您对send() 有两个不同的调用。 (2) 您使用的是哪个版本的 Discord.JS?最新版本对client.channels 的返回方式进行了一些非常大的更改。 (3) 您是否实际登录了您的客户?除非我在这里遗漏了什么,否则看不到检索频道列表所需的此功能。
  • 这能回答你的问题吗? Cannot read property 'send' of underfined
  • @kol Eu tentei e apareceu:无法读取未定义的属性“get”

标签: javascript node.js discord.js


【解决方案1】:

这意味着channelundefined。看起来您希望 message 是一个包含名为 channel 的属性的对象,但显然情况并非如此。

【讨论】:

  • 我没明白你的意思
【解决方案2】:

在没有任何上下文的情况下很难回答这个问题,但我在这里只能说,您正试图在未定义的对象上调用 send 方法。

你确定client.channels.get("780108435940835378") 会返回一些东西吗?

【讨论】:

  • 是的。我的代码的目的是让我输入一个命令,它会向一个频道发送一条消息
  • 值得注意的是,Discord.JS 对此方法签名的支持已在 v12 中删除 - client.channels 现在不再是 Collection 对象,而是被新的 ChannelManager 对象取代,它有一个完全不同的原型。
  • @LuizFilipe 太好了,但是你能详细说明一下如何你知道client.channels.get()正在返回一些东西吗?
  • 我不用v12,我用v11
  • 我是巴西人,所以有时我不太了解您,但是,没有任何返回
【解决方案3】:

client.channels 是 ChannelManager,而不是 Collection。频道位于 client.channels.cache。也许首先使用 client.channels.fetch() 以确保它们被缓存。 https://discord.js.org/#/docs/main/stable/class/ChannelManager

client.channels.cache 一个Collection,并且有一个方法get()https://discord.js.org/#/docs/collection/master/class/Collection

【讨论】:

  • 因为我是巴西人,因为我没有经验,英文也不太懂,请你能理解一点吗?
【解决方案4】:

您好,欢迎来到 Stack Overflow。如果您真的介意被葡萄牙语回复,您可以随时使用Portuguese Stack Overflow,尽管回复时间可能会有所不同。

无论如何,您的代码存在两个主要问题。首先,您正在此命令文件中创建另一个 Discord 客户端实例,该实例与您的机器人在主/索引文件中运行的不同(您使用的那个文件 client.login(token)you could get a better explanation here)和其次,你的发送命令在run功能块之外,它应该在里面。

为了解决这个问题,如果你的 run 函数中的 message 参数是一个 Message 对象,你可以从 message 对象中的 client 属性中获取客户端。所以你的命令可能看起来像这样:

module.exports.run = function(bot, message, args) {
  const client = message.client;
  // The channel you want to send the message in.
  // If it always the one in which the message was
  // sent you could use message.channel
  const channel == client.channels.get('YOUR_CHANNEL_ID_HERE');

  message.delete();
  message.channel.send(`Olá, ${message.user.toString()}!`);
  channel.send('Anything you want / Qualquer coisa.');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2019-03-20
    • 2021-02-22
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多