Как узнать, в какую игру играет пользователь в Discord.JS v12

Я разрабатываю бота для разногласий, пользуясь помощью онлайн-руководств. Проблема в том, что руководства в основном представляют собой руководства Discord.JS v11, а я использую Discord.JS v12. Так что мне это мало помогает. Я хочу узнать, как получить название игры, в которую играет пользователь, по команде !userinfo. Во всех полях отображаются правильные данные, кроме поля «Игра». Я включил показ присутствия на портале разработчиков. В нем всегда отображается None, хотя, возможно, это потому, что это не проверенное название игры, или что-то вроде Zoom Classes (XD), или что-то еще, что не проверено. Можете ли вы сказать мне исправить? Код:

            case "userinfo":
                commandsrun = commandsrun + 1;
                let user;
                if (message.mentions.users.first()) {
                    user = message.mentions.users.first();
                    useralso = message.mentions.users.first();
                } else {
                    user = message.author;
                    useralso = message.member;
                    //i made useralso so it shows nickname correctly
                }
                const userStatus = {
                    online: "Online",
                    idle: "Idle/Inactive",
                    dnd: "Busy/Do Not Disturb",
                    offline: "Unavailable/Offline"
                }
                const mememb = message.guild.member(user)
                Promise.resolve(mememb).then(function () {
                    const memberemb = message.guild.members.fetch(user);
                    Promise.resolve(memberemb).then(function (info) {
                        var roles = info.roles.cache.map(roles => `${roles}`).join(', ');
                        roles = roles.slice(0, -9);
                        const embed = new Discord.MessageEmbed()
                            .setColor("GREEN")
                            .setThumbnail(message.author.avatarURL)
                            .addField(`${user.tag}`, `${user}`, true)
                            .addField("ID:", `${user.id}`, true)
                            .addField("Nickname:", `${useralso.nickname ? `${useralso.nickname}` : 'None'}`, true)
                            .addField("Status:", `${userStatus[user.presence.status]}`, true)
                            .addField("Game:", `${user.presence.game ? user.presence.game.name : 'None'}`, true)
                            .addField("Joined The Server On:", `${moment.utc(mememb.joinedAt).format("dddd, MMMM Do YYYY")}`, true)
                            .addField("Account Created On:", `${moment.utc(user.createdAt).format("dddd, MMMM Do YYYY")}`, true)
                            .addField("Roles:", info.roles.cache ? roles : "None", true)
                            .setFooter(`Replying to ${message.author.username}#${message.author.discriminator}`)
                        message.channel.send({ embed });
                    });
                });
                break;

Пожалуйста, сообщите мне об исправлении и отправьте исправленный код в своем ответе. Спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
4 981
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет, как вы уже сказали, что используете discord.js v12, вам нужно использовать свойство activities из класса Presence. Вот что вам нужно сделать -

user.presence.activities[0].name // this will output the game or any other activity

Но если пользователь использует настраиваемый статус, вы можете получить Name как неопределенное, чтобы решить эту проблему, нам нужно отфильтровать массив!

var presence = user.presence.activities.filter(x=>x.type === "PLAYING") //outputs the presence which the user is playing
presence[0].name // will give the name of the game 

Ваш окончательный результат должен быть -

            case "userinfo":
                commandsrun = commandsrun + 1;
                let user;
                if (message.mentions.users.first()) {
                    user = message.mentions.users.first();
                    useralso = message.mentions.users.first();
                } else {
                    user = message.author;
                    useralso = message.member;
                    //i made useralso so it shows nickname correctly
                }
                const userStatus = {
                    online: "Online",
                    idle: "Idle/Inactive",
                    dnd: "Busy/Do Not Disturb",
                    offline: "Unavailable/Offline"
                }
                const mememb = message.guild.member(user)
                Promise.resolve(mememb).then(function () {
                   var presence = user.presence.activities.length ?user.presence.activities.filter(x=>x.type === "PLAYING") : null;
                    const memberemb = message.guild.members.fetch(user);
                    Promise.resolve(memberemb).then(function (info) {
                        var roles = info.roles.cache.map(roles => `${roles}`).join(', ');
                        roles = roles.slice(0, -9);
                        const embed = new Discord.MessageEmbed()
                            .setColor("GREEN")
                            .setThumbnail(message.author.avatarURL)
                            .addField(`${user.tag}`, `${user}`, true)
                            .addField("ID:", `${user.id}`, true)
                            .addField("Nickname:", `${useralso.nickname ? `${useralso.nickname}` : 'None'}`, true)
                            .addField("Status:", `${userStatus[user.presence.status]}`, true)
                            .addField("Game:", `${presence && presence.length ? presence[0].name : 'None'}`, true)
                            .addField("Joined The Server On:", `${moment.utc(mememb.joinedAt).format("dddd, MMMM Do YYYY")}`, true)
                            .addField("Account Created On:", `${moment.utc(user.createdAt).format("dddd, MMMM Do YYYY")}`, true)
                            .addField("Roles:", info.roles.cache ? roles : "None", true)
                            .setFooter(`Replying to ${message.author.username}#${message.author.discriminator}`)
                        message.channel.send({ embed });
                    });
                });
                break;

Если вы получаете сообщение об ошибке Cannot read property 'filter' of undefined, это связано с недавними изменениями шлюза, прочитайте это - discordjs.guide/popular-topics/intents.html

Stars Tracker 10.12.2020 07:14

Другие вопросы по теме