Javascript Can';尝试在discord.js中获取频道时,无法读取未定义的属性

Javascript Can';尝试在discord.js中获取频道时,无法读取未定义的属性,javascript,discord,discord.js,Javascript,Discord,Discord.js,我正在尝试使用discord.js向特定频道发送消息: const Discord=require(“Discord.js”); const client=new Discord.client(); client.login(process.env.DISCORD_令牌); const channel=client.channels.cache.get(“831148754181816351”); 频道发送(“工作”); 错误消息: home/fahd/Desktop/Dev/Discord

我正在尝试使用discord.js向特定频道发送消息:


const Discord=require(“Discord.js”);
const client=new Discord.client();
client.login(process.env.DISCORD_令牌);
const channel=client.channels.cache.get(“831148754181816351”);
频道发送(“工作”);
错误消息:

home/fahd/Desktop/Dev/DiscordBot/main.js:7
channel.send("working");
        ^

TypeError: Cannot read property 'send' of undefined
    at Object.<anonymous> (/home/fahd/Desktop/Dev/DiscordBot/main.js:7:9)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

home/fahd/Desktop/Dev/DiscordBot/main.js:7
频道发送(“工作”);
^
TypeError:无法读取未定义的属性“send”
反对。(/home/fahd/Desktop/Dev/DiscordBot/main.js:7:9)
at模块编译(内部/modules/cjs/loader.js:999:30)
在Object.Module._extensions..js(internal/modules/cjs/loader.js:1027:10)
在Module.load(内部/modules/cjs/loader.js:863:32)
at Function.Module._load(内部/modules/cjs/loader.js:708:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:60:12)
在internal/main/run_main_module.js:17:47
我尝试使用将client.login()的位置更改为文件的结尾。
我尝试使用
channels.cache.find(c=>c.id==“831148754181816351”),但它仍然不起作用。

似乎你没有得到你想要的频道。尝试使用
.fetch()
方法。由于它返回一个
承诺
,因此您还需要等待它

然后应该是这样的:

const channelID = '831148754181816351';
const targetChannel = await message.client.channels.fetch(channelID);

// work with 'targetChannel'

似乎你没有得到你想要的频道。尝试使用
.fetch()
方法。由于它返回一个
承诺
,因此您还需要等待它

然后应该是这样的:

const channelID = '831148754181816351';
const targetChannel = await message.client.channels.fetch(channelID);

// work with 'targetChannel'

我按原样测试了您的代码,这意味着它试图检索的
channels
集合为空

相反,您需要做的是将其放入客户机事件侦听器中。从中,我了解到,在bot能够登录之前,编译器总是首先在客户端eventemitter之外运行代码。最方便的选项(因为您似乎希望在bot打开时自动触发此选项)是使用
ready
事件侦听器

示例代码:

const Discord=require(“Discord.js”);
const client=new Discord.client();
require('dotenv').config();
client.on('ready',()=>{
const channelID='831148754181816351';//这是您的channelID
const channel=client.channels.cache.get(channelID);
channel.send('working');//这个有效:)
});
client.login(process.env.DISCORD_令牌);

我按原样测试了您的代码,这意味着它试图检索的
频道
集合为空

相反,您需要做的是将其放入客户机事件侦听器中。从中,我了解到,在bot能够登录之前,编译器总是首先在客户端eventemitter之外运行代码。最方便的选项(因为您似乎希望在bot打开时自动触发此选项)是使用
ready
事件侦听器

示例代码:

const Discord=require(“Discord.js”);
const client=new Discord.client();
require('dotenv').config();
client.on('ready',()=>{
const channelID='831148754181816351';//这是您的channelID
const channel=client.channels.cache.get(channelID);
channel.send('working');//这个有效:)
});
client.login(process.env.DISCORD_令牌);

它解决了它!!非常感谢:)是的,没问题。@对不起!我拒绝了你对这个问题提出的重新标记编辑,因为这个问题显然是关于Javascript库
discord.js
及其正确用法,而不是
discord
作为API本身(请参见这里的标记说明和区别说明)。不管怎样,那很好。谢谢你让我知道!我经常看到[discord.js]与[discord]标记配对,所以我把它放在那里。它解决了它!!非常感谢:)是的,没问题。@对不起!我拒绝了你对这个问题提出的重新标记编辑,因为这个问题显然是关于Javascript库
discord.js
及其正确用法,而不是
discord
作为API本身(请参见这里的标记说明和区别说明)。不管怎样,那很好。谢谢你让我知道!我经常看到[discord.js]与[discord]标记成对出现,所以我把它放在那里。