Попытка отправить сообщение на несколько серверов Discord - PullRequest
0 голосов
/ 06 мая 2020

Вот мой код. Я пытаюсь отправить сообщение на несколько серверов, когда пользователь вводит команду! Sendall. Например, когда пользователь набирает! Sendall Hello, он отправляет «Hello» нескольким серверам Discord. Спасибо за помощь!

При этом выдает такую ​​ошибку

(node:14424) UnhandledPromiseRejectionWarning: ReferenceError: guild is not defined
    at Client.<anonymous> (C:\Users\16034\Desktop\Bot Monitors\bot.js:52:56)
    at Client.emit (events.js:310:20)
    at MessageCreateAction.handle (C:\Users\16034\Desktop\Bot Monitors\node_modules\discord.js\src\client\actions\MessageC
// Main
const Discord = require("discord.js");
const client = new Discord.Client();
const config = require("./config.json");

var guildList = ["707366229446492208", "704552256007307364"];

// Bootup
client.on("ready", () => {
  console.log(`Bot has started, with ${client.users.size} users, in ${client.channels.size} channels of ${client.guilds.size} guilds.`); 
  client.user.setActivity(`Serving ${client.guilds.size} servers`);
});

// Guild Logs
client.on("guildCreate", guild => {
  console.log(`New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`);
  client.user.setActivity(`Serving ${client.guilds.size} servers`);
});
client.on("guildDelete", guild => {
  console.log(`I have been removed from: ${guild.name} (id: ${guild.id})`);
  client.user.setActivity(`Serving ${client.guilds.size} servers`);
});

// Required
client.on("message", async message => {
  if(message.author.bot) return;
  if(message.content.indexOf(config.prefix) !== 0) return;
  const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
  const command = args.shift().toLowerCase();

  // Sendall
  if(command === "sendall") 
        try {
            guildList.forEach(guild => guild.defaultChannel.send("messageToSend"));
        } catch (err) {
            console.log("Could not send message to " + guild.name);
        }
});
client.login(config.token);

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

guildList - это массив строк (идентификаторов), а не сами гильдии. Сначала вам нужно получить объект гильдии.

Кроме того, вы не можете использовать try и catch так, потому что вещь, которая может бросить (guild.defaultChannel.send("messageToSend")), находится в функции forEach, так что ошибка не будет обнаружена. Вы получили ошибку из-за того, что вы попытались сослаться на guild в своем блоке catch. guild существует только в функции forEach.

Попробуйте следующее:

if(command === "sendall") 
  guildList
    .map(id => client.guilds.cache.get(id))
    .forEach(guild => guild.defaultChannel
      .send("messageToSend")
      .catch(err => console.log("Could not send message to " + guild.name))
    );
}
0 голосов
/ 06 мая 2020

Вы не можете просто использовать ID для отправки сообщения гильдии. вам нужно сначала использовать этот ID, чтобы найти гильдию.

guildList.forEach(guildID => client.guilds.get(guildID).defaultChannel.send('hello'));
...