#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")
});
});});