Я разрабатываю бота для разногласий, пользуясь помощью онлайн-руководств. Проблема в том, что руководства в основном представляют собой руководства 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;
Пожалуйста, сообщите мне об исправлении и отправьте исправленный код в своем ответе. Спасибо.
Привет, как вы уже сказали, что используете 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