Ошибка типа: targetchannel.send не является функцией

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

Версия узла: v16.13.1

Discord.js версия : 13.3.1

 TypeError: targetchannel.send is not a function
 

Как исправить эту ошибку?

Код:

 fs.readdir('channels', function (err, files) {
if (err) {
    return console.log('Unable to scan directory: '   err);
}
files.forEach(function (file) {
    targetchannel = client.channels.fetch(fs.readFileSync('channels/'   file,{encoding:'utf8'}))
    console.log(targetchannel)
    targetchannel.then((value) => {
            targetchannel.send("asdra")
});

});
});
 

журнал targetchannel = обещание { < ожидание > }

изображение ошибок https://i.stack.imgur.com/ixfK5.png

Комментарии:

1. Регистрируйте targetchannel, когда обещание будет выполнено, поэтому регистрируйте значение в этом случае

Ответ №1:

targetChannel все еще ожидающее обещание. Использовать value.send() вместо этого, поскольку value это разрешенное обещание

 targetchannel.then((value) => {
    value.send("asdra")
})
 

Ответ №2:

«Ошибка типа: <Канал>.send не является функцией» означает, что канал определен неправильно или не был найден.

В вашем случае вам нужно ожидать, поскольку <Channel>.fetch это асинхронный метод.

 targetchannel = await client.channels.fetch()
 

Редактировать: автор исправил это и столкнулся с другой проблемой

Комментарии:

1. Он показывает ту же ошибку

2. Запишите свой readFileSync ответ

3. Ответ readFileSync — 796993805769244725 идентификатор канала discord, но client.channels. ответ на выборку — это обещание { <ожидание> }

4. Я использовал .then, но он показывает ту же ошибку

5. Обновите свой код в своем вопросе

Ответ №3:

Исправить

Я был тупым. Бот вызвал .send перед входом в систему.

 client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
if (!fs.existsSync('channels/')) {
     fs.mkdirSync('channels');
}
fs.readdir('channels', async function (err, files) {
if (err) {
    return console.log('Unable to scan directory: '   err);
}
files.forEach(async function (file) {
    targetchannel = await client.channels.fetch(fs.readFileSync('channels/'   file,{encoding:'utf8'}))
    console.log(targetchannel)
    targetchannel.send("asdra")

});
});});