首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >presence.status和昵称Discord.js的问题

presence.status和昵称Discord.js的问题
EN

Stack Overflow用户
提问于 2022-01-09 13:41:57
回答 1查看 94关注 0票数 1
代码语言:javascript
复制
const { SlashCommandBuilder } = require('@discordjs/builders');
const { bold, italic, strikethrough, underscore, spoiler, quote, blockQuote, inlineCode, codeBlock } = require('@discordjs/builders');
const { Option, User, Options, UserContextMenuInteraction } = require(`discord.js`)

module.exports = {
    data: new SlashCommandBuilder()

        .setName('userinfo')
        .setDescription('Use this command to see information about you')
        .addUserOption(option => option.setName('target').setDescription('Select a user').setRequired(true)),

    async execute(interaction) {
        // ${interaction.client.uptime}
        var userStatus = '';

        const userResult = interaction.options.getUser('target');
        const memberResult = interaction.options.getMember('target');
        const joinedDate = new Date(memberResult.joinedTimestamp).toLocaleDateString();
        const createdDate = new Date(userResult.createdTimestamp).toLocaleDateString();

        if(memberResult.presence.status == 'offline') {
            userStatus = 'Offline';
        }
        if(memberResult.presence.status == 'idle') {
            userStatus = 'Idle';
        }
        if(memberResult.presence.status == 'dnd') {
            userStatus = 'Do Not Disturb';
        }
        if(memberResult.presence.status == 'online') {
            userStatus = 'Online';
        }

        let days = Math.floor(userResult.client.uptime / 86400000);
        let hours = Math.floor(userResult.client.uptime / 3600000) % 24;
        let minutes = Math.floor(userResult.client.uptime / 60000) % 60;
        let seconds = Math.floor(userResult.client.uptime / 1000) % 60;

        const exampleEmbed = {
            color: 0x0099ff,
            title: `Information of ${userResult.tag}`,
            description: `${interaction.user.username} has used the command ` + inlineCode(`/${interaction.commandName}`),
            fields: [
                {
                    name: underscore('Nickname:'),
                    value: `${memberResult.nickname}`,
                    inline: true,
                },
                {
                    name: underscore('ID:'),
                    value: `${memberResult.id}`,
                    inline: true,
                },
                {
                    name: underscore('Uptime:'),
                    value: `${days}d, ${hours}h, ${minutes}m, ${seconds}s`,
                    inline: false,
                    inline: true,
                },
                {
                    name: underscore('Status:'),
                    value: `${userStatus}`,
                    inline: true,
                },
                {
                    name: '___Created at: ___',
                    value: `${createdDate}`,
                    inline: false,
                },
                {
                    name: '___Joined at: ___',
                    value: `${joinedDate}`,
                    inline: false,
                },
            ],
            footer: {
                text: `im so sorry about of bug on [uptime] and [status]. Soon will be fixed :)`,
            }
        };
        
        await interaction.reply({ embeds: [exampleEmbed], ephemeral: false });
    },
};

我正在尝试获取成员的...presence.status.nickname,但如果成员的状态是脱机的,则在控制台上会出现错误。

错误:

代码语言:javascript
复制
TypeError: Cannot read property 'status' of null
    at Object.execute (C:\Users\user\Desktop\.Folder Rizky\test vscode\commands\userinfo.js:24:28)
    at Client.<anonymous> (C:\Users\user\Desktop\.Folder Rizky\test vscode\index.js:32:17)
    at Client.emit (node:events:394:28)
    at InteractionCreateAction.handle (C:\Users\user\Desktop\.Folder Rizky\test vscode\node_modules\discord.js\src\client\actions\InteractionCreate.js:74:12)
    at Object.module.exports [as INTERACTION_CREATE] (C:\Users\user\Desktop\.Folder Rizky\test vscode\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36)
    at WebSocketManager.handlePacket (C:\Users\user\Desktop\.Folder Rizky\test vscode\node_modules\discord.js\src\client\websocket\WebSocketManager.js:351:31)
    at WebSocketShard.onPacket (C:\Users\user\Desktop\.Folder Rizky\test vscode\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:\Users\user\Desktop\.Folder Rizky\test vscode\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (C:\Users\user\Desktop\.Folder Rizky\test vscode\node_modules\ws\lib\event-target.js:199:18)
    at WebSocket.emit (node:events:394:28)

这是Intents的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-09 20:21:17

是的,您的代码的问题在于特权意图。要解决此问题,您必须打开不和谐的开发人员门户中的Presence intent

之后,在代码中将GUILD_PRESENCES添加到客户端意图数组中,如下所示:

代码语言:javascript
复制
const { Client, Intents } = require('discord.js');

const client = new Client({ intents: [Intents.FLAGS.GUILD_PRESENCES] });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70641856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档