getOverrides static method

List<int> getOverrides(
  1. IMember member,
  2. IGuildChannel channel
)

Returns List of channel permissions overrides for given member.

Implementation

static List<int> getOverrides(IMember member, IGuildChannel channel) {
  var allowRaw = 0;
  var denyRaw = 0;

  final publicOverride = channel.permissionOverrides.firstWhereSafe((ov) => ov.id == member.guild.getFromCache()?.everyoneRole.id);

  if (publicOverride != null) {
    allowRaw = publicOverride.allow;
    denyRaw = publicOverride.deny;
  }

  var allowRole = 0;
  var denyRole = 0;

  for (final role in member.roles) {
    final channelOverride = channel.permissionOverrides.firstWhereSafe((f) => f.id == role.id);

    if (channelOverride != null) {
      denyRole |= channelOverride.deny;
      allowRole |= channelOverride.allow;
    }
  }

  allowRaw = (allowRaw & ~denyRole) | allowRole;
  denyRaw = (denyRaw & ~allowRole) | denyRole;

  final memberOverride = channel.permissionOverrides.firstWhereSafe((g) => g.id == member.id);

  if (memberOverride != null) {
    allowRaw = (allowRaw & ~memberOverride.deny) | memberOverride.allow;
    denyRaw = (denyRaw & ~memberOverride.allow) | memberOverride.deny;
  }

  return [allowRaw, denyRaw];
}