Astroreen
@Astroreen
Юный начинающий программист

Почему Discord-бот не может изменить сообщение?

У меня есть такие команды как /question; /suggestion; /bug; Все эти команды отправляют сообщения в такие же каналы, как и их название. Думаю это мы прояснили. Сами команды работают прекрасно, но у меня также существует команда /edit, как вы поняли она изменяет сообщение.

Разберём команды /question и /edit,
все команды кроме /edit создают себе ID, а я по этому айди их записываю обратно в локальный файл.

Синтаксис:
/question -q Текст
/edit ID -q Текст

Теперь сам код:

if(message.content.startsWith("/edit")) {
        deleteLastM(); 
        var tokens = message.content.split(" ");
        const MTid = tokens[1];
        if (MTid == null || MTid == undefined) return message.author.send("Будьте добры указать ID сообщения, которого вы пытаетесь изменить.");
        else if (db.get(MTid)) {
            const Msg = db.get(MTid);

            const RID = parseInt(MTid, 10);

            async function EditMessage() {
                
            let someserver = client.guilds.cache.get('686225794766209088');
            let somechannel = someserver.channels.cache.get(Msg.channelid);
            let somemessage = await somechannel.messages.fetch(Msg.realid);

           if (Msg.type == "question") {
            const Color = Msg.color;
            const questions = message.content.split("-q");

            var questionembed = new Discord.MessageEmbed()
            .setTitle("Вопрос")
            .setAuthor(Author, MyAvatar)
            .setColor(`${Color}`)
            .setFooter(`#${RID}`)
            .addFields(
             {name: "\u200B", value: `${questions[1]}`}
            )
            db.set(`${RID}`, {realid: `${Msg.realid}`, type: "question", channelid: `${Msg.channelid}`, color: `${Color}`, text: `${questions[1]}`,
            userpostid: `${Msg.userpostid}`, author: `${Msg.author}`, authoravatar: `${Msg.authoravatar}`});

            somemessage.edit(questionembed);
            message.channel.send("Изменения успешны!").then(msg => {
                msg.delete({timeout: 10000})
            });
           }

            EditMessage();
        }
        
    }


Теперь, разберём некоторые моменты:
deleteLastM() - сразу после того как команда была замечена, я удаляю сообщение автора;
MTid - после первого пробела, по синтаксису, должен идти ID сообщения;
db.get(MTid) - достаю из локального файла сообщение по айди, перед этим проверив могу ли я его достать.
RID - превращаю MTid в число, ибо оно сохранено в локальном файле как string

Также, если вас интересует вот код самой команды:
if (server = '686225794766209088' && message.content.startsWith("/question"))
    { 
        var GetLastMID = GetNewID();

        const Color = RColor();
        const text = message.content.split("-q");

        deleteLastM();
        var embed = new Discord.MessageEmbed()
           .setTitle("Вопрос")
           .setAuthor(Author, MyAvatar)
           .setColor(`${Color}`)
           .setFooter(`#${GetLastMID}`)
           .addFields(
            {name: "\u200B", value: `${text[1]}`}
           )

        message.channel.send(embed).then(msg => {
            msg.delete({timeout: 60000})
        }
        );
        client.channels.cache.find(e=>e.name == "questions")
        .send(embed).then( question =>
            db.set(`${GetLastMID}`, {realid: `${question.id}`, type: "question", channelid:`${message.channel.id}`, color: `${Color}`, text: `${text[1]}`, 
            userpostid: `${user_id}`, author: `${Author}`, authoravatar: `${MyAvatar}`})
        );

Кратко говоря, здесь я сохраняю написанное, отправляю embed в этот же канал, после чего удаляю через минуту, а также отправляю это же сообщение в канал с названием "bugs".

Главный вопрос:
Где ошибка? Почему код не работает?

Если вас интересует ошибка, то консоль пишет DiscordAPI: Unknown Message
А сам код останавливается на этом моменте:
let somemessage = await somechannel.messages.fetch(Msg.realid);


Можете указать на мою ошибку?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы