Discord.js - 如何在用户加入角色时发送消息?

时间:2021-01-15 18:12:04

标签: javascript discord discord.js

当有人加入服务器时我有这个:

client.on('guildMemberAdd', (member) => {
    console.log(`${member.user.username} joined the server`)
    const embedJoins = new Discord.MessageEmbed()
    .setColor(colourColl)
    .setDescription(`**${member.user.username}** just joined the server`)
    client.channels.cache.get(channelMissionControl).send(embedJoins);
});

我想在用户加入特定角色时做类似的事情。 这能做到吗?

1 个答案:

答案 0 :(得分:0)

客户#guildMemberUpdate

guildMemberUpdate 是一个客户端事件,旨在在公会成员发生更新时提供回调 - 例如昵称更改,以及最重要的角色更新。 我们可以轻松地使用此事件来确定用户角色何时更新,并回调要发送到我们要查找的特定频道的嵌入。

请记住,在完成此操作之前,您需要检查成员采取了哪些操作 - 就像他要更新昵称而不是角色一样,我们会收到一堆错误。幸运的是,guildMemberUpdate 为我们提供了 2 个参数:oldMembernewMember,它们都是 GuildMember 对象,我们可以使用它们来查找是否有任何与成员角色有关的活动。让我们设置 2 个变量:

const oldRoles = oldMember.roles.cache;
const newRoles = newMember.roles.cache;

从那里,我们可以确定成员的角色列表是否已更新:

if (oldRoles.size < newRoles.size) {
  // code
}

代码示例

client.on('guildMemberUpdate', oldMember, newMember => {
  const oldRoles = oldMember.roles.cache;
  const newRoles = newMember.roles.cache;
  if (oldRoles.size < newRoles.size) {
    const Embed = new Discord.MessageEmbed();
    .setTitle('Roles updated!');
    .setDescription(`${newMember.user.username}'s roles have been updated!`);
    .setColor(3426654);
    newMember.guild.channels.cache.find(ch => ch.name.toLowerCase() === 'logs').send(Embed);
  }
})

您可以在此处阅读有关 guildMemberUpdate 的更多信息:https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-guildMemberUpdate