// Metro module 3817 (f3818). import ImpersonateStore from "../modules/impersonate/ImpersonateStore"; import LurkingStore from "../modules/lurker_mode/LurkingStore"; import StageInstanceStore from "../modules/stage_channels/StageInstanceStore"; import JoinedThreadsStore from "../modules/threads/JoinedThreadsStore"; import { ChannelRecordBase, THREAD_CHANNEL_TYPES } from "../records/ChannelRecord"; import { isGuildOwner, isGuildOwnerWithRequiredMfaLevel } from "../records/GuildRecord"; import UserRecord from "../records/UserRecord"; import ChannelStore from "./ChannelStore"; import GuildMemberStore from "./GuildMemberStore"; import GuildStore from "./GuildStore"; import UserStore from "./UserStore"; import { Permissions } from "../Constants"; import { MemberSafetyPagePermissions } from "../modules/guild_mod_dash_member_safety/MemberSafetyConstants"; import * as _PermissionUtils from "../utils/PermissionUtils"; import { applyThreadPermissions, VIEW_GUILD_SETTINGS } from "../utils/PermissionUtils"; import Module12 from "../_bundle/Module12"; import { doesThreadMembersActionAffectMe } from "../modules/threads/ThreadActionUtils"; import { isGuildRecord } from "../utils/GuildRecordUtils"; import Module589 from "../_bundle/Module589"; import { hasAny, has } from "../_bundle/HighLow"; import BasicPermissionUtils from "../utils/BasicPermissionUtils"; import Dispatcher from "../Dispatcher"; let c2156_19, c2156_20, c2156_21, c2156_22, updateGuildVersion, computePermissions2; const getUncachedChannelPermissions = function getUncachedChannelPermissions(a0, checkElevated = true) { let r35, NONE; const currentUser = UserStore.getCurrentUser(); if (currentUser == null) { return _PermissionUtils.NONE; } const channel = ChannelStore.getChannel(a0); if (channel == null) { return _PermissionUtils.NONE; } const guildId = channel.getGuildId(); const r18 = guildId != null && (LurkingStore.isLurking(guildId) || GuildMemberStore.getMember(guildId, currentUser.id)?.isPending); L23: { if (!channel.isScheduledForDeletion() && (!r18 && (Module12.isEmpty(channel.permissionOverwrites) && guildId != null))) { r35 = c2156_19[guildId]; if (r35 != null) { break L23; } const currentUser2 = UserStore.getCurrentUser(); if (currentUser2 == null) { r35 = _PermissionUtils.NONE; break L23; } const guild = GuildStore.getGuild(guildId); if (guild == null) { NONE = _PermissionUtils.NONE; } else { NONE = _PermissionUtils.computePermissions({ user: currentUser2, context: guild, checkElevated: true }); c2156_19[guildId] = NONE; } r35 = NONE; } else { r35 = _PermissionUtils.computePermissions({ user: currentUser, context: channel, checkElevated }); } } return r35; }; updateGuildVersion = function updateGuildVersion(a0) { if (a0 != null) { let r5 = c2156_21[a0]; if (r5 == null) { r5 = 0; } c2156_21[a0] = r5 + 1; } }; const handleConnectionOpen = function handleConnectionOpen() { c2156_19 = {}; c2156_20 = {}; for (const key in c2156_21) { c2156_21[key] = c2156_21[key] + 1; } c2156_22 = c2156_22 + 1; }; const handleGuild = function handleGuild() { c2156_19 = {}; c2156_20 = {}; for (const key in c2156_21) { c2156_21[key] = c2156_21[key] + 1; } c2156_22 = c2156_22 + 1; }; const handleGuildMemberUpdate = function handleGuildMemberUpdate(a0) { if (a0.user.id !== UserStore.getCurrentUser()?.id) { return false; } c2156_19 = {}; c2156_20 = {}; for (const key in c2156_21) { c2156_21[key] = c2156_21[key] + 1; } c2156_22 = c2156_22 + 1; }; const handleThreadAction = function handleThreadAction() { return true; }; const handleSearchMessagesSuccess = function handleSearchMessagesSuccess(a0) { return a0.data.some((a0) => { const messages = a0.messages; return a0.threads.length > 0 || messages.some((message) => message.some((item) => item.thread != null)); }); }; const handleGuildRole = function handleGuildRole({ guildId }) { delete c2156_19[guildId]; Module12.forEach(ChannelStore.getMutableBasicGuildChannelsForGuild(guildId), (a0) => { delete c2156_20[a0.id]; }); c2156_22 = c2156_22 + 1; if (guildId != null) { let r21 = c2156_21[guildId]; if (r21 == null) { r21 = 0; } c2156_21[guildId] = r21 + 1; } }; const handleStageInstancesChanged = function handleStageInstancesChanged(a0) { const channel = ChannelStore.getChannel(a0.instance.channel_id); if (channel == null) { return false; } const r20 = _PermissionUtils.computePermissions({ user: UserStore.getCurrentUser(), context: channel }); if (r20 === c2156_20[channel.id]) { return false; } c2156_20[channel.id] = r20; c2156_22 = c2156_22 + 1; }; const handleImpersonateUpdate = function handleImpersonateUpdate({ guildId }) { delete c2156_19[guildId]; Module12.forEach(ChannelStore.getMutableBasicGuildChannelsForGuild(guildId), (a0) => { delete c2156_20[a0.id]; }); c2156_22 = c2156_22 + 1; if (guildId != null) { let r21 = c2156_21[guildId]; if (r21 == null) { r21 = 0; } c2156_21[guildId] = r21 + 1; } }; computePermissions2 = function computePermissions(a0, a1, a2, a3) { let NONE2; let NONE = _PermissionUtils.NONE; if (a0 instanceof ChannelRecordBase) { if (THREAD_CHANNEL_TYPES.has(a0.type)) { const channel = ChannelStore.getChannel(a0.parent_id); return channel == null ? _PermissionUtils.NONE : applyThreadPermissions(a0, computePermissions2(channel, a1, a2, a3), JoinedThreadsStore.hasJoined(a0.id), GuildMemberStore.isCurrentUserGuest(a0.guild_id)); } const id2 = a0.id; let r51 = c2156_20[id2]; if (r51 == null) { const uncachedChannelPermissions = getUncachedChannelPermissions(id2, true); c2156_20[id2] = uncachedChannelPermissions; r51 = uncachedChannelPermissions; } NONE = r51; } else if (isGuildRecord(a0)) { const id = a0.id; let r31 = c2156_19[id]; if (r31 == null) { const currentUser = UserStore.getCurrentUser(); if (currentUser == null) { r31 = _PermissionUtils.NONE; } else { const guild = GuildStore.getGuild(id); if (guild == null) { NONE2 = _PermissionUtils.NONE; } else { NONE2 = _PermissionUtils.computePermissions({ user: currentUser, context: guild, checkElevated: true }); c2156_19[id] = NONE2; } r31 = NONE2; } } NONE = r31; } if (!(a1 === void 0 && (a2 === void 0 && a3 === void 0))) { NONE = _PermissionUtils.computePermissions({ user: UserStore.getCurrentUser(), context: a0, overwrites: a1, roles: a2, checkElevated: true, excludeGuildPermissions: a3 }); } return NONE; }; c2156_19 = {}; c2156_20 = {}; c2156_21 = {}; c2156_22 = 0; class PermissionStore extends Module589.Store { static displayName = "PermissionStore"; initialize() { this.waitFor(ChannelStore, GuildMemberStore, GuildStore, ImpersonateStore, JoinedThreadsStore, LurkingStore, StageInstanceStore, UserStore); } getChannelPermissions(a0) { let r10; if (THREAD_CHANNEL_TYPES.has(a0.type)) { r10 = getUncachedChannelPermissions(a0.id); } else { const id = a0.id; r10 = c2156_20[id]; if (r10 == null) { const uncachedChannelPermissions = getUncachedChannelPermissions(id, true); c2156_20[id] = uncachedChannelPermissions; r10 = uncachedChannelPermissions; } } return r10; } getGuildPermissions({ id }) { let NONE; let r11 = c2156_19[id]; if (r11 == null) { const currentUser = UserStore.getCurrentUser(); if (currentUser == null) { r11 = _PermissionUtils.NONE; } else { const guild = GuildStore.getGuild(id); if (guild == null) { NONE = _PermissionUtils.NONE; } else { NONE = _PermissionUtils.computePermissions({ user: currentUser, context: guild, checkElevated: true }); c2156_19[id] = NONE; } r11 = NONE; } } return r11; } getGuildPermissionProps(a0) { const currentUser = UserStore.getCurrentUser(); return { canManageGuild: this.can(Permissions.MANAGE_GUILD, a0), canManageChannels: this.can(Permissions.MANAGE_CHANNELS, a0), canManageRoles: this.can(Permissions.MANAGE_ROLES, a0), canManageBans: this.can(Permissions.BAN_MEMBERS, a0), canManageNicknames: this.can(Permissions.MANAGE_NICKNAMES, a0), canManageGuildExpressions: this.can(Permissions.MANAGE_GUILD_EXPRESSIONS, a0) || this.can(Permissions.CREATE_GUILD_EXPRESSIONS, a0), canViewAuditLog: this.can(Permissions.VIEW_AUDIT_LOG, a0), canViewAuditLogV2: this.can(Permissions.VIEW_AUDIT_LOG, a0), canManageWebhooks: this.can(Permissions.MANAGE_WEBHOOKS, a0), canViewGuildAnalytics: this.can(Permissions.VIEW_GUILD_ANALYTICS, a0), canAccessMembersPage: this.canAccessMemberSafetyPage(a0), isGuildAdmin: this.can(Permissions.ADMINISTRATOR, a0), isOwner: currentUser != null && isGuildOwner(a0, currentUser), isOwnerWithRequiredMfaLevel: currentUser != null && isGuildOwnerWithRequiredMfaLevel(a0, currentUser), guild: a0 }; } canAccessMemberSafetyPage({ id }) { let NONE; let r17 = c2156_19[id]; if (r17 == null) { const currentUser = UserStore.getCurrentUser(); if (currentUser == null) { r17 = _PermissionUtils.NONE; } else { const guild = GuildStore.getGuild(id); if (guild == null) { NONE = _PermissionUtils.NONE; } else { NONE = _PermissionUtils.computePermissions({ user: currentUser, context: guild, checkElevated: true }); c2156_19[id] = NONE; } r17 = NONE; } } return hasAny(r17, MemberSafetyPagePermissions); } canAccessGuildSettings({ id }) { let NONE; let r16 = c2156_19[id]; if (r16 == null) { const currentUser = UserStore.getCurrentUser(); if (currentUser == null) { r16 = _PermissionUtils.NONE; } else { const guild = GuildStore.getGuild(id); if (guild == null) { NONE = _PermissionUtils.NONE; } else { NONE = _PermissionUtils.computePermissions({ user: currentUser, context: guild, checkElevated: true }); c2156_19[id] = NONE; } r16 = NONE; } } return hasAny(r16, VIEW_GUILD_SETTINGS); } canWithPartialContext(a0, a1) { return "channelId" in a1 && typeof a1.channelId === "string" ? this.can(a0, ChannelStore.getChannel(a1.channelId)) : "guildId" in a1 && typeof a1.guildId === "string" && this.can(a0, GuildStore.getGuild(a1.guildId)); } can(a0, a1, a2, a3, a4) { return has(computePermissions2(a1, a2, a3, a4), a0); } canBasicChannel(a0, a1, a2, a3, a4) { return "basicPermissions" in a1 ? BasicPermissionUtils.has(a1.basicPermissions, a0) : has(computePermissions2(a1, a2, a3, a4), BasicPermissionUtils.asBigFlag(a0)); } computePermissions(a0, a1, a2, a3) { return computePermissions2(a0, a1, a2, a3); } computeBasicPermissions(a0) { return "basicPermissions" in a0 ? a0.basicPermissions : BasicPermissionUtils.asBasicFlag(computePermissions2(a0)); } canManageUser(a0, a1, a2) { const r16 = a1 instanceof UserRecord ? a1.id : a1; const isGuildOwner2 = isGuildOwner(a2, r16); if (isGuildOwner2) { return false; } const currentUser = UserStore.getCurrentUser(); if (this.can(a0, a2)) { const r8 = currentUser != null ? _PermissionUtils.getHighestRole(a2, currentUser.id) : void 0; const highestRole = _PermissionUtils.getHighestRole(a2, r16); return currentUser != null && _PermissionUtils.isRoleHigher(a2, currentUser.id, r8, highestRole); } return false; } getHighestRole(a0) { const currentUser = UserStore.getCurrentUser(); return currentUser != null ? _PermissionUtils.getHighestRole(a0, currentUser.id) : null; } isRoleHigher(a0, a1, a2) { const currentUser = UserStore.getCurrentUser(); return _PermissionUtils.isRoleHigher(a0, ImpersonateStore.isViewingRoles(a0.id) ? void 0 : currentUser?.id, a1, a2); } canImpersonateRole(a0, a1) { const highestRole = this.getHighestRole(a0); let r9 = this.can(Permissions.MANAGE_GUILD, a0) && this.can(Permissions.MANAGE_ROLES, a0); let r14 = this.isRoleHigher(a0, highestRole, a1); if (r9) { if (!r14) { r14 = a1.id === highestRole?.id; } r9 = r14; } return r9; } getGuildVersion(a0) { let r5 = c2156_21[a0]; if (r5 == null) { r5 = 0; } return r5; } getChannelsVersion() { return c2156_22; } } const permissionStore = new PermissionStore(Dispatcher, { BACKGROUND_SYNC: handleConnectionOpen, CONNECTION_OPEN: handleConnectionOpen, OVERLAY_INITIALIZE: handleConnectionOpen, CACHE_LOADED: handleConnectionOpen, CACHE_LOADED_LAZY: handleConnectionOpen, CONNECTION_CLOSED: function handleConnectionClose() { c2156_20 = {}; c2156_19 = {}; c2156_21 = {}; c2156_22 = 0; }, GUILD_CREATE: handleGuild, GUILD_UPDATE: handleGuild, GUILD_DELETE: handleGuild, GUILD_MEMBER_ADD: handleGuildMemberUpdate, GUILD_MEMBER_UPDATE: handleGuildMemberUpdate, CURRENT_USER_UPDATE: handleGuildMemberUpdate, CHANNEL_CREATE: function handleChannelCreate(a0) { const channel = ChannelStore.getChannel(a0.channel.id); if (channel != null && !channel.isPrivate()) { const r23 = _PermissionUtils.computePermissions({ user: UserStore.getCurrentUser(), context: channel }); if (c2156_20[channel.id] === r23) { return false; } c2156_20[channel.id] = r23; c2156_22 = c2156_22 + 1; const guildId = channel.getGuildId(); if (guildId != null) { let r32 = c2156_21[guildId]; if (r32 == null) { r32 = 0; } c2156_21[guildId] = r32 + 1; } return void 0; } return false; }, THREAD_CREATE: handleThreadAction, THREAD_UPDATE: handleThreadAction, THREAD_LIST_SYNC: handleThreadAction, LOAD_THREADS_SUCCESS: handleThreadAction, LOAD_ARCHIVED_THREADS_SUCCESS: handleThreadAction, CHANNEL_UPDATES: function handleChannelUpdates({ channels }) { let r1 = false; for (const item of channels) { const channel = ChannelStore.getChannel(item.id); if (channel != null && !channel.isPrivate()) { const currentUser = UserStore.getCurrentUser(); const context = channel; const r45 = _PermissionUtils.computePermissions({ user: currentUser, context }); if (c2156_20[context.id] !== r45) { c2156_20[channel.id] = r45; updateGuildVersion(channel.getGuildId()); r1 = true; } } } let r61 = !!r1; if (r61) { c2156_22 = c2156_22 + 1; r61 = r1; } return r61; }, LOAD_MESSAGES_SUCCESS: function handleLoadMessagesSuccess(a0) { return a0.messages.some((message) => message.thread != null); }, SEARCH_MESSAGES_SUCCESS: handleSearchMessagesSuccess, MOD_VIEW_SEARCH_MESSAGES_SUCCESS: handleSearchMessagesSuccess, THREAD_MEMBER_UPDATE: function handleThreadMemberUpdate(a0) { let r12 = UserStore.getCurrentUser()?.id === a0.userId; if (r12) { const guildId = a0.guildId; const r4 = guildId != null; r12 = true; if (r4) { let r15 = c2156_21[guildId]; if (r15 == null) { r15 = 0; } c2156_21[guildId] = r15 + 1; r12 = true; } } return r12; }, THREAD_MEMBERS_UPDATE: function handleThreadMembersUpdate(a0) { let r14 = !!doesThreadMembersActionAffectMe(a0); if (r14) { const guildId = a0.guildId; const r4 = guildId != null; r14 = true; if (r4) { let r17 = c2156_21[guildId]; if (r17 == null) { r17 = 0; } c2156_21[guildId] = r17 + 1; r14 = true; } } return r14; }, CHANNEL_DELETE: function handleChannelDelete({ channel }) { delete c2156_20[channel.id]; c2156_22 = c2156_22 + 1; const guild_id = channel.guild_id; if (guild_id != null) { let r12 = c2156_21[guild_id]; if (r12 == null) { r12 = 0; } c2156_21[guild_id] = r12 + 1; } return false; }, GUILD_ROLE_CREATE: handleGuildRole, GUILD_ROLE_UPDATE: handleGuildRole, GUILD_ROLE_DELETE: handleGuildRole, LOGOUT: function resetState() { c2156_20 = {}; c2156_19 = {}; c2156_21 = {}; c2156_22 = 0; }, STAGE_INSTANCE_CREATE: handleStageInstancesChanged, STAGE_INSTANCE_UPDATE: handleStageInstancesChanged, STAGE_INSTANCE_DELETE: handleStageInstancesChanged, IMPERSONATE_UPDATE: handleImpersonateUpdate, IMPERSONATE_STOP: handleImpersonateUpdate }); export default permissionStore;