Files
discord-decomp/modules/channel_permissions/ChannelPermissionsUtils.tsx
T
2026-11-01 12:12:55 +02:00

487 lines
14 KiB
TypeScript

// Metro module 8277 (f8278).
import { isGuildVocalChannelType } from "../../records/ChannelRecord";
import { isGuildOwner } from "../../records/GuildRecord";
import { hasPermission, isEveryoneRole } from "../../records/GuildRoleRecord";
import GuildMemberStore from "../../stores/GuildMemberStore";
import UserStore from "../../stores/UserStore";
import { RowType } from "./ChannelPermissionsConstants";
import { Permissions, DEFAULT_ROLE_COLOR_HEX, ChannelTypes } from "../../Constants";
import { compareGuildRoles } from "../../utils/GuildRoleUtils";
import { intl, t } from "../../intl/index.native";
import { has, remove, add } from "../../_bundle/HighLow";
import SnowflakeUtils from "../../utils/SnowflakeUtils";
import UserUtils from "../../utils/UserUtils";
import { isNotNullish } from "../../utils/GlobalUtils";
import { makeEveryoneOverwrite, NONE } from "../../utils/PermissionUtils";
import { updatePermission, savePermissionUpdates } from "../../actions/ChannelSettingsPermissionsActionCreators";
import { PermissionOverwriteType } from "../../flow/Server";
import { permissionOverwriteForRole, permissionOverwriteForUser } from "../../utils/ChannelUtils";
function $mk80289($env) {
return (a0) => {
const r5 = $env.$parent;
let r14 = (0, r5[6])(a0, r5[11].ADMINISTRATOR);
if (!r14) {
const r15 = $env;
const r9 = r15[0];
const id = a0.id;
const r12 = r15[1];
const r10 = r15[2];
const currentUser = r5[9].getCurrentUser();
const r3 = currentUser == null;
let r1 = false;
if (!r3) {
if (r9 == null) {
r1 = currentUser.id !== id;
} else {
let r19 = r9.permissionOverwrites[id];
if ((r10 == null ? void 0 : r10[id]) != null) {
r19 = r10[id];
}
r1 = r19 == null || !(0, r5[2])(r5[3][9]).has(r19.allow, r12);
}
}
r14 = r1 ? !r1 : !(0, r5[7])(a0);
}
return r14;
};
}
function $mk80290($env) {
return (a0) => {
const r5 = $env;
const r7 = $env.$parent;
let r15 = (0, r7[6])(a0, r7[11].ADMINISTRATOR);
if (!r15) {
const r10 = r5[0];
const id = a0.id;
const r13 = r5[1];
const r11 = r5[2];
const currentUser = r7[9].getCurrentUser();
const r3 = currentUser == null;
let r1 = false;
if (!r3) {
if (r10 == null) {
r1 = currentUser.id !== id;
} else {
let r19 = r10.permissionOverwrites[id];
if ((r11 == null ? void 0 : r11[id]) != null) {
r19 = r11[id];
}
r1 = r19 == null || !(0, r7[2])(r7[3][9]).has(r19.allow, r13);
}
}
r15 = r1 ? !r1 : !(0, r7[7])(a0);
}
if (!r15) {
const r34 = r7[2];
const r35 = r7[3];
r15 = r34(r35[9]).has(r34(r35[9]).combine(a0.permissions, r5[0].permissionOverwrites[a0.id]?.allow), r5[1]);
}
return r15;
};
}
function $mk80291($env) {
return (a0) => {
const r6 = $env;
const r5 = $env.$parent;
const r9 = r6[0];
const id = a0.id;
const r12 = r6[2];
const r10 = r6[3];
const currentUser = r5[9].getCurrentUser();
const r2 = currentUser == null;
let r0 = false;
if (!r2) {
if (r9 == null) {
r0 = currentUser.id !== id;
} else {
let r15 = r9.permissionOverwrites[id];
if ((r10 == null ? void 0 : r10[id]) != null) {
r15 = r10[id];
}
r0 = r15 == null || !(0, r5[2])(r5[3][9]).has(r15.allow, r12);
}
}
return r0 ? (0, r5[5])(r6[1], a0) : !r0;
};
}
let sortRoles, getMemberRowData, sortMembers;
let env5272 = {};
export function getRoleRowData(a0, r5 = false) {
const rowType = hasPermission(a0, Permissions.ADMINISTRATOR) ? RowType.ADMINISTRATOR : RowType.ROLE;
let colorString = a0.colorString;
if (colorString == null) {
colorString = DEFAULT_ROLE_COLOR_HEX;
}
return {
rowType,
colorString,
name: a0.name,
id: a0.id,
disabled: hasPermission(a0, Permissions.ADMINISTRATOR) || r5,
key: `${rowType}:${a0.id}`,
tags: a0.tags
};
}
sortRoles = function sortRoles(a0, a1) {
const hasPermission2 = hasPermission(a0, Permissions.ADMINISTRATOR);
let r0 = 1;
const r1 = hasPermission2 ? 0 : 1;
if (hasPermission(a1, Permissions.ADMINISTRATOR)) {
r0 = 0;
}
return r1 !== r0 ? r1 - r0 : compareGuildRoles(a0, a1);
};
getMemberRowData = function getMemberRowData(a0, a1) {
const rowType = isGuildOwner(a1, a0) ? RowType.OWNER : RowType.MEMBER;
let name = GuildMemberStore.getNick(a1.id, a0.id);
if (name == null) {
name = UserUtils.getName(a0);
}
return {
rowType,
name,
username: UserUtils.getUserTag(a0),
id: a0.id,
avatarURL: a0.getAvatarURL(a1.id, 24),
bot: a0.bot,
verifiedBot: a0.isVerifiedBot(),
disabled: isGuildOwner(a1, a0),
key: `${rowType}:${a0.id}`
};
};
sortMembers = function sortMembers(a0, a1) {
return a0.rowType !== a1.rowType ? a0.rowType - a1.rowType : a0.name.toLocaleLowerCase().localeCompare(a1.name.toLocaleLowerCase());
};
export { sortRoles };
export function getNoRolesRow(name = intl.string(t["gnsna/"])) {
return [{
rowType: RowType.EMPTY_STATE,
colorString: DEFAULT_ROLE_COLOR_HEX,
name,
disabled: true,
id: "EMPTY_STATE"
}];
}
export function isEveryoneRoleId(a0, a1) {
return SnowflakeUtils.castGuildIdAsEveryoneGuildRoleId(a0) === a1;
}
export function getRolesRows(a0, a1, c16444_0, c16444_1, r3 = () => true) {
let c16444_2;
c16444_2 = r3;
return a1.filter((item) => {
const r15 = (0, hasPermission)(item, Permissions.ADMINISTRATOR);
let r16 = !r15;
if (!r15) {
const id = item.id;
const currentUser = UserStore.getCurrentUser();
const r3 = currentUser == null;
let r1 = false;
if (!r3) {
if (c16444_0 == null) {
r1 = currentUser.id !== id;
} else {
const r20 = c16444_0.permissionOverwrites[id];
r1 = r20 == null || !has(r20.allow, c16444_1);
}
}
r16 = r1;
}
if (r16) {
r16 = !(0, isEveryoneRole)(item);
}
if (r16) {
r16 = c16444_2(item.name);
}
return r16;
}).sort(sortRoles).map((item) => getRoleRowData(item));
}
export function getRolesRowsWithPermissionDisabled(a0, a1, c16445_0, c16445_1, r3 = () => true) {
let c16445_2;
c16445_2 = r3;
return a1.filter((item) => {
const r15 = (0, hasPermission)(item, Permissions.ADMINISTRATOR);
let r16 = !r15;
if (!r15) {
const id = item.id;
const currentUser = UserStore.getCurrentUser();
const r3 = currentUser == null;
let r1 = false;
if (!r3) {
if (c16445_0 == null) {
r1 = currentUser.id !== id;
} else {
const r20 = c16445_0.permissionOverwrites[id];
r1 = r20 == null || !has(r20.allow, c16445_1);
}
}
r16 = r1;
}
if (r16) {
r16 = !(0, isEveryoneRole)(item);
}
if (r16) {
r16 = c16445_2(item.name);
}
return r16;
}).sort(sortRoles).map((item) => getRoleRowData(item, (0, hasPermission)(item, c16445_1)));
}
export function getExistingRoles(a0, a1, a2, a3, a4) {
let env16441;
const r0 = env16441 = {
$parent: env5272
};
env16441[0] = a2;
env16441[1] = a3;
env16441[2] = a4;
return a1.filter($mk80289(r0));
}
export function getAllExistingRolesWithPermission(a0, a1, a2, a3, a4) {
let env16442;
const r0 = env16442 = {
$parent: env5272
};
env16442[0] = a2;
env16442[1] = a3;
env16442[2] = a4;
return a1.filter($mk80290(r0));
}
export function getExistingRolesRows(a0, a1, a2, a3, a4) {
let env16446;
const r2 = env16446 = {
$parent: env5272
};
env16446[0] = a2;
env16446[1] = a3;
env16446[2] = a4;
let r19 = a1.filter($mk80289(r2)).sort(sortRoles).map((item) => getRoleRowData(item));
if (r19.length === 0) {
let name = intl.string(t.nZfHsf);
if (name === void 0) {
name = intl.string(t["gnsna/"]);
}
r19 = [{
rowType: RowType.EMPTY_STATE,
colorString: DEFAULT_ROLE_COLOR_HEX,
name,
disabled: true,
id: "EMPTY_STATE"
}];
}
return r19;
}
export function getExistingRolesRowWithPermissionDisabled(a0, a1, a2, a3, a4) {
let env16448;
const r3 = env16448 = {
$parent: env5272
};
env16448[0] = a2;
env16448[1] = a3;
env16448[2] = a4;
let r18 = a1.filter($mk80290(r3)).sort(sortRoles).map((item) => getRoleRowData(item, (0, hasPermission)(item, a3)));
if (r18.length === 0) {
let name = intl.string(t.nZfHsf);
if (name === void 0) {
name = intl.string(t["gnsna/"]);
}
r18 = [{
rowType: RowType.EMPTY_STATE,
colorString: DEFAULT_ROLE_COLOR_HEX,
name,
disabled: true,
id: "EMPTY_STATE"
}];
}
return r18;
}
export function getMembersRows(a0, c16449_0, c16449_1, c16449_2, r3 = () => true) {
let c16449_3;
c16449_3 = r3;
return a0.map(UserStore.getUser).filter(isNotNullish).filter((item) => {
const isGuildOwner2 = isGuildOwner(c16449_1, item);
let r15 = !isGuildOwner2;
if (!isGuildOwner2) {
const id = item.id;
const currentUser = UserStore.getCurrentUser();
const r3 = currentUser == null;
let r1 = false;
if (!r3) {
if (c16449_0 == null) {
r1 = currentUser.id !== id;
} else {
const r19 = c16449_0.permissionOverwrites[id];
r1 = r19 == null || !has(r19.allow, c16449_2);
}
}
r15 = r1;
}
if (r15) {
let r33 = GuildMemberStore.getNick(c16449_1.id, item.id);
if (r33 == null) {
r33 = UserUtils.getName(item);
}
r15 = c16449_3(r33) || c16449_3(item.username) || c16449_3(item.discriminator);
}
return r15;
}).map((item) => getMemberRowData(item, c16449_1)).sort(sortMembers);
}
export function getExistingMembers(a0, a1, a2, a3, a4) {
let env16443;
const r1 = env16443 = {
$parent: env5272
};
env16443[0] = a1;
env16443[1] = a2;
env16443[2] = a3;
env16443[3] = a4;
return a0.map(UserStore.getUser).filter(isNotNullish).filter($mk80291(r1));
}
export function getExistingMembersRows(a0, a1, a2, a3, a4) {
let env16451;
const r3 = env16451 = {
$parent: env5272
};
env16451[0] = a1;
env16451[1] = a2;
env16451[2] = a3;
env16451[3] = a4;
return a0.map(UserStore.getUser).filter(isNotNullish).filter($mk80291(r3)).map((item) => getMemberRowData(item, a2)).sort(sortMembers);
}
export function getRowTypeLabel(a0, a1) {
if (RowType.ROLE === a0) {
return intl.string(t.ZxoFOG);
}
if (RowType.OWNER === a0) {
return intl.string(t.NWhYJg);
}
if (RowType.ADMINISTRATOR === a0) {
return intl.string(t["dwlcc+"]);
}
if (RowType.MEMBER === a0) {
return a1 ? intl.string(t.UAJxZi) : null;
}
if (RowType.USER === a0) {
return intl.string(t.KD6OJJ);
}
if (RowType.GUILD === a0) {
return intl.string(t["5qyruI"]);
}
if (RowType.EMPTY_STATE === a0) {
return null;
}
}
export function getRemoveTooltipHint(a0) {
if (RowType.ROLE === a0) {
return intl.string(t["Gzc/a8"]);
}
if (RowType.OWNER === a0) {
return intl.string(t.icuNBM);
}
if (RowType.ADMINISTRATOR === a0) {
return intl.string(t.eTmN5a);
}
if (RowType.MEMBER === a0) {
return intl.string(t["Gzc/a8"]);
}
RowType.EMPTY_STATE;
return null;
}
export function flipEveryonePermission(a0, a1, a2) {
let r11 = a0.permissionOverwrites[a0.guild_id];
if (r11 == null) {
r11 = makeEveryoneOverwrite(a0.guild_id);
}
const r20 = {
...r11
};
r20.deny = remove(r20.deny, a1);
r20.allow = remove(r20.allow, a1);
if (!a2) {
r20.deny = add(r20.deny, a1);
}
return r20;
}
export function toggleChannelEveryonePermission(a0, a1, a2) {
let r16 = a0.permissionOverwrites[a0.guild_id];
if (r16 == null) {
r16 = makeEveryoneOverwrite(a0.guild_id);
}
const r23 = {
...r16
};
r23.deny = remove(r23.deny, a1);
r23.allow = remove(r23.allow, a1);
if (!a2) {
r23.deny = add(r23.deny, a1);
}
updatePermission(a0, r23.id, r23.allow, r23.deny);
}
export function grantUserChannelAccess(a0, a1) {
const currentUser = UserStore.getCurrentUser();
if (currentUser != null) {
const r19 = a0.permissionOverwrites[currentUser.id];
if (r19 == null) {
return savePermissionUpdates(a0.id, [{
id: currentUser.id,
type: PermissionOverwriteType.MEMBER,
allow: add(NONE, a1),
deny: NONE
}], true);
}
const { allow, deny } = r19;
return updatePermission(a0, r19.id, add(allow, a1), deny);
}
}
export function isPrivateGuildChannel(a0, a1) {
if (a0 == null) {
return false;
}
let r8 = a0.permissionOverwrites[a0.guild_id];
if ((a1 == null ? void 0 : a1[a0.guild_id]) != null) {
r8 = a1[a0.guild_id];
}
return r8 != null && has(r8.deny, a0.accessPermissions);
}
export function isPrivateTextChannel(a0) {
const r6 = a0.permissionOverwrites[a0.guild_id];
return r6 != null && a0.type === ChannelTypes.GUILD_TEXT && has(r6.deny, Permissions.VIEW_CHANNEL);
}
export function canCreatePrivateChannel(a0, a1, a2) {
const GUILD_TEXT = ChannelTypes.GUILD_TEXT;
let r1 = a1;
if (a0 !== GUILD_TEXT) {
const GUILD_ANNOUNCEMENT = ChannelTypes.GUILD_ANNOUNCEMENT;
r1 = a1;
if (a0 !== GUILD_ANNOUNCEMENT) {
const r9 = (0, isGuildVocalChannelType)(a0);
r1 = (r9 ? !r9 : a0 !== ChannelTypes.GUILD_CATEGORY) || (a1 ? a2 : a1);
}
}
return r1;
}
export function getPrivateChannelHintText(a0) {
if (ChannelTypes.GUILD_TEXT !== a0 && ChannelTypes.GUILD_ANNOUNCEMENT !== a0) {
if (ChannelTypes.GUILD_VOICE === a0) {
return intl.format(t.iZAMty, {});
}
if (ChannelTypes.GUILD_CATEGORY === a0) {
return intl.format(t.PhnARV, {});
}
return null;
}
return intl.format(t.ZDtA0T, {});
}
export function extractPermissionOverwrites(a0, c16452_0) {
const r5 = [];
let c16452_1 = r5;
Object.values(a0).forEach(({ row }) => {
if (row.id != null && row.id !== "") {
if (row.rowType === RowType.ROLE) {
c16452_1.push(permissionOverwriteForRole(row.id, c16452_0));
} else if (row.rowType === RowType.MEMBER) {
c16452_1.push(permissionOverwriteForUser(row.id, c16452_0));
}
}
});
return r5;
}