#javascript #discord.js
Вопрос:
Я довольно новичок в discord.js и Javascript в целом. Здесь я создал простую команду userinfo, которая извлекает данные пользователя и аккуратно вставляет их, как вы можете видеть ниже. Вы также можете видеть, что команда требует, чтобы автор/мод упомянул пользователя, чтобы получить результат, но я хочу получить тот же результат по идентификатору пользователя discord участника. Я пытался message.mentions.users.first() || message.guild.member.length(args[0])
, но это создает много проблем. Итак, в принципе, как мне использовать одну и ту же команду/код по идентификатору discord.
const moment = require('moment');
const Discord = require('discord.js');
const { MessageEmbed } = require('discord.js')
module.exports = {
description: 'whois',
run: async (client, message, args) => {
const user = message.mentions.users.first()
const embed = new MessageEmbed()
.setTitle(`**PASSION ISLAND MODERATIONS**`)
.setColor('#ffc0cb')
.setThumbnail(user.displayAvatarURL({ dynamic: true }))
.addField('Username', user.username)
.addField('User Id', user.id)
.addField('Account Type', `${user.bot ? 'Bot' : 'Human'}`)
.addField(`Roles`, `${message.member.roles.cache.size}`)
.addField(`Joined At`, `${moment.utc(message.member.joinedAt).format('ddd, MMM Do, YYYY, h:mm a')}`)
.addField(`created At`, `${moment.utc(message.member.createdAt).format('ddd, MMM Do, YYYY, h:mm a')}`)
.setTimestamp()
.setFooter(`Requested by ${message.author.username}`)
message.channel.send({ embeds: })
},
}
Ответ №1:
Это код, который я использую, который можно найти по идентификатору пользователя, имени пользователя или тегу пользователя.
let user = message.mentions.users.first()||null;
if (!user amp;amp; args.length > 0) {
let input = args.join(' ')
let temp = message.guild.members.cache.get(input) || message.guild.members.cache.find(mem => mem.user.username === input) || mmessage.guild.members.cache.find(mem => mem.user.discriminator === input) || null
if (temp) user = temp.user;
}
Ответ №2:
Если вы хотите быть на 100% уверены, что найдете пользователя, если он существует на сервере, можете это сделать:
message.mentions.users.first() || message.guild.members.fetch(args[0])
Комментарии:
1. Это выдает эту ошибку, если я использую это, я пробовал это раньше .setThumbnail(user.displayAvatarURL({ динамический: true })) Ошибка типа: user.displayAvatarURL не является функцией
2. Я вижу, в чем ваша ошибка, можете ли вы добавить это
if (!user) return message.channel.send("User not found!")
ниже, где вы определяете пользователя3. Как это исправить, ха-ха, пользователь определенно в гильдии @Новичок… может быть
4. @JacyHarrington Вы все еще можете получить эту проверку, но да, проблема в другом и не связана с поиском нужного пользователя. displayAvatarURL-это функция пользователя, а не члена Гильдии. Вы можете сделать
.setThumbnail(user.user.displayAvatarURL({ dynamic: true }))
Ответ №3:
Вы можете попробовать использовать
let user;
if(message.mentions.members.first()) {
user = message.mentions.members.first()
} else {
let x = await message.guild.members.cache.get(`${args[0]}`)
user = x.user;
}
Это будет хорошо работать с идентификаторами, так как вы можете передать снежинку внутри .get()
функции.
Комментарии:
1. Я тоже пробовал, но, похоже, это не работает, из-за этого весь код вылетает! он выдает ошибки в displayavatarurl и почти во всем
2. Не могли бы вы отправить сообщение об ошибке?
3. Это выдает эту ошибку, если я использую это, я пробовал это раньше .setThumbnail(user.displayAvatarURL({ динамический: true })) Ошибка типа: user.displayAvatarURL не является функцией
4. Это потому, что displayAvatarURL () — это функция пользователя, а не члена гильдии, которую вы должны выполнять
message.guild.members.cache.get(`${args[0]`).user;
в этом случае5. да, я сделал это, но это не работает, это выдает ту же самую точную ошибку
Ответ №4:
Вы можете попробовать использовать
message.mentions.members.first().then((m) => {
if (!m) {
// code
}
})
// or do this
const member = await message.mentions.members.first();
if (!member) {
// Code
}
или измените members
на users
как показали другие люди, вы можете сделать это, найдя идентификатор на сервере следующим образом
message.guild.members.cache.get(args[0]);
// This will return null if it doesnt exist so you can do this
const member = await message.guild.members.cache.get(args[0]);
if (!member) {
// code
}
Вы можете объединить их оба, чтобы проверить это и убедиться, что участник существует таким образом
const member = await message.mentions.members.first() || message.guild.members.cache.get(args[0]);
if (!member) {
// Code
}
надеюсь, это помогло
ПРИМЕЧАНИЕ : Я вижу, что вы используете несколько .addField()
, которые вы можете использовать .addFields()
для оптимизации своего кода, как это
const embed = new MessageEmbed()
.addFields(
{ name: 'name', value: 'the description', inline: true || false },
{ name: 'name', value: 'the description', inline: true || false },
)
Комментарии:
1. Я знаю, что пользователь существует, я спрашиваю, как мне запустить код с идентификатором пользователя, например
!whois 736651621584601148
2. @JacyHarrington Вы можете использовать
message.mentions.members.first() || message.guild.members.cache.get(args[0])
это будет работать, я также добавил это в ответ3.
.get()
не возвращает обещание, которое вы не можете использовать Promise.prototype.then() на нем