Как заставить бота покинуть сервер с идентификатором гильдии

#discord.js

#discord.js

Вопрос:

Я хочу, чтобы мой бот покинул сервер discord, используя ;leave <GuildID> .

Приведенный ниже код не работает:

 if (message.guild.id.size < 1)
  return message.reply("You must supply a Guild ID");
if (!message.author.id == 740603220279164939)
  return;

message.guild.leave()
  .then(g => console.log(`I left ${g}`))
  .catch(console.error);
 

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

1. Какие ошибки вы получаете?

2. Хотя это не решит вашу проблему, я просто хотел упомянуть, что !message.author.id == 740603220279164939 это всегда будет возвращаться false при преобразовании message.author.id в логическое значение с помощью ! оператора.

Ответ №1:

Скорее всего, вы не должны смотреть на message.guild.id него, так как это возвращает идентификатор гильдии, в которую вы отправляете сообщение. Если вы хотите получить идентификатор гильдии ;leave (guild id) , вам придется вырезать вторую часть , используя что — то вроде .split() .

 // When split, the result is [";leave", "guild-id"]. You can access the
// guild ID with [1] (the second item in the array).
var targetGuild = message.content.split(" ")[1];
 

!message.author.id преобразует идентификатор автора (в данном случае ваш идентификатор бота) в логическое значение, которое приводит к false (поскольку идентификатор установлен и не является ложным значением). Я предполагаю, что вы хотите запустить это, только если его автором не является сам бот, и в этом случае вы, скорее всего, стремитесь к этому:

 // You're supposed to use strings for snowflakes. Don't use numbers.
if (message.author.id == "740603220279164939") return;
 

А теперь вам просто нужно использовать идентификатор гильдии, который вы получили из содержимого сообщения, и использовать его, чтобы покинуть гильдию. Чтобы сделать это, просто возьмите Guild его из кэша вашего бота, а затем вызовите .leave() . В целом, теперь ваш код должен выглядеть следующим образом:

 // Get the guild ID
var targetGuild = message.content.split(" ")[1];
if (!targetGuild) // targetGuild is undefined if an ID was not supplied
    return message.reply("You must supply a Guild ID");

if (message.author.id == "740603220279164939") // Don't listen to self.
    return;

client.guilds.cache.get(targetGuild) // Grab the guild
    .leave() // Leave
    .then(g => console.log(`I left ${g}`)) // Give confirmation after leaving
    .catch(console.error);
 

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

1. Отлично, но когда я набираю;leave <идентификатор гильдии>, мой бот ничего не делает.. Ошибок в консоли тоже нет.. Я скопировал идентификатор гильдии, который я попробовал ввести, отправил;leave (id), И мой бот не ушел..

2. @Axmyo Уверен, что ваши проверки команд работают правильно? Я определенно уверен, что все вышесказанное работает. Попробуйте проверить, правильно ли вы маршрутизируете свои команды.

3. на самом деле это не работает, я не знаю почему.. Когда я указываю идентификатор гильдии, он ничего не делает ( imgur.com/a/hsFPFSL ), и бот остается в гильдии, которая «упомянута» в;leave ( imgur.com/a/5x8uoOF )

4. @Axmyo Я случайно сделал неверное предположение о вашем коде, поскольку в исходном вопросе не хватало контекста. Теперь я отредактировал свое решение. Попробуйте отредактированную версию сейчас и не стесняйтесь сообщать мне, если она все еще не работает.