Проблема с редактированием вставки с использованием Discord. js - PullRequest
0 голосов
/ 27 марта 2020

Я недавно пробовал себя на диссон-ботах, и теперь я столкнулся с проблемой, пытаясь редактировать вставку. Я делаю команду опроса, которая заканчивается через определенное время, таймер работает отлично, однако редактирование - нет. Вывод ошибки «Неизвестное сообщение», однако сообщение должно быть определено?

Код:

client.on('message', message =>{

    let allArgs = message.content.split(" ");

    // Splits commands into arguments
    let args = message.content.substring(config.prefix.length).split(" ");
    allArgs = allArgs.map(function(x){ return x.toLowerCase() });

    // All commands
    switch(args[0]){
        case 'help':
            message.channel.send(helpEmbed)
        break;

        case 'poll':
            if(args.length < 8) {
                message.channel.send(pollUsage);
                message.delete();
            }
            else {
                pollMsg = message.content.slice(6,message.length);
                var pollArgs = pollMsg.split("/"); // Splits arguments by "/"

                if(pollArgs.length > 11) {
                    message.channel.send(pollUsage);
                    message.delete();
                }
                else {

                var timeArgs = pollArgs[1].split(":");
                console.log(timeArgs);

                if(timeArgs.length > 4) {
                    message.channel.send(pollUsage);
                    message.delete();
                }
                else {

                    var pollEmbed = new Discord.MessageEmbed()
                        .setColor(pink)
                        .setTitle('POLL')
                        .setAuthor('IdealBot', 'https://hypixel.net/attachments/ideal-png.1417277/', 'https://hypixel.net/threads/ideal-ideal-%E2%9D%96-level-52-%E2%9D%96-sweaty-skyblock-guild-%E2%9D%96-top-10-sb-guild-%E2%9D%96-splashes-%E2%9D%96-events-%E2%9D%96-recruiting.2500755/')
                        .addFields(
                            { name: 'Question', value: pollArgs[0] },
                            { name: '\u200B', value: '\u200B' },
                        )
                        .setTimestamp()
                        .setFooter('Time left: ' + pollArgs[1]);
                    for(i=2;i<pollArgs.length;i++) {
                        pollEmbed.addFields({ name: 'Option '+pollReact[i-2], value: pollArgs[i], inline: true });
                    }
                    pollEmbed.addFields({ name: '\u200B', value: '\u200B' });



                    var days = parseInt(timeArgs[0]);
                    var hours = parseInt(timeArgs[1]);
                    var minutes = parseInt(timeArgs[2]);
                    var seconds = parseInt(timeArgs[3]);

                    var secDays = days*24*60*60;
                    var secHours = hours*60*60;
                    var secMinutes = minutes*60;

                    console.log("Hours in seconds: " + secHours + ", Minutes in seconds: " + secMinutes + ", Additional seconds: " + seconds);

                    var totalTime = secDays+secHours+secMinutes+seconds;
                    var totalTimeMilliseconds = totalTime*1000;

                    console.log(totalTime);

                    var currentTime = new Date().getTime();
                    var endDate = currentTime+totalTimeMilliseconds;

                    const msg = message.channel.send(pollEmbed).then(sentEmbed => {
                        for(i=2;i<pollArgs.length;i++) {
                            sentEmbed.react(pollReactEmoji[i-2])
                        }
                    }).catch((err) => {
                        console.error('Error! ' + err)
                    })
                    message.delete();
                    }

                    var timer = setInterval(function() {
                        var currentTime = new Date().getTime();
                        var remainingTime = endDate-currentTime;

                        if (remainingTime >= 0) {

                            let daysCalc = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
                            let hoursCalc = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                            let minutesCalc = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));
                            let secondsCalc = Math.floor((remainingTime % (1000 * 60)) / 1000);

                            if(daysCalc < 10) { daysCalc = "0"+ daysCalc};
                            if(hoursCalc < 10) { hoursCalc = "0"+ hoursCalc};
                            if(minutesCalc < 10) { minutesCalc = "0"+ minutesCalc};
                            if(secondsCalc < 10) { secondsCalc = "0"+ secondsCalc};

                            var remainingTimeText = daysCalc + ":" + hoursCalc + ":" + minutesCalc + ":" + secondsCalc;

                            console.log(remainingTimeText);

                            var pollEmbedEdit = new Discord.MessageEmbed()
                                .setFooter('Time left: ' + remainingTimeText);

                            message.edit(pollEmbedEdit).catch((err) => {
                                console.error('Error! ' + err);
                            })

                        }
                        else {

                        }
                    }, 1000);
                }
            }
        break;
}

Буду очень признателен за помощь в этом.

1 Ответ

0 голосов
/ 27 марта 2020

Когда вы пытаетесь редактировать message, вы запускаете это method для сообщения пользователя. Вам нужно поместить свой edit блок в then(sentEmbed => { end и затем запустить sentEmbed.edit(DATA).

Метод message.edit удалит все другие данные сообщения, поэтому при использовании .setFooter('Time left: ' + remainingTimeText); новое вложение будет содержать только нижний колонтитул.

lient.on('message', message =>{

    let allArgs = message.content.split(" ");

    // Splits commands into arguments
    let args = message.content.substring(config.prefix.length).split(" ");
    allArgs = allArgs.map(function(x){ return x.toLowerCase() });

    // All commands
    switch(args[0]){
        case 'help':
            message.channel.send(helpEmbed)
        break;

        case 'poll':
            if(args.length < 8) {
                message.channel.send(pollUsage);
                message.delete();
            }
            else {
                pollMsg = message.content.slice(6,message.length);
                var pollArgs = pollMsg.split("/"); // Splits arguments by "/"

                if(pollArgs.length > 11) {
                    message.channel.send(pollUsage);
                    message.delete();
                }
                else {

                var timeArgs = pollArgs[1].split(":");
                console.log(timeArgs);

                if(timeArgs.length > 4) {
                    message.channel.send(pollUsage);
                    message.delete();
                }
                else {

                    var pollEmbed = new Discord.MessageEmbed()
                        .setColor(pink)
                        .setTitle('POLL')
                        .setAuthor('IdealBot', 'https://hypixel.net/attachments/ideal-png.1417277/', 'https://hypixel.net/threads/ideal-ideal-%E2%9D%96-level-52-%E2%9D%96-sweaty-skyblock-guild-%E2%9D%96-top-10-sb-guild-%E2%9D%96-splashes-%E2%9D%96-events-%E2%9D%96-recruiting.2500755/')
                        .addFields(
                            { name: 'Question', value: pollArgs[0] },
                            { name: '\u200B', value: '\u200B' },
                        )
                        .setTimestamp()
                        .setFooter('Time left: ' + pollArgs[1]);
                    for(i=2;i<pollArgs.length;i++) {
                        pollEmbed.addFields({ name: 'Option '+pollReact[i-2], value: pollArgs[i], inline: true });
                    }
                    pollEmbed.addFields({ name: '\u200B', value: '\u200B' });



                    var days = parseInt(timeArgs[0]);
                    var hours = parseInt(timeArgs[1]);
                    var minutes = parseInt(timeArgs[2]);
                    var seconds = parseInt(timeArgs[3]);

                    var secDays = days*24*60*60;
                    var secHours = hours*60*60;
                    var secMinutes = minutes*60;

                    console.log("Hours in seconds: " + secHours + ", Minutes in seconds: " + secMinutes + ", Additional seconds: " + seconds);

                    var totalTime = secDays+secHours+secMinutes+seconds;
                    var totalTimeMilliseconds = totalTime*1000;

                    console.log(totalTime);

                    var currentTime = new Date().getTime();
                    var endDate = currentTime+totalTimeMilliseconds;

                    const msg = message.channel.send(pollEmbed).then(sentEmbed => {
                        for(i=2;i<pollArgs.length;i++) {
                            sentEmbed.react(pollReactEmoji[i-2])
                        }
                                            var timer = setInterval(function() {
                        var currentTime = new Date().getTime();
                        var remainingTime = endDate-currentTime;

                        if (remainingTime >= 0) {

                            let daysCalc = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
                            let hoursCalc = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                            let minutesCalc = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));
                            let secondsCalc = Math.floor((remainingTime % (1000 * 60)) / 1000);

                            if(daysCalc < 10) { daysCalc = "0"+ daysCalc};
                            if(hoursCalc < 10) { hoursCalc = "0"+ hoursCalc};
                            if(minutesCalc < 10) { minutesCalc = "0"+ minutesCalc};
                            if(secondsCalc < 10) { secondsCalc = "0"+ secondsCalc};

                            var remainingTimeText = daysCalc + ":" + hoursCalc + ":" + minutesCalc + ":" + secondsCalc;

                            console.log(remainingTimeText);

                            var pollEmbedEdit = new Discord.MessageEmbed()
                                .setFooter('Time left: ' + remainingTimeText);

                            sentEmbed.edit(pollEmbedEdit).catch((err) => {
                                console.error('Error! ' + err);
                            })

                        }
                        else {

                        }
                    }, 1000);
                    }).catch((err) => {
                        console.error('Error! ' + err)
                    })
                    message.delete();
                    }
                }
            }
        break;
}
...