Как отправить сообщение на канал

Я потратил 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);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
106
2

Ответы 2

Это может быть вызвано тем, что вы запускаете свой код до того, как бот вошел в систему. Каждое действие должно быть выполнено после того, как бот выпустил событие готовности, единственное, что вы можете сделать за пределами события 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')

Я понимаю ваши «подсказки» и пробовал их безуспешно, поэтому, если вы могли бы опубликовать пример с правильным синтаксисом, я был бы признателен. Это должно быть так же просто, как ответить на сообщение.

Cristian Muscalu 25.10.2018 08:04

Вне события готовности поместите function load() { paste your console.info()s here }, затем в событии готовности добавьте load() на новой строке.

lieuwe_berg 25.10.2018 11:09

Я отредактировал свой пост, надеюсь, он станет понятнее. @lieuwe_berg хорошо объяснил, что я имел в виду с этими функциями

Federico Grandi 25.10.2018 16:39

Пытаться:

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');
});

Другие вопросы по теме