// Metro module 3822 (f3823). import ImpersonateStore from "../modules/impersonate/ImpersonateStore"; import LurkingStore from "../modules/lurker_mode/LurkingStore"; import JoinedThreadsStore from "../modules/threads/JoinedThreadsStore"; import { ChannelRecordBase, THREAD_CHANNEL_TYPES } from "../records/ChannelRecord"; import { getGuildEveryoneRoleId, isGuildOwner } from "../records/GuildRecord"; import { hasPermission } from "../records/GuildRoleRecord"; import AuthenticationStore from "../stores/AuthenticationStore"; import ChannelStore from "../stores/ChannelStore"; import GuildMemberStore from "../stores/GuildMemberStore"; import GuildRoleStore from "../stores/GuildRoleStore"; import GuildStore from "../stores/GuildStore"; import UserStore from "../stores/UserStore"; import { ChannelTypes, EMPTY_STRING_SNOWFLAKE_ID, ElevatedPermissions, MFALevels, Permissions } from "../Constants"; import * as _HighLow from "../_bundle/HighLow"; import { add, remove, has, filter, combine, deserialize, equals } from "../_bundle/HighLow"; import Module12 from "../_bundle/Module12"; import * as _AutomodPermissionUtils from "../modules/guild_automod/AutomodPermissionUtils"; import { isMemberCommunicationDisabled } from "../modules/guild_communication_disabled/CommunicationDisabledUtils"; import SnowflakeUtils from "./SnowflakeUtils"; import { doesRoleSortHigher } from "./GuildRoleUtils"; import { PermissionOverwriteType } from "../flow/Server"; let allow, c2159_24, c2159_25, lurkerPermissionsMask, c2159_27, c2159_28, c2159_29, computePermissionsForMember, computePermissions, applyThreadPermissions, computePermissionsForRoles; const applyOverwrites = function applyOverwrites(id, member2, a2, overwrites) { let length2; const r25 = overwrites[id]; const r16 = r25 != null ? add(remove(a2, r25.deny), r25.allow) : a2; let r33 = r16; if (member2 != null) { let r34 = allow; const length = member2.roles.length; let r0 = 0; const r4 = 0 < length; let r38 = allow; let r39 = allow; let r15 = allow; if (r4) { do { const r18 = overwrites[member2.roles[r0]]; const r1 = r0; const r21 = r34; const r24 = r38; let r17 = r21; let r42 = r24; if (r18 != null) { r42 = add(r24, r18.allow); r17 = add(r21, r18.deny); } r0 = r1 + 1; length2 = member2.roles.length; r34 = r17; r38 = r42; r39 = r34; r15 = r38; } while (r0 < length2); } const r60 = add(remove(r16, r39), r15); const r62 = overwrites[member2.userId]; const r63 = r62 != null ? add(remove(r60, r62.deny), r62.allow) : r60; const r78 = has(r63, Permissions.ADMINISTRATOR); const hasAutomodQuarantinedProfile = _AutomodPermissionUtils.hasAutomodQuarantinedProfile(member2); const r86 = hasAutomodQuarantinedProfile && !r78 ? filter(r63, c2159_29) : r63; r33 = isMemberCommunicationDisabled(member2) && !r78 ? filter(r86, c2159_28) : r86; } return r33; }; computePermissionsForMember = function computePermissionsForMember(a0) { let length2; const { userId, member: member2, guild, overwrites, roles } = a0; let checkElevated = a0.checkElevated; if (checkElevated === void 0) { checkElevated = true; } const { excludeGuildPermissions = false, lurkerPermissionsMask: lurkerPermissionsMask2 = lurkerPermissionsMask } = a0; if (excludeGuildPermissions) { return applyOverwrites(guild.id, member2, allow, overwrites); } const r28 = roles != null ? { ...GuildRoleStore.getUnsafeMutableRoles(guild.id), ...roles } : GuildRoleStore.getUnsafeMutableRoles(guild.id); const r37 = r28[getGuildEveryoneRoleId(guild)]; const r38 = r37 != null ? r37.permissions : c2159_25; let r39 = r38; if (member2 != null) { const length = member2.roles.length; let r0 = 0; const r5 = 0 < length; let r42 = r38; r39 = r42; if (r5) { do { const r45 = r28[member2.roles[r0]]; const r1 = r0; const r20 = r42; const r46 = r45 !== void 0 ? add(r20, r45.permissions) : r20; r0 = r1 + 1; length2 = member2.roles.length; r42 = r46; r39 = r42; } while (r0 < length2); } } const r66 = has(r39, Permissions.ADMINISTRATOR) ? c2159_24 : applyOverwrites(guild.id, member2, r39, overwrites); const r73 = LurkingStore.isLurking(guild.id) || member2?.isPending ? filter(r66, lurkerPermissionsMask2) : r66; const r81 = GuildMemberStore.isCurrentUserGuest(guild.id) ? filter(r73, c2159_27) : r73; if (checkElevated === void 0) { checkElevated = true; } if (checkElevated) { checkElevated = guild.mfaLevel === MFALevels.ELEVATED; } if (checkElevated) { checkElevated = userId === AuthenticationStore.getId(); } return checkElevated ? UserStore.getCurrentUser()?.mfaEnabled ? r81 : remove(r81, ElevatedPermissions) : r81; }; computePermissions = function computePermissions({ user: user2, context, overwrites, roles, checkElevated = true, excludeGuildPermissions = false }) { let r62, guild, lurkerPermissionsMask2, overwrites2; if (user2 == null) { return allow; } let userId = user2; if (typeof userId !== "string") { userId = user2.id; } if (context instanceof ChannelRecordBase) { if (context.isScheduledForDeletion()) { return allow; } if (THREAD_CHANNEL_TYPES.has(context.type)) { const channel = ChannelStore.getChannel(context.parent_id); if (channel != null && !channel.isScheduledForDeletion()) { const r91 = userId === UserStore.getCurrentUser()?.id && JoinedThreadsStore.hasJoined(context.id); return applyThreadPermissions(context, computePermissions({ user: user2, context: channel, overwrites, roles, checkElevated, excludeGuildPermissions }), r91, GuildMemberStore.isCurrentUserGuest(context.guild_id)); } return allow; } let r32 = context.computeLurkerPermissionsAllowList(); if (r32 == null) { r32 = lurkerPermissionsMask; } const r33 = overwrites != null ? { ...context.permissionOverwrites, ...overwrites } : context.permissionOverwrites; const guildId = context.getGuildId(); guild = guildId != null ? GuildStore.getGuild(guildId) : null; lurkerPermissionsMask2 = r32; overwrites2 = r33; } else { overwrites2 = overwrites; if (overwrites2 == null) { overwrites2 = {}; } lurkerPermissionsMask2 = lurkerPermissionsMask; guild = context; } L43: { if (guild == null) { r62 = allow; } else { if (!(userId === UserStore.getCurrentUser()?.id && ImpersonateStore.isViewingRoles(guild.id)) && isGuildOwner(guild, userId)) { let r55 = checkElevated; if (r55 === void 0) { r55 = true; } if (r55) { r55 = guild.mfaLevel === MFALevels.ELEVATED; } if (r55) { r55 = userId === AuthenticationStore.getId(); } r62 = c2159_24; if (!r55) { break L43; } r62 = UserStore.getCurrentUser()?.mfaEnabled ? c2159_24 : remove(c2159_24, ElevatedPermissions); break L43; } r62 = computePermissionsForMember({ userId, member: GuildMemberStore.getMember(guild.id, userId), guild, overwrites: overwrites2, roles, checkElevated, excludeGuildPermissions, lurkerPermissionsMask: lurkerPermissionsMask2 }); } } return r62; }; applyThreadPermissions = function applyThreadPermissions(context, a1, a2, a3) { let r23; L16: { if (context.type === ChannelTypes.MEDIA_THREAD) { r23 = combine(Permissions.READ_MESSAGE_HISTORY, Permissions.VIEW_CHANNEL); } else { if (context.type === ChannelTypes.PRIVATE_THREAD && !a2 && !a3 && !has(a1, Permissions.MANAGE_THREADS)) { r23 = allow; break L16; } r23 = has(a1, Permissions.SEND_MESSAGES_IN_THREADS) ? context.isLockedThread() && !has(a1, Permissions.MANAGE_THREADS) ? remove(a1, Permissions.SEND_MESSAGES) : combine(a1, Permissions.SEND_MESSAGES) : remove(a1, Permissions.SEND_MESSAGES); } } return r23; }; allow = deserialize(0); c2159_24 = combine.apply(_HighLow, [...Module12.values(Permissions)]); c2159_25 = combine(Permissions.CREATE_INSTANT_INVITE, Permissions.CHANGE_NICKNAME, Permissions.VIEW_CHANNEL, Permissions.SEND_MESSAGES, Permissions.EMBED_LINKS, Permissions.ATTACH_FILES, Permissions.READ_MESSAGE_HISTORY, Permissions.MENTION_EVERYONE, Permissions.USE_EXTERNAL_EMOJIS, Permissions.USE_EXTERNAL_STICKERS, Permissions.ADD_REACTIONS, Permissions.CREATE_PUBLIC_THREADS, Permissions.CREATE_PRIVATE_THREADS, Permissions.SEND_MESSAGES_IN_THREADS, Permissions.SEND_POLLS, Permissions.CONNECT, Permissions.SPEAK, Permissions.USE_VAD, Permissions.STREAM, Permissions.USE_EMBEDDED_ACTIVITIES, Permissions.USE_SOUNDBOARD, Permissions.REQUEST_TO_SPEAK, Permissions.USE_APPLICATION_COMMANDS, Permissions.CREATE_GUILD_EXPRESSIONS, Permissions.CREATE_EVENTS, Permissions.USE_EXTERNAL_APPS); lurkerPermissionsMask = combine(Permissions.VIEW_CHANNEL, Permissions.READ_MESSAGE_HISTORY); c2159_27 = combine(Permissions.VIEW_CHANNEL, Permissions.SEND_MESSAGES, Permissions.CONNECT, Permissions.SPEAK, Permissions.STREAM, Permissions.USE_EMBEDDED_ACTIVITIES, Permissions.USE_EXTERNAL_APPS, Permissions.USE_EXTERNAL_EMOJIS, Permissions.USE_EXTERNAL_SOUNDS, Permissions.USE_EXTERNAL_STICKERS, Permissions.USE_SOUNDBOARD, Permissions.USE_VAD, Permissions.SEND_MESSAGES_IN_THREADS, Permissions.EMBED_LINKS, Permissions.ATTACH_FILES, Permissions.ADD_REACTIONS); c2159_28 = combine(Permissions.VIEW_CHANNEL, Permissions.READ_MESSAGE_HISTORY); c2159_29 = combine(Permissions.VIEW_CHANNEL, Permissions.READ_MESSAGE_HISTORY, Permissions.CHANGE_NICKNAME); const r174 = combine(Permissions.MANAGE_GUILD, Permissions.MANAGE_ROLES, Permissions.ADMINISTRATOR, Permissions.BAN_MEMBERS, Permissions.MANAGE_NICKNAMES, Permissions.CREATE_GUILD_EXPRESSIONS, Permissions.MANAGE_GUILD_EXPRESSIONS, Permissions.MANAGE_WEBHOOKS, Permissions.VIEW_AUDIT_LOG, Permissions.VIEW_GUILD_ANALYTICS); export { allow as NONE }; export { c2159_24 as ALL }; export { c2159_25 as DEFAULT }; export { r174 as VIEW_GUILD_SETTINGS }; computePermissionsForRoles = function computePermissionsForRoles({ forceRoles, context, overwrites, roles, checkElevated = true, excludeGuildPermissions }) { let guild, lurkerPermissionsMask2, overwrites2; if (context instanceof ChannelRecordBase) { if (context.isScheduledForDeletion()) { return allow; } if (THREAD_CHANNEL_TYPES.has(context.type)) { const channel = ChannelStore.getChannel(context.parent_id); return channel == null ? allow : applyThreadPermissions(context, computePermissionsForRoles({ forceRoles, context: channel, overwrites, roles, checkElevated, excludeGuildPermissions }), false, false); } let r31 = context.computeLurkerPermissionsAllowList(); if (r31 == null) { r31 = lurkerPermissionsMask; } const r33 = overwrites != null ? { ...context.permissionOverwrites, ...overwrites } : context.permissionOverwrites; const guildId = context.getGuildId(); guild = guildId != null ? GuildStore.getGuild(guildId) : null; lurkerPermissionsMask2 = r31; overwrites2 = r33; } else { overwrites2 = overwrites; if (overwrites2 == null) { overwrites2 = {}; } lurkerPermissionsMask2 = lurkerPermissionsMask; guild = context; } if (guild == null) { return allow; } return computePermissionsForMember({ userId: EMPTY_STRING_SNOWFLAKE_ID, member: { userId: EMPTY_STRING_SNOWFLAKE_ID, nick: "", guildId: guild.id, guildMemberAvatar: null, roles: SnowflakeUtils.keys(forceRoles), colorString: null, colorStrings: null, hoistRoleId: null, premiumSince: null, isPending: false, joinedAt: new Date().toISOString(), communicationDisabledUntil: null }, guild, overwrites: overwrites2, roles, checkElevated, excludeGuildPermissions, lurkerPermissionsMask: lurkerPermissionsMask2 }); }; export { computePermissionsForRoles }; export { computePermissions }; export { applyThreadPermissions }; export function areChannelsLocked(a0, a1) { if (THREAD_CHANNEL_TYPES.has(a0.type)) { return true; } const guild_id = a0.guild_id; if (a1 != null && guild_id != null && guild_id === a1.guild_id) { const r5 = { ...a0.permissionOverwrites }; let c13631_0 = r5; const r8 = { ...a1.permissionOverwrites }; let c13631_1 = r8; if (r5[guild_id] == null) { r5[guild_id] = { id: guild_id, type: PermissionOverwriteType.ROLE, allow, deny: allow }; } if (r8[guild_id] == null) { r8[guild_id] = { id: guild_id, type: PermissionOverwriteType.ROLE, allow, deny: allow }; } return Object.keys(r5).length === Object.keys(r8).length && !Object.keys(r5).some((item) => { const r8 = c13631_0[item]; const r10 = c13631_1[item]; return r10 == null || !equals(r10.deny, r8.deny) || !equals(r10.allow, r8.allow); }); } return false; } export function getGuildVisualOwnerId(a0) { const r14 = Module12.some(GuildRoleStore.getUnsafeMutableRoles(a0.id), (a0) => a0.hoist && hasPermission(a0, Permissions.ADMINISTRATOR)); let r15 = void 0; if (!r14) { let ownerId = a0.ownerId; if (ownerId == null) { ownerId = void 0; } r15 = ownerId; } return r15; } export function isRoleHigher(a0, a1, a2, a3) { const r0 = a1 == null || !isGuildOwner(a0, a1); return r0 ? a2 != null && (a3 == null || doesRoleSortHigher(a2, a3)) : !r0; } export function getHighestRole(a0, a1) { const member = GuildMemberStore.getMember(a0.id, a1); if (member != null) { return GuildRoleStore.getSortedRoles(a0.id).find((item) => member.roles.includes(item.id)); } } export function getHighestHoistedRole(a0, a1) { return a1.hoistRoleId != null ? GuildRoleStore.getRole(a0.id, a1.hoistRoleId) : null; } export function makeEveryoneOverwrite(a0) { return { id: a0, type: PermissionOverwriteType.ROLE, allow, deny: allow }; } export function canManageACategory(a0, a1, a2) { const user = a0; const r3 = { permission: Permissions.MANAGE_CHANNELS, user: a0, context: a1 }; const { permission, user: user2 } = r3; return !!has(computePermissions({ user: user2, context: r3.context, overwrites: r3.overwrites, roles: r3.roles, checkElevated: true, excludeGuildPermissions: r3.excludeGuildPermissions }), permission) || a2.some(({ channel }) => { let r13 = channel.id !== "null"; if (r13) { const r3 = { permission: Permissions.MANAGE_CHANNELS, user, context: channel }; const { permission, user: user2 } = r3; r13 = has(computePermissions({ user: user2, context: r3.context, overwrites: r3.overwrites, roles: r3.roles, checkElevated: true, excludeGuildPermissions: r3.excludeGuildPermissions }), permission); } return r13; }); } export function can(a0) { const { permission, user: user2 } = a0; return has(computePermissions({ user: user2, context: a0.context, overwrites: a0.overwrites, roles: a0.roles, checkElevated: true, excludeGuildPermissions: a0.excludeGuildPermissions }), permission); } export const ALLOW = "ALLOW"; export const DENY = "DENY"; export const PASSTHROUGH = "PASSTHROUGH"; export function canEveryoneRole(a0, a1) { let r3 = {}; const r0 = a1 instanceof ChannelRecordBase; let r10 = a1; if (r0) { if (a1.type === ChannelTypes.PRIVATE_THREAD) { return false; } const r14 = THREAD_CHANNEL_TYPES.has(a1.type); let r15 = a1; if (r14) { r15 = ChannelStore.getChannel(a1.parent_id); if (r15 == null) { return false; } } const permissionOverwrites = r15.permissionOverwrites; const guildId = r15.getGuildId(); r10 = guildId != null ? GuildStore.getGuild(guildId) : null; r3 = permissionOverwrites; } if (r10 == null) { return false; } const permissions = GuildRoleStore.getEveryoneRole(r10).permissions; const r31 = r3[r10.id]; return has(r31 != null ? add(remove(permissions, r31.deny), r31.allow) : permissions, a0); } export function canEveryone(a0, a1) { let c13634_0 = a0; let r5 = {}; const r0 = a1 instanceof ChannelRecordBase; let r8 = a1; if (r0) { if (a1.type === ChannelTypes.PRIVATE_THREAD) { return false; } const r16 = THREAD_CHANNEL_TYPES.has(a1.type); let r17 = a1; if (r16) { r17 = ChannelStore.getChannel(a1.parent_id); if (r17 == null) { return false; } } const permissionOverwrites = r17.permissionOverwrites; const guildId = r17.getGuildId(); r8 = guildId != null ? GuildStore.getGuild(guildId) : null; r5 = permissionOverwrites; } if (r8 == null) { return false; } return !!hasPermission(GuildRoleStore.getEveryoneRole(r8), a0) && !Module12.some(r5, (a0) => has(a0.deny, c13634_0)); }