getOverrides static method

List<int> getOverrides(
  1. Member member,
  2. GuildChannel channel
)

Returns List of channel permissions overrides for given member.

Implementation

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

  try {
    final publicOverride = channel.permissionOverrides.firstWhere((ov) => ov.id == member.guild.getFromCache()?.everyoneRole.id);
    allowRaw = publicOverride.allow;
    denyRaw = publicOverride.deny;
    // ignore: avoid_catches_without_on_clauses, empty_catches
  } on Error { }

  var allowRole = 0;
  var denyRole = 0;

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

      denyRole |= channelOverride.deny;
      allowRole |= channelOverride.allow;
      // ignore: avoid_catches_without_on_clauses, empty_catches
    } on Error { }
  }

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

  // TODO: NNBD: try-catch in where
  try {
    final memberOverride = channel.permissionOverrides.firstWhere((g) => g.id == member.id);

    allowRaw = (allowRaw & ~memberOverride.deny) | memberOverride.allow;
    denyRaw = (denyRaw & ~memberOverride.allow) | memberOverride.deny;
    // ignore: avoid_catches_without_on_clauses, empty_catches
  } on Error { }

  return [allowRaw, denyRaw];
}