Я потратил 3 часа на создание и настройку веб-парсера Node.js и более 4 часов, пытаясь найти чертовски способ транслировать сообщение на канал в Discord. Я потерял всякую надежду в это время ...
Это код, который у меня есть, и некоторые его части работают, например, ответ на сообщение. Но я не могу найти никакого способа просто отправить сообщение без того, чтобы это сообщение было ответом.
const discord = require('discord.js');
const bot = new discord.Client();
const cfg = require('./config.json')
bot.on('ready', () => {//this works
console.info(`Logged in as ${bot.user.tag}(${bot.user.id}) on ${bot.guilds.size} servers`)
});
bot.on('message', (msg) => {
switch (msg.content) {
case '/epicinfo':
msg.channel.send('w00t'); //this works
}
});
console.info(bot.users.get("id", "504658757419270144")) //undefined
console.info(bot.channels.get("name", "testbot")) //undefined
console.info(bot.users.find("id", "504658757419270144")) //undefined
console.info(bot.channels.find("name", "testbot")) //undefined
console.info(bot.guilds.get("504658757419270144")); //undefined
console.info(bot.channels.get(504658757419270144)) //undefined
bot.send((discord.Object(id = '504658757419270144'), 'Hello')) //discord.Object is not a function
bot.login(cfg.token);



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это может быть вызвано тем, что вы запускаете свой код до того, как бот вошел в систему.
Каждое действие должно быть выполнено после того, как бот выпустил событие готовности, единственное, что вы можете сделать за пределами события ready, - это определить другие прослушиватели событий.
Попробуйте поместить эту часть кода в прослушиватель событий ready или в функцию, вызываемую этим событием:
client.on('ready', () => {
console.info("Your stuff...");
});
// OR
function partA () {...}
function partB () {...}
client.on('ready', () => {
partA();
console.info("Your stuff...");
partB();
});
// OR
function load() {...}
client.on('ready', load);
В вашей ситуации:
client.on('ready', () => { // once the client is ready...
let guild = client.guilds.get('guild id here'); // ...get the guild.
if (!guild) throw new Error("The guild does not exist."); // if the guild doesn't exist, exit.
let channel = guild.channels.get('channel id here'); // if it does, get the channel
if (!channel) throw new Error("That channel does not exist in this guild."); // if it doesn't exist, exit.
channel.send("Your message here.") // if it does, send the message.
});
client.login('your token here')
Вне события готовности поместите function load() { paste your console.info()s here }, затем в событии готовности добавьте load() на новой строке.
Я отредактировал свой пост, надеюсь, он станет понятнее. @lieuwe_berg хорошо объяснил, что я имел в виду с этими функциями
Пытаться:
bot.channels.find(channel => channel.id === '504658757419270144').send('Your-message');
также, если канал, на который вы пытаетесь отправить сообщение, находится в гильдии ботов, вы можете использовать:
bot.on('message' (msg) => {
msg.guild.channels.find(channel => channel.name === 'your-channel-name').send('your-message');
});
Я понимаю ваши «подсказки» и пробовал их безуспешно, поэтому, если вы могли бы опубликовать пример с правильным синтаксисом, я был бы признателен. Это должно быть так же просто, как ответить на сообщение.