首页 > 解决方案 > DiscordJS v12 userinfo 命令不起作用

问题描述

我一直在制作 Discord.JS 机器人,但我的 !userinfo 命令有问题。我面临很多问题,但都是因为我不知道如何正确处理 DiscordJS 中的 Promise。没有网站一直在帮助我。我在给我问题的行下添加了评论。

            const memberemb = message.guild.members.fetch(user);
        Promise.resolve(memberemb).then(function () {
            console.log(memberemb.roles);
            const embed = new Discord.MessageEmbed()
                .setColor("RANDOM")
                .setThumbnail(message.author.avatarURL)
                .addField(`${user.tag}`, `${user}`, true)
                .addField("ID:", `${user.id}`, true)
                .addField("Nickname:", `${useralso.nickname ? `${useralso.nickname}` : 'None'}`, true)
                .addField("Status:", `${user.presence.status}`, true)
                // always shows offline in status
                .addField("Game:", `${user.presence.game ? user.presence.game.name : 'None'}`, true)
                //idk if it shows games correctly
                .addField("Joined The Server On:", `${moment.utc(memberemb.joinedAt).format("dddd, MMMM Do YYYY")}`, true)
                //shows date of today not of the joined on date
                .addField("Account Created On:", `${moment.utc(user.createdAt).format("dddd, MMMM Do YYYY")}`, true)
                .addField("Roles:", memberemb.roles ? memberemb.roles.map(roles => `${roles}`).join(', ') : "None", true)
                //shows none as roles
                .setFooter(`Replying to ${message.author.username}#${message.author.discriminator}`)
            message.channel.send({ embed });
        });
        break;

请解释如何解决这个问题并正确重写代码(请),以便我可以将它用于我的机器人
谢谢

标签: javascriptpromisediscorddiscord.jsbots

解决方案


对于您的存在问题,请查看此其他帖子。如果不先解决这个问题,游戏可能会出错。

使用 moment.js,您需要moment(currenttime)在更改时间格式之前执行此操作。

.addField("Joined The Server On:", `${moment(user.joinedAt).format('DD-MM-YYYY')}`, true)
.addField("Account Created On:", `${moment(user.createdAt).format('DD-MM-YYYY')}`, true)

那应该有效。(在moment.js 文档中查看更多信息)

关于你的角色,memberemb.rolesundefined

你会想从承诺中得到价值,我把info它放在函数里面

Promise.resolve(memberemb).then(function (info) {

然后在嵌入中,您可以使用info.roles.caches.map

.addField("Roles:", info.roles.cache ? info.roles.cache.map(roles => `${roles}`).join(', ') : "None", true)

在此处查看有关承诺如何运作的更多信息


推荐阅读