首页 > 解决方案 > Discord Bot UnhandledPromiseRejectionWarning:TypeError:generalChannel.send 不是函数

问题描述

我遇到了这个错误,但我不确定是什么原因造成的。我尝试用谷歌搜索它并修复了我之前的错误,其中 get 是一个旧函数,现在称为 fetch - 但我找不到任何设置。我也试过 npm install 和 npm update 看看是否有损坏的东西。我在这里缺少什么吗?

const {
    prefix,
    token,
} = require('./config.json');
const ytdl = require('ytdl-core');

const client = new Discord.Client();
client.login(token);

client.once('ready', () => {
    console.log('Ready!');
   });
   client.once('reconnecting', () => {
    console.log('Reconnecting!');
   });
   client.once('disconnect', () => {
    console.log('Disconnect!');
   });

client.on('ready', () => {
    var generalChannel = client.channels.fetch("2131436123767") // Replace with known channel ID
    generalChannel.send("Hello, world!")  
})```

Stack
  [1]: https://i.stack.imgur.com/Y2zOD.png

标签: discorddiscord.js

解决方案


Fetch 是一个异步函数,这意味着代码会在默认情况下继续运行而不解析

要解决此问题,请使用awaitthen

等待:

client.on("ready", async () => {
  const generalChannel = await client.channels.fetch("2131436123767");
  generalChannel.send("Hello, world!");
});

然后:

client.on("ready,", () => {
  client.channels.fetch("2131436123767")
     .then(generalChannel => generalChannel.send("Hello, world!"));
});

此外,您必须将“就绪”实例合并为一个,并且不应将另一个放在就绪事件内的事件上。


推荐阅读