Перед тем, как продолжить, проверьте права доступа к каналу (владелец) по умолчанию - PullRequest
1 голос
/ 14 июля 2020

Что ж, я хочу, чтобы каждый раз, когда владелец выполняет эту команду test! Update, он сначала проверяет, имеет ли канал с именем test вид только для @everyone, прежде чем он пойдет дальше ... как я могу этого добиться?

вот как я создаю канал прямо сейчас,

 init: (msg) => {
    if (!msg.member.hasPermission('ADMINISTRATOR')) {
      return sendEmbed(msg, 'You need to have the administrator permission to do this.')
    }
    

    //checks if channel excist some=exist
      if (msg.guild.channels.some(r => r.name === "test")) {
        //sendEmbed(msg, 'you already have a channel called test.')
        } else {
        msg.guild.createChannel('test', {
  type: 'channel',
  permissionOverwrites: [
    {
      id: msg.guild.defaultRole.id, // @everyone role
      allow: ['READ_MESSAGES']
    }
    
  ]
});
sendEmbed(msg, '#test created.')
  }
    
    const channel = client.guilds.get(msg.guild.id).channels.find(r => r.name === "test");

    if (channel) {
      sql.run('UPDATE settings SET partner = ? WHERE guildid = ?', [channel.id, msg.guild.id])
      sendEmbed(msg, 'Success!')
    } else {
      sendEmbed(msg, 'please re-run this command to finalize')
    }
  },

А вот и тест! Update

  update: (msg) => {

 i really dont know what to put here to check first the channel permissions before executing..
 
},

РЕШЕНИЕ Спасибо MakeHellTal, у меня это сработало:

const channel = client.guilds.get(msg.guild.id).channels.find(r => r.name === "test");
             let everyone = msg.guild.roles.find(r => r.name === '@everyone');
              let perms = channel.permissionsFor(everyone).serialize();
              if (perms.VIEW_CHANNEL && perms.READ_MESSAGE_HISTORY && !perms.SEND_MESSAGES) {
                  
              }else{ 
            console.log("not working")
                }

Ответы [ 2 ]

1 голос
/ 14 июля 2020

TextChannel # permissionsFor ()

    let everyone = message.guild.roles.cache.find(x => x.name === '@everyone');
    let perms = channel.permissionsFor(everyone).serialize();

Это находит @everyone и получает его разрешения в объекте.

This is how the object will look.

This is how the object will look. Then just use ifs to check each of these perms, and you're good to go!

If you want to check if a channel is read only for everyone, I'd use

if (perms.VIEW_CHANNEL && perms.READ_MESSAGE_HISTORY && !perms.SEND_MESSAGES) {
// do stuff here
}
0 голосов
/ 14 июля 2020

Если я правильно понял, вы хотели проверить, есть ли у пользователя разрешение на изменение каналов. Если да:

if (msg.member.hasPermission("MANAGE_CHANNELS")) {
    // Do something
}
...