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

Почему сообщение Дискорд бота не меняется?

Доброго времени суток, я уже как 2 день мучаюсь с кодом, и я решил обратится сюда за помощью.
Давайте немножко о боте, в нем есть уже 100% рабочие команды /bug и /edit, первая создаёт сообщение и отправляет в канал, куда другим доступ запрещён, но если кто-то сделал ошибки, нужно же как-то исправить? Для этого есть команда /edit, суть вы поняли. Хочу сказать что для работы команды /edit я сохраняю данные в локальный файл.

Я начал работать над командой /repeatto, её суть: отправить копию сообщения в другой канал. Тут и начинается интересный момент, вот вам код команды /repeatto для примерного понимания того что я делаю:
if(message.content.startsWith("/repeatto")) { 
        deleteLastM();
        if (!message.mentions.channels.first()) return message.author.send("Укажите один канал");
        if (message.mentions.channels.size == 1){
            if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.author.send("У вас недостаточно прав"), deleteLastM();
            const textrepeat = TRepeat();
            const repeatname = TRepeatName();
            var ID = GetNewID();
            const Mchannel = message.mentions.channels.first().id;
            
            var embed = new Discord.MessageEmbed()
           .setColor('#000000')
           .setFooter(`#${ID}`)
           .setTitle(`${repeatname}`)
           .addField("\u200B", `${textrepeat}`)
            
           client.channels.cache.get(Mchannel)
            .send(embed).then( repeat =>
            db.set(`${ID}`, {realid: `${repeat.id}`, type: "repeated", channelid:`${Mchannel}`, rname:`${repeatname}`, rtext: `${textrepeat}`})
            );
        }
    }


Так выглядит мой код, достаточно просто, но все же объясню: В команде первым делом идёт проверка на упомянутые каналы, если таких нет выдаётся ошибка, если есть упомянутый канал, я получаю его ID и сохраняю вместе с сообщением, после чего отправка.

Наконец наступила очередь самой ошибки. Конечно же я сделал так чтоб текст можно было изменять, тут где-то и заключается моя ошибка:
if(server = '686225794766209088' && 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.has(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 == "repeated"){

            const ETrepeatname = Msg.rname
            const ETrepeat = Msg.rtext

            Erepeatname = function() {
                if (message.content.includes("-n")) return TRepeatName()
                else return ETrepeatname 
            }
            Erepeattext = function() {
                if (message.content.includes("-r")) return TRepeat() 
                else return ETrepeat
            }

            const dbErepeatname = Erepeatname();
            const dbErepeat = Erepeattext();

            var repeatedembed = new Discord.MessageEmbed()
           .setColor('#000000')
           .setFooter(`#${RID}`)
           .setTitle(`${dbErepeatname}`)
           .addField("\u200B", `${dbErepeat}`)
           db.set(`${RID}`, {realid: `${Msg.realid}`, type: "repeated", channelid:`${Msg.chennelid}`, rname: `${dbErepeatname}`, rtext: `${dbErepeat}`});
           somemessage.edit(repeatedembed);
           message.channel.send("Изменения успешны!").then(msg => {
            msg.delete({timeout: 10000})
            });
           }
            }
            EditMessage();
        }        
    }


Давайте немножко расскажу в чем ошибка. Прописывая команду /repeatto в первый раз все происходит как надо, если я что то хочу изменить, я пишу команду /edit , все тоже проходит гладко, но как только я повторяю команду /edit, здесь есть два варианта событий:

Выходит ошибка здесь:
let someserver = client.guilds.cache.get('686225794766209088');
let somechannel = someserver.channels.cache.get(Msg.channelid);
let somemessage = await somechannel.messages.fetch(Msg.realid); 
// < TypeError: Cannot read property 'messages' of undefined


А так же есть исход где упоминается Discord API error.

Можете указать на мои ошибки в коде?
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
Astroreen
@Astroreen Автор вопроса
Юный начинающий программист
Таки я нашёл ответ, я не правильно сохранял канал.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы