Как проверить роль с помощью ролевой реакции и автоматического удаления реакции пользователя - PullRequest
1 голос
/ 21 июня 2020

Привет, я уже получил свою ролевую реакцию, но хотел бы сделать так, чтобы после нажатия эмодзи код спрашивал, есть ли у кого-то уже группа или нет, и, соответственно, добавляет или удаляет группу, но я также хотел бы сделать это так, что реакция с эмодзи удаляется автоматически, так что только бот реагирует на сообщение, что отображается эмодзи.

Я добавлю код, который я написал до сих пор, во вложении, и, возможно, есть какие-то люди кто может мне помочь.

MessageReactionAddEvent:

const BaseEvent = require('../utils/structures/BaseEvent');
require('dotenv').config();
module.exports = class MessageReactionAddEvent extends BaseEvent {
  constructor() {
    super('messageReactionAdd');
  }
  
  async run(client, reaction, user) {
    const message = reaction.message;
    const member = message.guild.members.cache.get(user.id);

    if(user.bot) return;
 
    const Valorant = message.guild.roles.cache.get(process.env.DISCORD_ROLE_VALORANT);
    const League = message.guild.roles.cache.get(process.env.DISCORD_ROLE_LEAGUE);

    if(
      ["?", "?"].includes(reaction.emoji.name)
  ) {
      switch(reaction.emoji.name) {

          case"?":
          if (message.member.roles.cache.has(process.env.DISCORD_ROLE_VALORANT)) {
            console.log('Has Valorant')
          } else {
            member.roles.add(Valorant)
            member.createDM().then( channel => {
                channel.send("Added Valorant")
            })
          }
          
          break;

          case"?":
          if (message.member.roles.cache.has(process.env.DISCORD_ROLE_LEAGUE)) {
            console.log('Has League of Legends')
          } else {
            member.roles.add(League)
            member.createDM().then( channel => {
                channel.send("Added League of Legends")
            })
          }
      }
    }
  }
}

MessageReactionRemoveEvent:

const BaseEvent = require('../utils/structures/BaseEvent');
require('dotenv').config();
module.exports = class MessageReactionRemoveEvent extends BaseEvent {
  constructor() {
    super('messageReactionRemove');
  }
  
  async run(client, reaction, user) {
    const message = reaction.message;
    const member = message.guild.members.cache.get(user.id);

    if(user.bot) return;
 
    const Valorant = message.guild.roles.cache.get(process.env.DISCORD_ROLE_VALORANT);
    const League = message.guild.roles.cache.get(process.env.DISCORD_ROLE_LEAGUE);
 
    if(
        ["?", "?"].includes(reaction.emoji.name)
    ) {
        switch(reaction.emoji.name) {
 
          case"?":
          if (message.member.roles.cache.has(process.env.DISCORD_ROLE_VALORANT)) {
            member.roles.remove(Valorant)
            member.createDM().then( channel => {
                channel.send("Added Valorant")
            })
          } else {
            console.log('Hasn´t Valorant')
          }
          
          break;

          case"?":
          if (message.member.roles.cache.has(process.env.DISCORD_ROLE_LEAGUE)) {
            member.roles.remove(League)
            member.createDM().then( channel => {
                channel.send("Added League of Legends")
            })
          } else {
            console.log('Hasn´t League of Legends')
          }
      }
    }
  }
}

RolesCommand:

const BaseCommand = require('../../utils/structures/BaseCommand');
const Discord = require("discord.js")

module.exports = class RolesCommand extends BaseCommand {
  constructor() {
    super('roles', 'Team', []);
  }

  run(client, message, args) {
    try {
      message.delete()

      const embed = new Discord.MessageEmbed()
      .setTitle("Test1")
      .setDescription("Test2")
      .setColor("#FCCF00")
      .setFooter("Test3")

      message.channel.send(embed).then(async msg => {
          await msg.react("?")
          await msg.react("?")
      })

  } catch(e) {
    console.log(e)
    } 
  }
}

Спасибо за всю помощь, которую я получил до сих пор, сообщество уже помогло мне очень хорошо - спасибо за это.

Ответы [ 2 ]

2 голосов
/ 22 июня 2020

Благодаря большому количеству исследований и другу, который помог мне, я теперь понял все правильно и надеюсь, что смогу помочь всем, у кого есть такая же проблема.

Проверка ролей с ролевой реакцией:

- message.member.roles.cache.has(process.env.DISCORD_ROLE_VALORANT)
+ member.roles.cache.has(process.env.DISCORD_ROLE_VALORANT)

Автоматическое удаление пользователя. Реакция:

const userReactions = message.reactions.cache.filter(reaction => reaction.users.cache.has(user.id));
try {
    for (const reaction of userReactions.values()) {
        await reaction.users.remove(user.id);
    }
} catch (error) {
    console.error('Failed to remove reactions.');
}
0 голосов
/ 22 июня 2020

Я полагаю, что запуск reaction.remove(); перед вашими switch операторами должен помочь:)

...