Discord.Команда JS Userinfo

#javascript #node.js #visual-studio-code #discord.js

#javascript #node.js #visual-studio-code #discord.js

Вопрос:

Я пытаюсь сделать так, чтобы этот бот мог это делать…

  • Отображение ролей пользователей
  • Вы выполняете d!au @User, и их информация о пользователе отображается

Единственное, я не знаю, как это сделать, я нашел несколько других вопросов о переполнении стека, но их боту требуется «moment», и я понятия не имею, что такое moment. Это находится в командном файле, а не в index.js к ВАШЕМУ СВЕДЕНИЮ, файл.

     var commando = require('discord.js-commando');
var discord = require('discord.js');

class aboutuser extends commando.Command 
{
    constructor(client) {
        super(client, {
            name: 'aboutuser',
            group: 'help',
            memberName: 'aboutuser',
            description: 'Lists information about a specific user.',
            aliases: ['au', 'aboutu', 'auser', 'user'],
        })
    }
async run(message, args){

    let userinfo = {};
    userinfo.bot = message.client.user.bot;
    userinfo.createdat = message.client.user.createdAt;
    userinfo.discrim = message.client.user.discriminator;
    userinfo.id = message.client.user.id;
    userinfo.mfa = message.client.user.mfaEnabled;
    userinfo.pre = message.client.user.premium;
    userinfo.presen = message.client.user.presence;
    userinfo.tag = message.client.user.tag;
    userinfo.uname = message.client.user.username;
    userinfo.verified = message.client.user.verified;

    userinfo.avatar = message.client.user.avatarURL;

    var myInfo = new discord.RichEmbed()
        .setAuthor(userinfo.uname, userinfo.avatar)
        .addField("Bot?",userinfo.bot, true)
        .addField("Created At",userinfo.createdat, true)
        .addField("Discriminator",userinfo.discrim, true)
        .addField("Client ID",userinfo.id, true)
        .addField("2FA/MFA Enabled?",userinfo.mfa, true)
        .addField("Paid Account?",userinfo.pre, true)
        .addField("Presence",userinfo.presen, true)
        .addField("Client Tag",userinfo.tag, true)
        .addField("Username",userinfo.uname, true)
        .addField("Verified?",userinfo.verified, true)
        .setColor(0xf0e5da)
        .setFooter('s!aboutserver')
        .setTitle("About this user...")
        .setThumbnail(userinfo.avatar)


        message.channel.sendEmbed(myInfo);

}

}
module.exports = aboutuser;
  

Я хочу, чтобы мой бот мог отображать роли пользователя и сделать это так, чтобы вы могли помечать их.

Реальность: команда выдает ошибку, но бот подключен к Сети. Ошибка ссылки, пробел не определен.

Ожидается: Бот, который может перечислять роли пользователя, и вы можете видеть информацию о других пользователях при использовании команды.

Я вставил только тот код, который РАБОТАЕТ, а не тот, который в конечном итоге приводит к сбоям.

Комментарии:

1. Вы должны включить код, который выдает вам ошибки, поскольку тогда его можно воспроизвести или кто-то может посмотреть на него и сказать вам, почему он выдает ошибку.

Ответ №1:

Следующий код должен выполнять все, что вы хотите:

 var commando = require('discord.js-commando');
var discord = require('discord.js');

class aboutuser extends commando.Command 
{
    constructor(client) {
        super(client, {
            name: 'aboutuser',
            group: 'help',
            memberName: 'aboutuser',
            description: 'Lists information about a specific user.',
            aliases: ['au', 'aboutu', 'auser', 'user'],
        })
    }
async run(message, args){
    const userMention = message.mentions.users.first() || msg.author;
    const memberMention = message.mentions.members.first() || msg.member;

    let userinfo = {};
    userinfo.bot = userMention.bot;
    userinfo.createdat = userMention.createdAt;
    userinfo.discrim = userMention.discriminator;
    userinfo.id = userMention.id;
    userinfo.mfa = userMention.mfaEnabled;
    userinfo.pre = userMention.premium;
    userinfo.presen = userMention.presence;
    userinfo.tag = userMention.tag;
    userinfo.uname = userMention.username;
    userinfo.verified = userMention.verified;

    userinfo.avatar = userMention.avatarURL;

    const rolesOfTheMember = memberMention.roles.filter(r => r.name !== '@everyone').map(role => role.name).join(', ')

    var myInfo = new discord.RichEmbed()
        .setAuthor(userinfo.uname, userinfo.avatar)
        .addField("Bot?",userinfo.bot, true)
        .addField("Created At",userinfo.createdat, true)
        .addField("Discriminator",userinfo.discrim, true)
        .addField("Client ID",userinfo.id, true)
        .addField("2FA/MFA Enabled?",userinfo.mfa, true)
        .addField("Paid Account?",userinfo.pre, true)
        .addField("Presence",userinfo.presen, true)
        .addField("Client Tag",userinfo.tag, true)
        .addField("Username",userinfo.uname, true)
        .addField("Verified?",userinfo.verified, true)
        .setColor(0xf0e5da)
        .setFooter('s!aboutserver')
        .setTitle("About this user...")
        .setThumbnail(userinfo.avatar)


        message.channel.sendEmbed(myInfo);

}

}
module.exports = aboutuser;
  

Я добавил две новые переменные, которые проверяют, было ли упоминание о члене гильдии или нет. Если да, команда показывает статистику упомянутого участника, если нет, бот показывает статистику автора сообщения.

Затем я добавил также новую переменную «rolesOfTheMember», которая представляет собой список всех ролей, которыми владеет участник. Вы можете просто добавить эту переменную в свою встроенную систему Discord, а затем перечислить роли, которые есть у члена гильдии на сервере Discord!

Получайте удовольствие!

Ответ №2:

Moment — это пакет, который позволяет вам (довольно) упростить форматирование по времени. Вы устанавливаете его так же, как discord.js , поэтому в вашей командной строке вы делаете npm install moment (если вы установили discord.js используя какой-либо другой синтаксис, используйте тот же самый здесь, просто замените discord.js с моментом). Это установит пакет, и затем вы сможете его использовать, только не забудьте поставить const moment = require('moment'); в начало вашего кода, и у вас все должно получиться.

Все время форматирования можно найти здесь: https://momentjs.com/docs/#/parsing/string-format /