DiscordJS v12 userinfo 命令不起作用

Posted

技术标签:

【中文标题】DiscordJS v12 userinfo 命令不起作用【英文标题】:DiscordJS v12 userinfo command not working 【发布时间】:2021-03-03 14:20:35 【问题描述】:

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

            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;

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

【问题讨论】:

您是否启用了privileged intents? 是的,我打开了它。现在一切正常,但@everyone 也显示在角色中,不知道为什么 【参考方案1】:

关于存在问题,请查看this 或this other post。如果不先解决这个问题,游戏可能会出错。

使用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 documentation 中查看更多信息)

关于你的角色,memberemb.rolesundefined

你会想从 promise 中获取价值,我把 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)

在how promise works here上查看更多信息

【讨论】:

谢谢它醒了,但它也显示了@everyone 我不想显示的角色请告诉修复 @MuhammadUsmanMithani 改用它,当角色为 @everyone info.roles.cache.filter(role=> role.name !=='@everyone').map(roles => $roles).join(', ') 时过滤

以上是关于DiscordJS v12 userinfo 命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

discord.js v12 用户信息命令

如何在 Discord.JS v12 中查看用户正在玩的游戏

Discord.js V12 用户信息 createdAt /joinedAt 未定义

discordjs 机器人的聊天命令

Discord.js v13,@discordjs/voice 播放音乐命令

如何在其中创建一个包含 2 个单词的命令 Discordjs