我很抱歉,我真的不喜欢寻求帮助,但我找不到解决方案。
我正在为我的机器人创建一个 userinfo 命令,到目前为止一切顺利,但我想从不在执行命令的服务器上的用户那里获取信息,但他在机器人所在的另一台服务器上,当我使用一个函数来收集头寸时,我得到一个错误,所以我希望,如果用户不在机器人服务器上,他会返回给我另一个嵌入,只包含帐户 ID、名称和创建日期信息.
async run({ message, args, prefix, author }, t) {
moment.locale("pt-BR");
try {
const user =
this.client.users.cache.get(args[0]) ||
message.mentions.members.first() ||
message.author;
const flags = [];
this.Flags(user, flags);
const roles = [];
this.Roles(user, roles, message);
let presence;
if (!user.presence.activities.length) presence = "Não está jogando nada";
else presence = user.presence.activities.join(", ");
const device = this.Device(user);
const joined = `${moment(user.joinedAt).format("L")} ( ${moment(
user.joinedAt
)
.startOf("day")
.fromNow()} )`;
const created = `${moment(
this.client.users.cache.get(user.id).createdAt
).format("L")} ( ${moment(this.client.users.cache.get(user.id).createdAt)
.startOf("day")
.fromNow()} )`;
const USERINFO = new ClientEmbed(author)
.setTitle(flags + ` ${user.username}`)
.addFields(
{ name: "<:richPresence:843144574234394655>┆**Status:**", value: `\`\`\`diff\n- ${presence}\`\`\`` },
{ name: "**Nome do Usuário:**", value: user.tag, inline: true },
{
name: "**Nickname no Servidor:**",
value: !!user.nickname ? user.nickname : "Nenhum Nickname",
inline: true,
},
{ name: "**ID do Usuário:**",
value: user.id,
inline: true
},
{ name: "**Conta Criada:**", value: created, inline: true },
{ name: "**Entrada no Servidor:**", value: joined, inline: true },
{
name: "**Dispositivo:**",
value: String(device).replace("null", "Nenhum"),
inline: true,
},
{
name: `**Cargos no Servidor**`,
value: roles,
}
)
.setThumbnail(user.displayAvatarURL({ dynamic: true }))
.setFooter(
`Comando solicitado por ${message.author.tag}`,
message.author.displayAvatarURL({ dynamic: true })
);
message.quote(USERINFO);
} catch (err) {
console.log(`ERRO NO COMANDO USERINFO\nERROR: ${err}`);
}
}
答案 0 :(得分:0)
您可以使用 Guild.member(User)
从输入的用户处获取 GuildMember
或 null
。
如果结果为 null
,则该用户不存在于服务器中。
const user =
this.client.users.cache.get(args[0]) ||
message.mentions.members.first() ||
message.author;
// you should also probably check that the command is run in a guild channel
const guildMember = message.guild.member(user);
if (guildMember) {
// include roles in embed
} else {
// don't include roles in embed
}
答案 1 :(得分:0)
我相信您的问题是您将帐户信息作为 User
属性获取。
问题在于公会成员和用户不同。公会成员,保存特定服务器中用户的附加信息,例如角色。
当前您从这个变量中获取配置文件信息:
const user =
this.client.users.cache.get(args[0]) || // This is a user property
message.mentions.members.first() || // This is a member propery
message.author; // This is a user property
这样做的问题是,它有时会返回一个用户,而该用户的数据中没有存储任何角色。
这是一个可能的修复:
// We need to make sure they run this in a server so we can access the roles
if (!message.guild) return message.channel.send("This command must be ran in a server")
// This will always return a guild member
const user =
message.guild.members.cache.get(args[0]) ||
message.mentions.members.first() ||
message.member;