This commit is contained in:
Skillz
2020-11-18 12:52:46 -05:00
parent 5e38843418
commit 9e49d8da11
7 changed files with 27 additions and 19 deletions
+3 -1
View File
@@ -112,7 +112,9 @@ export async function handleInternalGuildMembersChunk(data: DiscordPayload) {
if (payload.chunk_index + 1 === payload.chunk_count) { if (payload.chunk_index + 1 === payload.chunk_count) {
cache.fetchAllMembersProcessingRequests.delete(payload.nonce); cache.fetchAllMembersProcessingRequests.delete(payload.nonce);
resolve(await cacheHandlers.filter("members", (m) => m.guilds.has(guild.id))); resolve(
await cacheHandlers.filter("members", (m) => m.guilds.has(guild.id)),
);
} }
} }
} }
+4 -4
View File
@@ -29,16 +29,16 @@ export async function handleInternalGuildRoleDelete(data: DiscordPayload) {
eventHandlers.roleDelete?.(guild, cachedRole); eventHandlers.roleDelete?.(guild, cachedRole);
// For bots without GUILD_MEMBERS member.roles is never updated breaking permissions checking. // For bots without GUILD_MEMBERS member.roles is never updated breaking permissions checking.
cacheHandlers.forEach("members", member => { cacheHandlers.forEach("members", (member) => {
// Not in the relevant guild so just skip. // Not in the relevant guild so just skip.
if (!member.guilds.has(guild.id)) return; if (!member.guilds.has(guild.id)) return;
member.guilds.forEach(g => { member.guilds.forEach((g) => {
// Member does not have this role // Member does not have this role
if (!g.roles.includes(payload.role_id)) return; if (!g.roles.includes(payload.role_id)) return;
// Remove this role from the members cache // Remove this role from the members cache
g.roles = g.roles.filter(id => id !== payload.role_id); g.roles = g.roles.filter((id) => id !== payload.role_id);
}) });
}); });
} }
+2 -2
View File
@@ -15,9 +15,9 @@ import {
import { Errors } from "../types/errors.ts"; import { Errors } from "../types/errors.ts";
import { RawOverwrite } from "../types/guild.ts"; import { RawOverwrite } from "../types/guild.ts";
import { MessageCreateOptions } from "../types/message.ts"; import { MessageCreateOptions } from "../types/message.ts";
import { Permissions, Permission } from "../types/permission.ts"; import { Permission, Permissions } from "../types/permission.ts";
import { endpoints } from "../utils/constants.ts"; import { endpoints } from "../utils/constants.ts";
import { botHasChannelPermissions, } from "../utils/permissions.ts"; import { botHasChannelPermissions } from "../utils/permissions.ts";
/** Checks if a channel overwrite for a user id or a role id has permission in this channel */ /** Checks if a channel overwrite for a user id or a role id has permission in this channel */
export function channelOverwriteHasPermission( export function channelOverwriteHasPermission(
+9 -3
View File
@@ -16,7 +16,9 @@ export async function memberIDHasPermission(
if (memberID === guild.ownerID) return true; if (memberID === guild.ownerID) return true;
const member = (await cacheHandlers.get("members", memberID))?.guilds.get(guildID); const member = (await cacheHandlers.get("members", memberID))?.guilds.get(
guildID,
);
if (!member) return false; if (!member) return false;
return memberHasPermission(memberID, guild, member.roles, permissions); return memberHasPermission(memberID, guild, member.roles, permissions);
@@ -74,7 +76,9 @@ export async function botHasPermission(
if (permissionBits & BigInt(Permissions.ADMINISTRATOR)) return true; if (permissionBits & BigInt(Permissions.ADMINISTRATOR)) return true;
return permissions.every((permission) => permissionBits & BigInt(Permissions[permission])); return permissions.every((permission) =>
permissionBits & BigInt(Permissions[permission])
);
} }
/** Checks if the bot has the permissions in a channel */ /** Checks if the bot has the permissions in a channel */
@@ -105,7 +109,9 @@ export async function hasChannelPermissions(
return true; return true;
} }
const member = (await cacheHandlers.get("members", memberID))?.guilds.get(guild.id); const member = (await cacheHandlers.get("members", memberID))?.guilds.get(
guild.id,
);
if (!member) return false; if (!member) return false;
let memberOverwrite: RawOverwrite | undefined; let memberOverwrite: RawOverwrite | undefined;