Как переписать разрешения канала с помощью битового поля - PullRequest
0 голосов
/ 30 сентября 2018

Я пытался заставить своего бота сохранить права доступа к каналу, но он сохраняет только свое битовое поле.Можно ли как-то перезаписать разрешения канала для определенной роли только с использованием битового поля?

Я попытался сделать что-то вроде этого:

channel.overwritePermissions(role, {
  permissions: perms
});

, а затем попытался изменить его на:

channel.overwritePermissions(role, {
  bitfield: perms
});

Он просто ставит / для каждого разрешения.

1 Ответ

0 голосов
/ 30 сентября 2018

Согласно документам стабильной ветви, использование GuildChannel.overwritePermissions() отличается от вашего:

GuildChannel.overwritePermissions(your_role, {
  VIEW_CHANNEL: false,
  SEND_MESSAGES: null,
  PERMISSIONS_WRITTEN_IN_THIS_FORMAT: true
});

Для преобразования битового полядля имени разрешения вы можете использовать Permissions.FLAGS, объект, который содержит все значения битового поля для каждого разрешения.Вот текущий:

{ CREATE_INSTANT_INVITE: 1,
KICK_MEMBERS: 2,
BAN_MEMBERS: 4,
ADMINISTRATOR: 8,
MANAGE_CHANNELS: 16,
MANAGE_GUILD: 32,
ADD_REACTIONS: 64,
VIEW_AUDIT_LOG: 128,
PRIORITY_SPEAKER: 256,
VIEW_CHANNEL: 1024,
READ_MESSAGES: 1024,
SEND_MESSAGES: 2048,
SEND_TTS_MESSAGES: 4096,
MANAGE_MESSAGES: 8192,
EMBED_LINKS: 16384,
ATTACH_FILES: 32768,
READ_MESSAGE_HISTORY: 65536,
MENTION_EVERYONE: 131072,
EXTERNAL_EMOJIS: 262144,
USE_EXTERNAL_EMOJIS: 262144,
CONNECT: 1048576,
SPEAK: 2097152,
MUTE_MEMBERS: 4194304,
DEAFEN_MEMBERS: 8388608,
MOVE_MEMBERS: 16777216,
USE_VAD: 33554432,
CHANGE_NICKNAME: 67108864,
MANAGE_NICKNAMES: 134217728,
MANAGE_ROLES: 268435456,
MANAGE_ROLES_OR_PERMISSIONS: 268435456,
MANAGE_WEBHOOKS: 536870912,
MANAGE_EMOJIS: 1073741824 }

Чтобы получить имя разрешения, вы можете просто работать в обратном направлении:

function getPermName(bitfield = 0) {
  for (let key in Discord.Permissions.FLAGS) 
    if (Discord.Permissions.FLAGS[key] == bitfield) return key;
  return null;
}

После того, как вы получили имя, вы можете использовать его, как показано выше.

...