472 lines
17 KiB
TypeScript
472 lines
17 KiB
TypeScript
// 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));
|
|
}
|