首页 > 解决方案 > 使用 discord.js 编辑嵌入的问题

问题描述

我最近一直在尝试使用不和谐的机器人,现在我在尝试编辑嵌入时遇到了问题。我正在制作一个在一定时间后用完的轮询命令,计时器工作正常,但编辑没有。错误输出是“未知消息”,但是应该定义消息吗?

代码:

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;
}

真的很感激这方面的一些帮助。

标签: javascriptnode.jsbotsdiscord

解决方案


当您尝试编辑message时,您将其运行method到用户消息。你需要把你的edit块放在then(sentEmbed => {最后然后运行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;
}

推荐阅读