仅当用户获​​得特定角色时的问候消息

Posted

技术标签:

【中文标题】仅当用户获​​得特定角色时的问候消息【英文标题】: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.`);
   
);

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于仅当用户获​​得特定角色时的问候消息的主要内容,如果未能解决你的问题,请参考以下文章

Java - 关闭 JFrame 窗口时的消息

在特定角色通道中发送消息几秒钟后,尝试删除通知正在添加角色的消息

为啥我的 DJS 角色声明消息可以工作几个小时,但突然停止?

DiscordJS 13用户嵌入显示在特定频道发送的最后一条消息

Zapier Slack 私人频道:仅当用户在频道中时才发送消息

Discord Bot 删除特定频道中的消息