【问题标题】:Greeting message only when a user gets a specific role仅当用户获​​得特定角色时的问候消息
【发布时间】:2021-08-01 05:25:17
【问题描述】:

我的服务器上有这个验证系统,其中新成员必须对消息做出反应才能获得允许查看其他频道的角色。所以,我想让我的机器人在特定频道上发送消息,向他们打招呼,只有当成员获得特定角色时(已验证)

问题是:任何人都可以在消息中做出反应以一遍又一遍地获取已验证的角色,从而导致机器人发送垃圾邮件,而我仍然没有找到一种方法让每个用户只发送一次此欢迎消息

这是我的代码:

client.on('guildMemberUpdate', (oldMember, newMember) => {
  const channel = client.channels.cache.get('channelID');

    // If the role(s) are present on the old member object but no longer on the new one (i.e role(s) were removed)
    const removedRoles = oldMember.roles.cache.filter(role => !newMember.roles.cache.has(role.id));
    if (removedRoles.size > 0) console.log(`The roles ${removedRoles.map(r => r.name)} were removed from ${oldMember.displayName}.`);
    // If the role(s) are present on the new member object but are not on the old one (i.e role(s) were added)
    const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
    if (addedRoles.size > 0){
    if (newMember.roles.cache.some(role => role.name === 'teste')) {
      let embed = new Discord.MessageEmbed()
        .setTitle("♡﹕welcome!")
        .setDescription("lalalala")
        .setColor("#FFB6C1")
        .setThumbnail("https://cdn.discordapp.com/attachments/806974794461216813/817737054745526304/giffy_2.gif")
      channel.send(`Welcome ${oldMember.user}`, embed)
    }
    console.log(`The roles ${addedRoles.map(r => r.name)} were added to ${oldMember.displayName}.`);
  } 
});

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    您添加到 guildMemberUpdate 事件侦听器的代码用于在将经过验证的角色添加到成员时发送欢迎消息。它没有运行任何检查来查看成员是否已经触发了欢迎消息。

    听起来,当成员从消息中删除他们的反应时,它也会删除他们已验证的角色。您应该查看代码中要删除角色的位置,并对其进行更改,以便在添加后不会删除已验证的角色。

    如果无法做到这一点,请考虑将状态保存在文件或数据库中,以便在发送欢迎消息之前对其进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多