DiscordAPIError: Unknown Message (Бот для назначения ролей в сообщении)

Я делаю бота Discord, который будет назначать некоторые роли, когда пользователь отправляет определенное сообщение. Я запускаю бота, и все компилируется идеально, но после того, как я ввожу Prihvacam uslove, что означает что-то вроде «Я принимаю правила», он назначает роли и выводит меня на сервер Discord:  введите описание изображения здесь

Кроме того, кроме того, что он отправляет мне сообщение здесь, он также дает мне это в консоли:

DiscordAPIError: Unknown Message
    at RequestHandler.execute (C:\Users\dell\Desktop\FAV-verifier\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async RequestHandler.push (C:\Users\dell\Desktop\FAV-verifier\node_modules\discord.js\src\rest\RequestHandler.js:39:14)
    at async MessageManager.delete (C:\Users\dell\Desktop\FAV-verifier\node_modules\discord.js\src\managers\MessageManager.js:126:5)
DiscordAPIError: Unknown Message
    at RequestHandler.execute (C:\Users\dell\Desktop\FAV-verifier\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async RequestHandler.push (C:\Users\dell\Desktop\FAV-verifier\node_modules\discord.js\src\rest\RequestHandler.js:39:14)
    at async MessageManager.delete (C:\Users\dell\Desktop\FAV-verifier\node_modules\discord.js\src\managers\MessageManager.js:126:5)

Это мой код на данный момент:

      #!/usr/bin/env node
            
    "use strict";
        require("dotenv").config();
        

const Discord = require("discord.js");
    const chalk = require("chalk");
    const moment = require("moment");
    
const BOT_TOKEN = "HERE GOES MY BOT TOKEN"
const VERIFICATION_CHANNEL = "831101010038095912"
const VERIFIED_ROLE = "Plava"
const VERIFIED_ROLE2 = "Zuta"
const VERIFIED_ROLE3 = "Crvena"
const VERIFIED_ROLE4 = "????┃Srbija"
const client = new Discord.Client({
  disableEveryone: true
});

client.once("ready", () => {
  console.log(chalk.greenBright("[READY]"), `Logged in as ${client.user.tag} (${client.user.id}) at ${moment().format("DD MMMM YYYY, hh:mm:ss")}`);
});

client.on("message", message => {
  if (!message.guild) return;
  if (message.author.bot) return;
  if (message.content === "Prihvacam uslove" && message.channel.id === VERIFICATION_CHANNEL) {
    if (!message.channel.permissionsFor(message.guild.me).serialize().SEND_MESSAGES) return console.error("Bot nema permisiju\nPotrebno je : SEND_MESSAGES");
    if (!message.channel.permissionsFor(message.guild.me).serialize().ADD_REACTIONS) {
      console.error("The bot doesn't have the permission to add reactions.\nRequired permission: `ADD_REACTIONS`");
      message.channel.send("Bot nema permisiju da salje poruku.\nPotrebna permisija: `ADD_REACTIONS`")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (!message.channel.permissionsFor(message.guild.me).serialize().MANAGE_MESSAGES) {
      console.error("Bot nema permisiju da obrise poruku.\nRequired permission: `MANAGE_MESSAGES`");
      message.channel.send("Bot nema permisiju da obrise poruku.\nRequired permission: `MANAGE_MESSAGES`")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    const messageRole = message.guild.roles.cache.find(role => role.name === VERIFIED_ROLE)
    const messageRole2 = message.guild.roles.cache.find(role => role.name === VERIFIED_ROLE2)
    const messageRole3 = message.guild.roles.cache.find(role => role.name === VERIFIED_ROLE3)
    const messageRole4 = message.guild.roles.cache.find(role => role.name === VERIFIED_ROLE4)




    //ONO STO SE DESI KADA NIJE POSTAVLJEN
    //-------------------------------------------------------------------------------------------------------------------
    if (messageRole == null) return;
    if (!message.guild.me.hasPermission("MANAGE_ROLES")) {
      message.channel.send("Bot nema permisiju da dodjeli role.\nRequired permission: `MANAGE_ROLES`")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (message.guild.me.roles.highest.comparePositionTo(messageRole) < 1) {
      message.channel.send("Pozicija ovog rola je veća od pozicije rola bota, pa se ne moze dodijeliti od strane bota.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (messageRole.managed == true) {
      message.channel.send("Ovo je automanaged role, ne moze biti dodijeljen.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }

    //------------------------------------------------------------------------------------------------------------------------
    if (messageRole2 == null) return;
    if (!message.guild.me.hasPermission("MANAGE_ROLES")) {
      message.channel.send("Bot nema permisiju da dodjeli role.\nRequired permission: `MANAGE_ROLES`")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (message.guild.me.roles.highest.comparePositionTo(messageRole2) < 1) {
      message.channel.send("Pozicija ovog rola je veća od pozicije rola bota, pa se ne moze dodijeliti od strane bota.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (messageRole2.managed == true) {
      message.channel.send("Ovo je automanaged role, ne moze biti dodijeljen.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    //----------------------------------------------------------------------------------------------------------------------

    if (messageRole3 == null) return;
    if (!message.guild.me.hasPermission("MANAGE_ROLES")) {
      message.channel.send("Bot nema permisiju da dodjeli role.\nRequired permission: `MANAGE_ROLES`")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (message.guild.me.roles.highest.comparePositionTo(messageRole3) < 1) {
      message.channel.send("Pozicija ovog rola je veća od pozicije rola bota, pa se ne moze dodijeliti od strane bota.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (messageRole3.managed == true) {
      message.channel.send("Ovo je automanaged role, ne moze biti dodijeljen.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }

    //------------------------------------------------------------------------------------------------------------------------
    if (messageRole4 == null) return;
    if (!message.guild.me.hasPermission("MANAGE_ROLES")) {
      message.channel.send("Bot nema permisiju da dodjeli role.\nRequired permission: `MANAGE_ROLES`")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (message.guild.me.roles.highest.comparePositionTo(messageRole4) < 1) {
      message.channel.send("Pozicija ovog rola je veća od pozicije rola bota, pa se ne moze dodijeliti od strane bota.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }
    if (messageRole4.managed == true) {
      message.channel.send("Ovo je automanaged role, ne moze biti dodijeljen.")
        .then(m => m.delete({ timeout: 20000 }));
      return;
    }

    //-------------------------------------------------------------------------------------------------------------------
    //ONO STO SE DESI KAD JE POSTAVLJEN ROLE
    if (message.member.roles.cache.has(messageRole2.id)) return;
    message.react("✅");
    message.member.roles.add(messageRole2)
      .then(() => message.delete({ timeout: 5000 }))
      .catch(error => {
        console.error(error.stack);
        message.channel.send(error.stack)
          .then(m => m.delete({ timeout: 20000 }));
      });
    //----------------------------------------------------------------------------------------------------------------

    if (message.member.roles.cache.has(messageRole3.id)) return;
    message.react("✅");
    message.member.roles.add(messageRole3)
      .then(() => message.delete({ timeout: 5000 }))
      .catch(error => {
        console.error(error.stack);
        message.channel.send(error.stack)
          .then(m => m.delete({ timeout: 20000 }));
      });
    //------------------------------------------------------------------------------------------------------------------

    if (message.member.roles.cache.has(messageRole4.id)) return;
    message.react("✅");
    message.member.roles.add(messageRole4)
      .then(() => message.delete({ timeout: 5000 }))
      .catch(error => {
        console.error(error.stack);
        message.channel.send(error.stack)
          .then(m => m.delete({ timeout: 20000 }));
      });
    //-----------------------------------------------------------------------------------------------------------------


  }
});

client.login(BOT_TOKEN);

Может ли кто-нибудь помочь мне, как это решить? заранее спасибо

См. также:  Сохранение хешированного пароля в Sequelize противоречит моему простому желанию сохранить хешированный пароль

Реагирует ли бот на отправленное сообщение с помощью эмодзи ✅?   —  person Aldin    schedule 12.04.2021

@PerplexingParadox Да, это так. Он реагирует с ✅, затем удаляет мой Prihvacam uslove (что должно было произойти) и примерно через 2 секунды после этого. он распечатывает эти сообщения об ошибках.   —  person Aldin    schedule 12.04.2021

Что я также смог выяснить, так это то, что бот не назначает VERIFIED_ROLE .. В основном он не назначает эту роль Plava. (Плава означает синий)   —  person Aldin    schedule 12.04.2021

Похоже, вы могли бы попробовать исправить это, добавив в код операторы else. Потому что if условия могут казаться препятствием для этого, но на самом деле вы просто повторяете одни и те же шаги снова и снова подряд, но с разными ролями.   —  person Aldin    schedule 12.04.2021

Если только вы не планируете убедиться, что после того, как пользователь выберет ✅, он обязательно добавит все роли, которых у пользователя в настоящее время нет.   —  person Aldin    schedule 12.04.2021

Спасибо за помощь, вы действительно решили мою проблему. @PerplexingParadox   —  person Aldin    schedule 12.04.2021

Без проблем! Я добавил ответ для людей, у которых позже может возникнуть тот же вопрос, что и у вас.   —  person Aldin    schedule 12.04.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Aldin

    Для людей, ссылающихся на это в будущем: это была скорее логическая ошибка в коде.

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

    Чтобы решить эту проблему, вы можете добавить соответствующий оператор else. Пример:

    if (message.member.roles.cache.has(messageRole2.id)) {
        return;
    } else { //this part is key
        message.react("✅");
        message.member.roles.add(messageRole2)
          .then(() => message.delete({ timeout: 5000 }))
          .catch(error => {
            console.error(error.stack);
            message.channel.send(error.stack)
              .then(m => m.delete({ timeout: 20000 }));
          });
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: