Запрет на использование смайликов-ролей в сторонних каналах - PullRequest
1 голос
/ 04 ноября 2019

как сделать так, чтобы роль при нажатии на звонок давалась только в определенном канале? Код ниже. Также можно сделать так, чтобы только администраторы имели право выдавать реакции с помощью звонка, который выдаст роль. Помогите, пожалуйста.

var emojiname = ["?"];
var rolename=["? Notifications"];

client.on('message', msg => {

if(msg.content.startsWith("reaction" && message.channel.name.toLowerCase() === 'information')){
    if(!msg.channel.guild) return;
        for(let n in emojiname){
            var emoji =[msg.guild.emojis.find(r => r.name == emojiname[n])];
                for(let i in emoji){
                msg.react(emoji[i]);
            }
        }
    }
});

client.on("messageReactionAdd",(reaction,user)=>{
    if(!user) return;
        if(user.bot)return;
            if(!reaction.message.channel.guild) return;
        for(let n in emojiname){
            if(reaction.emoji.name == emojiname[n]){
                let role = reaction.message.guild.roles.find(r => r.name == rolename[n]);          
            reaction.message.guild.member(user).addRole(role).catch(console.error);
        }
    }  
});

client.on("messageReactionRemove",(reaction,user)=>{
    if(!user) return;
        if(user.bot)return;
            if(!reaction.message.channel.guild) return;
        for(let n in emojiname){
            if(reaction.emoji.name == emojiname[n]){
                let role = reaction.message.guild.roles.find(r => r.name == rolename[n]);   
            reaction.message.guild.member(user).removeRole(role).catch(console.error);
        }
    }
});

1 Ответ

0 голосов
/ 06 ноября 2019

Вот оно.
Во-первых, имейте в виду, что есть 2 типа смуты раздора. Юникод один, обычные эмодзи, вроде . И смайлики гильдии, которые вы добавляете на сервер.

Первый представлен только именем юникода, а второй имеет идентификатор и другие различия (см. Emoji и Реакция сообщения )

При этом я использовал имя смайлика в массиве emojiname. Затем я немного изменил код, чтобы принимать и смайлики юникода и гильдии.

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

демо GIF

// ➡ is an ascii emoji
// lina is a guild emoji
var emojiname = ['➡', 'lina'];
var rolename=["➡ Notifications", "lina supporter"];

client.on('message', msg => {
  if(msg.content.startsWith('reaction') && (msg.channel.name.toLowerCase() === 'information')) {
    for (let n in emojiname){
      let emoji = msg.guild.emojis.find(r => r.name === emojiname[n]);
      if (emoji === null) {
        emoji = emojiname[n];
      }
      msg.react(emoji);
    }
  }
});

client.on("messageReactionAdd",(reaction,user)=>{
  if (!user) { return; }
  if (user.bot) { return; }
  if (reaction.message.channel.name.toLowerCase() !== 'information') { return; }
  for(let n in emojiname){
    if(reaction.emoji.name === emojiname[n]){
      let role = reaction.message.guild.roles.find(r => r.name === rolename[n]);          
      reaction.message.guild.member(user).addRole(role).catch(console.error);
    }
  }  
});

client.on("messageReactionRemove",(reaction,user)=>{
  if(!user) { return; }
  if(user.bot) { return; }
  if (reaction.message.channel.name.toLowerCase() !== 'information') { return; }
  for(let n in emojiname){
    if(reaction.emoji.name === emojiname[n]){
      let role = reaction.message.guild.roles.find(r => r.name == rolename[n]);   
      reaction.message.guild.member(user).removeRole(role).catch(console.error);
    }
  }
});
...