This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,93 @@
// Metro module 11021 (f11022).
import GuildStore from "../../stores/GuildStore";
import { DEFAULT_LOCKDOWN_DURATION } from "./GuildAntiRaidConstants";
import { AnalyticEvents, Endpoints, GuildFeatures } from "../../Constants";
import AnalyticsUtils from "../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../app_analytics/AppAnalyticsUtils";
import GuildSettingsActionCreators from "../guild_settings/GuildSettingsActionCreators";
import Module3771 from "../../_bundle/Module3771";
import { HTTP, rejectWithMigratedError } from "../../_bundle/sendRequest";
import getGuildSafetyAlertsChannelId from "./getGuildSafetyAlertsChannelId";
export function trackReportRaidViewed(a0, raid_types = []) {
if (raid_types.length !== 0) {
AnalyticsUtils.track(AnalyticEvents.GUILD_RAID_REPORTED, {
...collectGuildAnalyticsMetadata(a0),
guild_id: a0,
raid_types
});
}
}
export async function setGuildRaidAlerts(c26908_0, c26908_1) {
const set = new Set(c26908_0.features);
if (set.has(GuildFeatures.COMMUNITY)) {
if (c26908_1) {
set.delete(GuildFeatures.RAID_ALERTS_DISABLED);
} else {
set.add(GuildFeatures.RAID_ALERTS_DISABLED);
}
} else if (c26908_1) {
set.add(GuildFeatures.NON_COMMUNITY_RAID_ALERTS);
} else {
set.delete(GuildFeatures.NON_COMMUNITY_RAID_ALERTS);
}
await GuildSettingsActionCreators.saveGuild(c26908_0.id, {
features: set
}, {
throwErr: true
});
}
export async function setGuildIncidentActions(c26909_0, c26909_1, c26909_2, c26909_3) {
const r11 = c26909_1 || c26909_2;
let DEFAULT_LOCKDOWN_DURATION2 = c26909_3;
if (c26909_3 == null) {
DEFAULT_LOCKDOWN_DURATION2 = DEFAULT_LOCKDOWN_DURATION;
}
const r31 = DEFAULT_LOCKDOWN_DURATION2;
const r13 = r11 ? Module3771().add(r31, "hours").toISOString() : null;
const body = {
invites_disabled_until: c26909_1 ? r13 : null,
dms_disabled_until: c26909_2 ? r13 : null,
lockdown_duration_hours: r11 ? r31 : null
};
return await HTTP.put({
url: Endpoints.GUILD_INCIDENT_ACTIONS(c26909_0),
body,
rejectWithError: rejectWithMigratedError()
});
}
export async function handleResolveRaid(c26910_0, alert_message_id, reason) {
let r33;
L13: {
const guild = GuildStore.getGuild(c26910_0);
const r32 = (guild != null ? getGuildSafetyAlertsChannelId(guild) : null) == null;
r33 = null;
if (r32) {
break L13;
}
return await HTTP.post({
url: Endpoints.GUILD_INCIDENT_REPORT_FALSE_ALARM(c26910_0),
body: {
alert_message_id,
reason
},
rejectWithError: rejectWithMigratedError()
});
}
return r33;
}
export async function handleReportRaid(c26911_0) {
let r31;
L13: {
const guild = GuildStore.getGuild(c26911_0);
const r30 = (guild != null ? getGuildSafetyAlertsChannelId(guild) : null) == null;
r31 = null;
if (r30) {
break L13;
}
return await HTTP.post({
url: Endpoints.GUILD_INCIDENT_REPORT_RAID(c26911_0),
rejectWithError: rejectWithMigratedError()
});
}
return r31;
}
@@ -0,0 +1,34 @@
// Metro module 7798 (f7799).
import { Permissions } from "../../_bundle/Module505";
import { intl, t } from "../../intl/index.native";
import { combine } from "../../_bundle/HighLow";
const r26 = combine(Permissions.ADMINISTRATOR, Permissions.MANAGE_GUILD, Permissions.BAN_MEMBERS, Permissions.KICK_MEMBERS, Permissions.MODERATE_MEMBERS);
export const GUILD_REPORT_RAID_MOBILE_KEY = "guild_report_raid_mobile";
export const NAGBAR_DISPLAY_MAX_HOURS = 2;
export const DEFAULT_LOCKDOWN_DURATION = 2;
export const getTimeframes = () => [{
id: "1",
value: 1,
label: intl.string(t["GA/d4I"])
}, {
id: "2",
value: 2,
label: intl.string(t["+rHFej"])
}, {
id: "4",
value: 4,
label: intl.string(t["5CNt/M"])
}, {
id: "6",
value: 6,
label: intl.string(t.oQ4PNE)
}, {
id: "12",
value: 12,
label: intl.string(t.LOQ0j6)
}, {
id: "24",
value: 24,
label: intl.string(t["W0+LsV"])
}];
export { r26 as IncidentAlertModeratorPermissions };
@@ -0,0 +1,147 @@
// Metro module 10264 (f10265).
import UserSettingsProtoStore from "../user_settings/UserSettingsProtoStore";
import GuildStore from "../../stores/GuildStore";
import PermissionStore from "../../stores/PermissionStore";
import SelectedGuildStore from "../../stores/SelectedGuildStore";
import UserStore from "../../stores/UserStore";
import GuildIncidentsStore from "./GuildIncidentsStore";
import { IncidentAlertModeratorPermissions } from "./GuildAntiRaidConstants";
import { EMPTY_STRING_SNOWFLAKE_ID, GuildFeatures } from "../../Constants";
import { useStateFromStores, useStateFromStoresArray } from "../../_bundle/defaultAreStatesEqual";
import SnowflakeUtils from "../../utils/SnowflakeUtils";
import * as _GuildAntiRaidUtils from "./GuildAntiRaidUtils";
import { hasDetectedActivity } from "./GuildAntiRaidUtils";
import { hasAny } from "../../_bundle/HighLow";
import { computePermissions } from "../../utils/PermissionUtils";
import { canReportRaid } from "./GuildAntiRaidPermissionsUtils";
const getFirstGuildIncidentId = function getFirstGuildIncidentId(a0) {
const currentUser = UserStore.getCurrentUser();
const incidentsByGuild = GuildIncidentsStore.getIncidentsByGuild();
for (const item of SnowflakeUtils.keys(incidentsByGuild).map((item) => GuildStore.getGuild(item))) {
const context = item;
if (item == null) {
continue;
}
const r47 = incidentsByGuild[context.id];
if (r47 == null) {
continue;
}
if (!hasDetectedActivity(r47) && !_GuildAntiRaidUtils.isUnderLockdown(r47)) {
continue;
}
if (_GuildAntiRaidUtils.isUnderLockdown(r47) && context.id !== a0) {
continue;
}
if (!hasAny(computePermissions({
user: currentUser,
context,
checkElevated: false
}), IncidentAlertModeratorPermissions)) {
continue;
}
return context.id;
}
return null;
};
export function useFirstGuildIncidentId() {
let stateFromStores;
const stateFromStores2 = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
stateFromStores = useStateFromStores([GuildIncidentsStore], () => GuildIncidentsStore.getIncidentsByGuild());
for (const item of useStateFromStoresArray([GuildStore], () => SnowflakeUtils.keys(stateFromStores).map((item) => GuildStore.getGuild(item)))) {
const context = item;
if (item == null) {
continue;
}
const r55 = stateFromStores[context.id];
if (r55 == null) {
continue;
}
if (!hasDetectedActivity(r55) && !_GuildAntiRaidUtils.isUnderLockdown(r55)) {
continue;
}
if (!hasAny(computePermissions({
user: stateFromStores2,
context,
checkElevated: false
}), IncidentAlertModeratorPermissions)) {
continue;
}
return context.id;
}
return null;
}
export function useGuildIncidentsState(c17817_0) {
const stateFromStores2 = useStateFromStores([GuildStore, PermissionStore], () => {
const guild = GuildStore.getGuild(c17817_0);
if (guild == null) {
return false;
}
const guildPermissions = PermissionStore.getGuildPermissions(guild);
return guildPermissions != null && hasAny(guildPermissions, IncidentAlertModeratorPermissions);
});
const stateFromStores3 = useStateFromStores([GuildIncidentsStore], () => c17817_0 != null ? GuildIncidentsStore.getGuildIncident(c17817_0) : null);
return {
shouldShowIncidentActions: stateFromStores2,
incidentData: stateFromStores3,
isUnderLockdown: stateFromStores3 != null && _GuildAntiRaidUtils.isUnderLockdown(stateFromStores3)
};
}
export function shouldShowRaidNotificationNagbar() {
const firstGuildIncidentId = getFirstGuildIncidentId(SelectedGuildStore.getGuildId());
let r11 = UserSettingsProtoStore.getGuildsProto();
if (r11 == null) {
r11 = {};
}
const r12 = firstGuildIncidentId != null ? r11[firstGuildIncidentId] : null;
const r13 = r12 != null && r12.disableRaidAlertNag;
return {
show: firstGuildIncidentId != null && !r13,
guildId: firstGuildIncidentId
};
}
export function shouldShowRaidInAppNotification() {
const firstGuildIncidentId = getFirstGuildIncidentId(SelectedGuildStore.getGuildId());
let r13 = UserSettingsProtoStore.getGuildsProto();
if (r13 == null) {
r13 = {};
}
const r14 = firstGuildIncidentId != null ? r13[firstGuildIncidentId] : null;
const r15 = r14 != null && r14.disableRaidAlertNag;
const r8 = firstGuildIncidentId != null ? GuildIncidentsStore.getGuildIncident(firstGuildIncidentId) : null;
const r18 = r8 != null && _GuildAntiRaidUtils.isUnderLockdown(r8);
return {
show: firstGuildIncidentId != null && !r18 && !r15,
guildId: firstGuildIncidentId
};
}
export function getDisabledActions(a0) {
if (a0 == null) {
return {
dmsDisabled: false,
invitesDisabled: false
};
}
const guildIncident = GuildIncidentsStore.getGuildIncident(a0.id);
return {
invitesDisabled: (a0 == null ? void 0 : a0.features.has(GuildFeatures.INVITES_DISABLED)) || guildIncident?.invitesDisabledUntil != null && new Date(guildIncident.invitesDisabledUntil) > new Date(),
dmsDisabled: guildIncident?.dmsDisabledUntil != null && new Date(guildIncident.dmsDisabledUntil) > new Date()
};
}
export function useDisabledActions(a0) {
let r11 = a0?.id;
if (r11 == null) {
r11 = EMPTY_STRING_SNOWFLAKE_ID;
}
const EMPTY_STRING_SNOWFLAKE_ID2 = r11;
const stateFromStores2 = useStateFromStores([GuildIncidentsStore], () => GuildIncidentsStore.getGuildIncident(EMPTY_STRING_SNOWFLAKE_ID2), [EMPTY_STRING_SNOWFLAKE_ID2]);
return a0 == null ? {
dmsDisabled: false,
invitesDisabled: false
} : {
invitesDisabled: (a0 == null ? void 0 : a0.features.has(GuildFeatures.INVITES_DISABLED)) || stateFromStores2?.invitesDisabledUntil != null && new Date(stateFromStores2.invitesDisabledUntil) > new Date(),
dmsDisabled: stateFromStores2?.dmsDisabledUntil != null && new Date(stateFromStores2.dmsDisabledUntil) > new Date()
};
}
export function useShowAntiRaidInGuildNotifSettings(c17819_0) {
return useStateFromStores([PermissionStore, GuildStore], () => canReportRaid(GuildStore.getGuild(c17819_0), PermissionStore));
}
@@ -0,0 +1,11 @@
// Metro module 13101 (f13102).
import { GUILD_REPORT_RAID_MOBILE_KEY } from "./GuildAntiRaidConstants";
import ModalActionCreators from "../../actions/ModalActionCreators";
export function openReportRaidModal(a0) {
ModalActionCreators.pushLazy(import("./native/GuildAntiRaidReportModal"), {
onCloseModal: function onCloseModal() {
ModalActionCreators.popWithKey(GUILD_REPORT_RAID_MOBILE_KEY);
},
guildId: a0
}, GUILD_REPORT_RAID_MOBILE_KEY);
}
@@ -0,0 +1,53 @@
// Metro module 10265 (f10266).
import PermissionStore from "../../stores/PermissionStore";
import GuildIncidentsStore from "./GuildIncidentsStore";
import { EMPTY_STRING_SNOWFLAKE_ID, Permissions } from "../../Constants";
import { useStateFromStores } from "../../_bundle/Module589";
import { hasDetectedActivity } from "./GuildAntiRaidUtils";
import { useIsMentionRaidExperimentEnabled } from "../guild_automod/ExperimentUtils";
export function canReportRaid(a0, r3 = PermissionStore) {
let r8 = r3.can(Permissions.BAN_MEMBERS, a0);
const r9 = r3;
if (!r8) {
r8 = r9.can(Permissions.KICK_MEMBERS, a0);
}
if (!r8) {
r8 = r9.can(Permissions.MODERATE_MEMBERS, a0);
}
if (!r8) {
r8 = r9.can(Permissions.MANAGE_GUILD, a0);
}
return r8;
}
export function useCanReportRaid(a0) {
const stateFromStores = useStateFromStores([PermissionStore], () => {
if (PermissionStore !== void 0) {
return PermissionStore.can(Permissions.BAN_MEMBERS, a0) || PermissionStore.can(Permissions.KICK_MEMBERS, a0) || PermissionStore.can(Permissions.MODERATE_MEMBERS, a0) || PermissionStore.can(Permissions.MANAGE_GUILD, a0);
}
}, [a0]);
const stateFromStores2 = useStateFromStores([GuildIncidentsStore], () => a0 != null ? GuildIncidentsStore.getGuildIncident(a0.id) : null, [a0]);
const r23 = stateFromStores2 != null && hasDetectedActivity(stateFromStores2);
return r23 ? !r23 : stateFromStores;
}
export function canEnableRaidAlerts(a0, r4 = PermissionStore) {
return r4.can(Permissions.MANAGE_GUILD, a0);
}
export function useCanEnableRaidAlerts(a0) {
return useStateFromStores([PermissionStore], () => {
if (PermissionStore !== void 0) {
return PermissionStore.can(Permissions.MANAGE_GUILD, a0);
}
}, [a0]);
}
export function useShowMentionRaidLimitUpsell(a0) {
const stateFromStores = useStateFromStores([PermissionStore], () => {
if (PermissionStore !== void 0) {
return PermissionStore.can(Permissions.MANAGE_GUILD, a0);
}
}, [a0]);
let r19 = a0?.id;
if (r19 == null) {
r19 = EMPTY_STRING_SNOWFLAKE_ID;
}
return useIsMentionRaidExperimentEnabled(r19, false) && stateFromStores;
}
@@ -0,0 +1,20 @@
// Metro module 7799 (f7800).
const r10 = {
MESSAGE: "message",
NAGBAR: "nagbar",
GUILD_SETTINGS: "guild_settings",
CONTEXT_MENU: "context_menu",
GUILD_PROFILE: "guild_profile",
MEMBER_SAFETY_PAGE: "member_safety_page"
};
const r17 = {
JOIN_RAID: "join_raid",
DM_RAID: "dm_raid"
};
const r20 = {
INVITES_DISABLED: "invites_disabled",
DMS_DISABLED: "dms_disabled"
};
export { r10 as GuildIncidentActionSources };
export { r17 as GuildIncidentAlertTypes };
export { r20 as GuildIncidentActionTypes };
@@ -0,0 +1,91 @@
// Metro module 7797 (f7798).
import { DEFAULT_LOCKDOWN_DURATION, NAGBAR_DISPLAY_MAX_HOURS, getTimeframes } from "./GuildAntiRaidConstants";
import Module3771 from "../../_bundle/Module3771";
import { GuildIncidentAlertTypes, GuildIncidentActionTypes } from "./GuildAntiRaidTypes";
import { intl, t } from "../../intl/index.native";
let c4915_6 = {
month: "numeric",
day: "numeric",
hour: "numeric",
minute: "2-digit"
};
export { c4915_6 as DATE_CONFIG };
export function hasDetectedActivity(a0) {
return a0.dmSpamDetectedAt != null && Module3771(a0.dmSpamDetectedAt).add(NAGBAR_DISPLAY_MAX_HOURS, "hours") > Module3771() || a0.raidDetectedAt != null && Module3771(a0.raidDetectedAt).add(NAGBAR_DISPLAY_MAX_HOURS, "hours") > Module3771();
}
export function hasDetectedRaid(a0) {
return a0.raidDetectedAt != null && Module3771(a0.raidDetectedAt).add(NAGBAR_DISPLAY_MAX_HOURS, "hours") > Module3771();
}
export function hasDetectedDMRaid(a0) {
return a0.dmSpamDetectedAt != null && Module3771(a0.dmSpamDetectedAt).add(NAGBAR_DISPLAY_MAX_HOURS, "hours") > Module3771();
}
export function getIncidentAlertType(a0) {
return a0 == null ? void 0 : a0.raidDetectedAt != null && Module3771(a0.raidDetectedAt).add(NAGBAR_DISPLAY_MAX_HOURS, "hours") > Module3771() ? GuildIncidentAlertTypes.JOIN_RAID : GuildIncidentAlertTypes.DM_RAID;
}
export function getEnabledInterventions(a0, a1) {
const r1 = [];
if (a0) {
r1.push(GuildIncidentActionTypes.INVITES_DISABLED);
}
if (a1) {
r1.push(GuildIncidentActionTypes.DMS_DISABLED);
}
return r1;
}
export function getDisabledInterventions(a0, a1) {
const r1 = [];
if (!a0) {
r1.push(GuildIncidentActionTypes.INVITES_DISABLED);
}
if (!a1) {
r1.push(GuildIncidentActionTypes.DMS_DISABLED);
}
return r1;
}
export function isUnderLockdown(a0) {
return a0.dmsDisabledUntil != null && new Date(a0.dmsDisabledUntil) > new Date() || a0.invitesDisabledUntil != null && new Date(a0.invitesDisabledUntil) > new Date();
}
export function hasDMsDisabled(a0) {
return a0?.dmsDisabledUntil != null && new Date(a0.dmsDisabledUntil) > new Date();
}
export function hasInvitesDisabled(a0) {
return a0?.invitesDisabledUntil != null && new Date(a0.invitesDisabledUntil) > new Date();
}
export function initialLockdownDurationHours(a0) {
let r3 = a0?.lockdownDurationHours;
const lockdownDurationHours = r3;
if (!(lockdownDurationHours != null && getTimeframes().some((item) => item.value === lockdownDurationHours))) {
r3 = DEFAULT_LOCKDOWN_DURATION;
}
return r3;
}
export function getSecurityActionDetailsString(a0, a1) {
let dmsDisabledUntil = a0.dmsDisabledUntil;
if (dmsDisabledUntil == null) {
dmsDisabledUntil = a0.invitesDisabledUntil;
}
if (dmsDisabledUntil == null) {
return "";
}
const r2 = a0.dmsDisabledUntil != null;
const r3 = a0.invitesDisabledUntil != null;
if ((r2 && r3) === true) {
return intl.formatToPlainString(t.hCZitf, {
guildName: a1,
time: new Date(dmsDisabledUntil).toLocaleString(intl.currentLocale, c4915_6)
});
}
if (r2 === true) {
return intl.formatToPlainString(t["HNKxf+"], {
guildName: a1,
time: new Date(dmsDisabledUntil).toLocaleString(intl.currentLocale, c4915_6)
});
}
if (r3 === true) {
return intl.formatToPlainString(t.M3iSyL, {
guildName: a1,
time: new Date(dmsDisabledUntil).toLocaleString(intl.currentLocale, c4915_6)
});
}
return "";
}
@@ -0,0 +1,104 @@
// Metro module 10244 (f10245).
import ExperimentStore from "../experiments/ExperimentStore";
import UserSettingsProtoStore from "../user_settings/UserSettingsProtoStore";
import GuildStore from "../../stores/GuildStore";
import PermissionStore from "../../stores/PermissionStore";
import { hasDetectedActivity, isUnderLockdown } from "./GuildAntiRaidUtils";
import Module589 from "../../_bundle/Module589";
import Dispatcher from "../../Dispatcher";
let c6833_6, c6833_7, incidentsDataFromServer;
const computeAlertSettings = function computeAlertSettings() {
let r3 = UserSettingsProtoStore.getGuildsProto();
if (r3 == null) {
r3 = {};
}
const guildsArray = GuildStore.getGuildsArray();
c6833_7 = {};
for (const item of guildsArray) {
c6833_7[item.id] = {
guildId: item.id,
guildName: item.name,
...r3[item.id]
};
}
};
incidentsDataFromServer = function incidentsDataFromServer(a0) {
return a0 != null ? Object.keys(a0).length > 0 ? {
raidDetectedAt: a0.raid_detected_at,
dmSpamDetectedAt: a0.dm_spam_detected_at,
dmsDisabledUntil: a0.dms_disabled_until,
invitesDisabledUntil: a0.invites_disabled_until,
lockdownDurationHours: a0.lockdown_duration_hours
} : null : null;
};
c6833_6 = {};
c6833_7 = {};
class GuildIncidentsStore extends Module589.Store {
static displayName = "GuildIncidentsStore";
initialize() {
this.waitFor(UserSettingsProtoStore, GuildStore, PermissionStore, ExperimentStore);
this.syncWith([UserSettingsProtoStore, GuildStore, PermissionStore, ExperimentStore], computeAlertSettings);
}
getGuildIncident(a0) {
return c6833_6[a0];
}
getIncidentsByGuild() {
return c6833_6;
}
getGuildAlertSettings() {
return c6833_7;
}
}
const guildIncidentsStore = new GuildIncidentsStore(Dispatcher, {
CONNECTION_OPEN: function handleConnectionOpen(a0) {
c6833_6 = {};
for (const guild of a0.guilds) {
const r33 = incidentsDataFromServer(guild.properties?.incidents_data);
if (r33 != null && (hasDetectedActivity(r33) || isUnderLockdown(r33))) {
c6833_6[guild.id] = r33;
}
}
},
GUILD_CREATE: function handleGuildCreate({ guild }) {
const incidents_data = guild.properties?.incidents_data;
const r6 = incidents_data != null ? Object.keys(incidents_data).length > 0 ? {
raidDetectedAt: incidents_data.raid_detected_at,
dmSpamDetectedAt: incidents_data.dm_spam_detected_at,
dmsDisabledUntil: incidents_data.dms_disabled_until,
invitesDisabledUntil: incidents_data.invites_disabled_until,
lockdownDurationHours: incidents_data.lockdown_duration_hours
} : null : null;
if (r6 != null && (hasDetectedActivity(r6) || isUnderLockdown(r6))) {
c6833_6[guild.id] = r6;
}
},
GUILD_UPDATE: function handleGuildUpdate({ guild }) {
const incidents_data = guild.incidents_data;
const r5 = incidents_data != null ? Object.keys(incidents_data).length > 0 ? {
raidDetectedAt: incidents_data.raid_detected_at,
dmSpamDetectedAt: incidents_data.dm_spam_detected_at,
dmsDisabledUntil: incidents_data.dms_disabled_until,
invitesDisabledUntil: incidents_data.invites_disabled_until,
lockdownDurationHours: incidents_data.lockdown_duration_hours
} : null : null;
L8: {
L6: {
if (r5 != null) {
if (!hasDetectedActivity(r5) && !isUnderLockdown(r5)) {
break L6;
}
c6833_6[guild.id] = r5;
break L8;
}
}
delete c6833_6[guild.id];
}
},
GUILD_DELETE: function handleGuildDelete(a0) {
delete c6833_6[a0.guild.id];
},
LOGOUT: function handleLogout() {
c6833_6 = {};
}
});
export default guildIncidentsStore;
@@ -0,0 +1,31 @@
// Metro module 13103 (f13104).
import { intl, t } from "../../intl/index.native";
let c9060_2 = {
DM_SPAM: "DM_SPAM",
MESSAGE_SPAM: "MESSAGE_SPAM",
MENTION_SPAM: "MENTION_SPAM",
SUSPICIOUS_USERS: "SUSPICIOUS_USERS",
SETTINGS_SPAM: "SETTINGS_SPAM"
};
const r18 = [c9060_2.MESSAGE_SPAM, c9060_2.DM_SPAM, c9060_2.MENTION_SPAM, c9060_2.SUSPICIOUS_USERS, c9060_2.SETTINGS_SPAM];
export const COMMUNITY_PORTAL_SERVER_SAFETY_PAGE = "https://discord.com/community/securing-your-server";
export { c9060_2 as ReportRaidTypes };
export { r18 as REPORT_RAID_OPTIONS };
export function getReportRaidTypeLabel(a0) {
if (c9060_2.DM_SPAM === a0) {
return intl.string(t["9CYNmS"]);
}
if (c9060_2.MENTION_SPAM === a0) {
return intl.string(t["hR/IdO"]);
}
if (c9060_2.MESSAGE_SPAM === a0) {
return intl.string(t.fwloj2);
}
if (c9060_2.SETTINGS_SPAM === a0) {
return intl.string(t.ETFVFw);
}
if (c9060_2.SUSPICIOUS_USERS === a0) {
return intl.string(t["lKXu+n"]);
}
return null;
}
@@ -0,0 +1,8 @@
// Metro module 10268 (f10269).
export default function getGuildSafetyAlertsChannelId(a0) {
let safetyAlertsChannelId = a0.safetyAlertsChannelId;
if (safetyAlertsChannelId == null) {
safetyAlertsChannelId = a0.publicUpdatesChannelId;
}
return safetyAlertsChannelId;
};
@@ -0,0 +1,105 @@
// Metro module 13102 (f13103).
import { useCallback, useState, useMemo } from "react";
import { View } from "react-native";
import { COMMUNITY_PORTAL_SERVER_SAFETY_PAGE, REPORT_RAID_OPTIONS, getReportRaidTypeLabel } from "../GuildReportRaidModalConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import { Text } from "../../../design/components/Text/native/Text";
import Linking from "../../../lib/native/Linking";
import { intl, t } from "../../../intl/index.native";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { TableCheckboxRow } from "../../../design/components/TableRow/native/TableCheckboxRow.native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { getHeaderCloseButton } from "../../../design/components/Navigator/native/NavigatorHeader.native";
import { trackReportRaidViewed, handleReportRaid } from "../GuildAntiRaidActionCreators";
import { Navigator } from "../../../design/components/Navigator/native/Navigator.native";
let initialRouteName, useStyles;
const ReportModal = function ReportModal(props) {
const { raidTypes, onChange: onChange2, onSubmit: onSubmit3 } = props;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const callback = useCallback((a0) => <Text style={styles.formRow} variant="text-md/semibold" color="interactive-text-active">
{getReportRaidTypeLabel(a0)}
</Text>, [styles]);
return <View style={styles.container}>
<Text style={styles.headerSubtitle} variant="text-sm/medium" color="text-default">
{intl.format(t.Hg8Ee7, {
onClick: useCallback(() => {
Linking.openURL(COMMUNITY_PORTAL_SERVER_SAFETY_PAGE);
}, [])
})}
</Text>
<View style={styles.formBody}>
<TableRowGroup hasIcons={false}>
{REPORT_RAID_OPTIONS.map((item, index) => {
return <TableCheckboxRow key={item} start={index === 0} end={index === REPORT_RAID_OPTIONS.length - 1} label={callback(item)} checked={raidTypes.includes(item)} onPress={() => onChange2(item)} />;
})}
</TableRowGroup>
</View>
<View style={[styles.submitButtonContainer, {
paddingBottom: bottom + 16
}]}>
<Button size="md" text={intl.string(t.geKm7t)} onPress={onSubmit3} />
</View>
</View>;
};
initialRouteName = "REPORT_RAID";
useStyles = createStyles({
container: {
flex: 1,
paddingHorizontal: 16,
paddingVertical: 0,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
flexDirection: "column",
height: "100%",
paddingTop: 8
},
headerSubtitle: {
textAlign: "center",
marginTop: 8
},
formBody: {
marginTop: 24
},
formRow: {
paddingVertical: 2
},
submitButtonContainer: {
position: "absolute",
bottom: 0,
left: 0,
right: 0,
paddingHorizontal: 16,
paddingVertical: 16,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
}
});
export default function GuildAntiRaidReportModal(props) {
const { onCloseModal, guildId } = props;
const top = useSafeAreaInsets_native().top;
const [state, setState] = useState([]);
return <Navigator screens={useMemo(() => {
let onSubmit2;
const state2 = state;
const onChange3 = function onChange(c30612_0) {
setState((prevState) => {
const includes = prevState.includes;
return includes.call(prevState, c30612_0) ? prevState.filter((item) => item !== c30612_0) : [...prevState, c30612_0];
});
};
onSubmit2 = function onSubmit() {
trackReportRaidViewed(guildId, state);
handleReportRaid(guildId);
onCloseModal();
};
const r13 = {};
r13[initialRouteName] = {
ignoreKeyboard: true,
title: intl.string(t.uYPGsS),
headerLeft: getHeaderCloseButton(onCloseModal),
render: () => <ReportModal raidTypes={state2} onChange={onChange3} onSubmit={onSubmit2} />
};
return r13;
}, [onCloseModal, state, guildId])} initialRouteName={initialRouteName} headerStatusBarHeight={top} />;
};
@@ -0,0 +1,151 @@
// Metro module 11019 (f11020).
import { useEffect, useMemo } from "react";
import GuildIncidentsStore from "../GuildIncidentsStore";
import { resetGuildIncidentsActionSheetStore, setInitialTime, setPauseDms, setPauseInvites, setTime, useGuildIncidentsActionSheetStore } from "./GuildIncidentsActionSheetStore";
import { getTimeframes } from "../GuildAntiRaidConstants";
import { AnalyticEvents, GuildFeatures } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { ActionSheet } from "../../../design/components/Sheet/native/ActionSheet.native";
import { BottomSheetTitleHeader } from "../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import { intl, t } from "../../../intl/index.native";
import { ActionSheetRow } from "../../../design/components/Sheet/native/ActionSheetRow.native";
import { useStateFromStores } from "../../../_bundle/defaultAreStatesEqual";
import * as _GuildAntiRaidUtils from "../GuildAntiRaidUtils";
import { initialLockdownDurationHours, getEnabledInterventions, getDisabledInterventions } from "../GuildAntiRaidUtils";
import ActionSheetActionCreators, { showActionSheet } from "../../action_sheet/native/ActionSheetActionCreators";
import { BetaTag, BetaSizes } from "../../../design/void/native";
import { TableRow } from "../../../design/components/TableRow/native/TableRow.native";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { TableSwitchRow } from "../../../design/components/TableRow/native/TableSwitchRow.native";
import Module8346 from "../../../_bundle/Module8346";
import { WarningIcon } from "../../../design/components/Icon/native/redesign/generated/WarningIcon";
import { ButtonGroup } from "../../../design/components/ButtonGroup/native/ButtonGroup.native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { setGuildIncidentActions } from "../GuildAntiRaidActionCreators";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import GuildRaidLockdownFeedbackActionSheet from "./GuildRaidLockdownFeedbackActionSheet";
let useStyles, GuildIncidentActionsActionSheet;
const DurationSelectionActionSheet = function DurationSelectionActionSheet(props) {
const onClose = props.onClose;
const timeframes = getTimeframes();
return <ActionSheet>
<BottomSheetTitleHeader title={intl.string(t.vKYZzc)} />
<ActionSheetRow.Group hasIcons={false}>
{timeframes.map((timeframe) => {
return <ActionSheetRow key={timeframe.value} label={timeframe.label} onPress={() => {
setTime(timeframe.value);
onClose();
}} />;
})}
</ActionSheetRow.Group>
</ActionSheet>;
};
useStyles = createStyles({
beta: {
marginLeft: -12
}
});
GuildIncidentActionsActionSheet = function GuildIncidentActionsActionSheet(props) {
let time, pauseInvites, pauseDms, hasInvitesDisabled, hasDMsDisabled, c18467_7;
const { guild, analyticsData } = props;
time = void 0;
pauseInvites = void 0;
pauseDms = void 0;
hasInvitesDisabled = void 0;
hasDMsDisabled = void 0;
c18467_7 = void 0;
const onDurationSelectorClose2 = function onDurationSelectorClose() {
showActionSheet({
content: <GuildIncidentActionsActionSheet guild={guild} analyticsData={analyticsData} />,
key: "GuildIncidentActionsActionSheet"
});
};
const styles = useStyles();
const guildIncidentsActionSheetStore = useGuildIncidentsActionSheetStore();
time = guildIncidentsActionSheetStore.time;
pauseInvites = guildIncidentsActionSheetStore.pauseInvites;
pauseDms = guildIncidentsActionSheetStore.pauseDms;
const hasTimeChanges = guildIncidentsActionSheetStore.hasTimeChanges;
const stateFromStores = useStateFromStores([GuildIncidentsStore], () => GuildIncidentsStore.getGuildIncident(guild.id));
hasInvitesDisabled = _GuildAntiRaidUtils.hasInvitesDisabled(stateFromStores);
hasDMsDisabled = _GuildAntiRaidUtils.hasDMsDisabled(stateFromStores);
const r44 = initialLockdownDurationHours(stateFromStores);
c18467_7 = r44;
let disabled = guild == null ? void 0 : guild.features.has(GuildFeatures.INVITES_DISABLED);
useEffect(() => {
setPauseInvites(hasInvitesDisabled);
setPauseDms(hasDMsDisabled);
}, [hasDMsDisabled, hasInvitesDisabled]);
useEffect(() => {
if (!useGuildIncidentsActionSheetStore.getState().hasTimeChanges) {
setInitialTime(c18467_7);
}
}, [r44]);
const memo = useMemo(() => getTimeframes().find((item) => item.value === time)?.label, [time]);
const props2 = {
startExpanded: true,
header: <BottomSheetTitleHeader title={intl.string(t.oCYAc7)} leading={<BetaTag size={BetaSizes.SMALL} style={styles.beta} />} />,
children: null
};
const TrailingText = TableRow.TrailingText;
let text = memo;
if (text == null) {
text = "";
}
const children = [<TableRow trailing={<TrailingText text={text} />} label={intl.string(t.vKYZzc)} arrow onPress={function onPress() {
showActionSheet({
content: <DurationSelectionActionSheet onClose={onDurationSelectorClose2} />,
key: "DurationSelectionActionSheet"
});
}} start end accessibilityLabel={intl.string(t.vKYZzc)} accessibilityHint={memo} />, , , ,];
const r148 = [<TableSwitchRow label={intl.string(t.Uwsjn6)} subLabel={intl.string(t.qPJkZh)} value={pauseInvites ? pauseInvites : disabled} onValueChange={function onValueChange() {
setPauseInvites(!pauseInvites);
}} disabled={disabled} />, ,];
if (disabled) {
disabled = <TableRow icon={<TableRow.Icon source={Module8346} IconComponent={WarningIcon} variant="secondary" />} label={intl.string(t["9GPbsV"])} />;
}
r148[1] = disabled;
children[1] = <TableRowGroup hasIcons>{r148}</TableRowGroup>;
children[2] = <TableSwitchRow label={intl.string(t["wrDmA/"])} subLabel={intl.string(t.UQbJW7)} value={pauseDms} onValueChange={function onValueChange() {
setPauseDms(!pauseDms);
}} start end />;
const props3 = {
onPress: function onPress() {
setGuildIncidentActions(guild.id, pauseInvites, pauseDms, time);
ActionSheetActionCreators.hideActionSheet("GuildIncidentActionsActionSheet");
resetGuildIncidentsActionSheetStore();
AnalyticsUtils.track(AnalyticEvents.GUILD_RAID_INTERVENTION_STATE_CHANGE, {
guild_id: guild.id,
source: analyticsData.source,
raid_alert_id: analyticsData.messageId,
raid_alert_type: analyticsData.alertType,
intervention_type_enabled: getEnabledInterventions(pauseInvites, pauseDms),
intervention_type_disabled: getDisabledInterventions(pauseInvites, pauseDms),
duration: 60 * time
});
if (!((hasInvitesDisabled ? !hasInvitesDisabled : !hasDMsDisabled) || pauseInvites || pauseDms)) {
showActionSheet({
content: <GuildRaidLockdownFeedbackActionSheet guildId={guild.id} />,
key: "GuildRaidLockdownFeedbackActionSheet"
});
}
},
text: intl.string(t["R3BPH+"]),
variant: "primary",
size: "md",
disabled: null
};
const r215 = pauseInvites !== hasInvitesDisabled || pauseDms !== hasDMsDisabled || hasTimeChanges;
const handleClose = function handleClose() {
ActionSheetActionCreators.hideActionSheet("GuildIncidentActionsActionSheet");
resetGuildIncidentsActionSheetStore();
};
props3.disabled = !r215;
children[3] = <ButtonGroup>
<Button {...props3} />
<Button onPress={handleClose} text={intl.string(t["ETE/oC"])} variant="secondary" size="md" />
</ButtonGroup>;
props2.children = children;
return <ActionSheet {...props2} />;
};
export default GuildIncidentActionsActionSheet;
@@ -0,0 +1,43 @@
// Metro module 11020 (f11021).
import { DEFAULT_LOCKDOWN_DURATION } from "../GuildAntiRaidConstants";
import { create } from "../../../_bundle/Module644";
import { batchUpdates } from "../../../_bundle/Module705";
let c7428_3 = create(() => ({
time: DEFAULT_LOCKDOWN_DURATION,
pauseInvites: true,
pauseDms: true,
hasTimeChanges: false
}));
export { c7428_3 as useGuildIncidentsActionSheetStore };
export function setTime(time) {
batchUpdates(() => c7428_3.setState({
time,
hasTimeChanges: true
}));
}
export function setInitialTime(time2) {
batchUpdates(() => c7428_3.setState({
time: time2,
hasTimeChanges: false
}));
}
export function setPauseInvites(pauseInvites) {
batchUpdates(() => c7428_3.setState({
pauseInvites
}));
}
export function setPauseDms(pauseDms) {
batchUpdates(() => c7428_3.setState({
pauseDms
}));
}
export function resetGuildIncidentsActionSheetStore() {
batchUpdates(() => {
c7428_3.setState({
time: DEFAULT_LOCKDOWN_DURATION,
pauseInvites: true,
pauseDms: true,
hasTimeChanges: false
});
});
}
@@ -0,0 +1,67 @@
// Metro module 11022 (f11023).
import { useState } from "react";
import { AnalyticEvents } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { intl, t } from "../../../intl/index.native";
import { RaidLockdownFeedbackType } from "../../guild_automod/AutomodFeedback";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { ActionSheet } from "../../../design/components/Sheet/native/ActionSheet.native";
import { BottomSheetTitleHeader } from "../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import KeyboardAwareView from "../../keyboard/native/KeyboardAwareView";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { TableCheckboxRow } from "../../../design/components/TableRow/native/TableCheckboxRow.native";
import { TextArea } from "../../../design/components/TextInput/native/TextArea.native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { trackWithMetadata } from "../../app_analytics/AppAnalyticsUtils";
const useStyles = createStyles({
container: {
display: "flex",
gap: 24
}
});
export default function GuildRaidLockdownFeedbackActionSheet(props) {
const guildId = props.guildId;
const styles = useStyles();
const [state, setState] = useState([]);
const [state2, setState2] = useState();
const r17 = [{
text: intl.string(t["//3pvi"]),
value: RaidLockdownFeedbackType.DM_SPAM
}, {
text: intl.string(t.SdVsip),
value: RaidLockdownFeedbackType.MENTION_SPAM
}, {
text: intl.string(t.uTiSVL),
value: RaidLockdownFeedbackType.CHANNEL_SPAM
}, {
text: intl.string(t.GQczU8),
value: RaidLockdownFeedbackType.SUS_NEW_MEMBERS
}, {
text: intl.string(t.AAgqy3),
value: RaidLockdownFeedbackType.CHANGING_SETTINGS
}, {
text: intl.string(t.ryPKb7),
value: RaidLockdownFeedbackType.OTHER
}];
return <ActionSheet startExpanded header={<BottomSheetTitleHeader title={intl.string(t.f5hd9P)} />}>
<KeyboardAwareView style={styles.container}>
<TableRowGroup hasIcons={false}>
{r17.map(({ text, value }) => <TableCheckboxRow key={value} onPress={() => {
const value2 = value;
setState(state.includes(value) ? (a0) => a0.filter((item) => item !== value2) : (a0) => [...a0, value2]);
}} checked={state.includes(value)} label={text} />)}
</TableRowGroup>
{state.includes(RaidLockdownFeedbackType.OTHER) && <TextArea autoComplete="off" value={state2} placeholder={intl.string(t["PAM+JR"])} onChange={function onChange(event) {
setState2(event);
}} />}
<Button onPress={function onPress() {
trackWithMetadata(AnalyticEvents.GUILD_RAID_LOCKDOWN_FEEDBACK, {
raid_lockdown_feedback_type: state,
raid_lockdown_feedback_other_reason: state2,
guild_id: guildId
});
ActionSheetActionCreators.hideActionSheet("GuildRaidLockdownFeedbackActionSheet");
}} text={intl.string(t.nAt0rE)} />
</KeyboardAwareView>
</ActionSheet>;
};
@@ -0,0 +1,121 @@
// Metro module 11051 (f11052).
import { useState } from "react";
import { View } from "react-native";
import { AnalyticEvents } from "../../../Constants";
import { SafetyToastType } from "../../safety_common/Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { intl, t } from "../../../intl/index.native";
import { RaidResolutionType, RaidAlertType, getMostImportantRaidResolutionType } from "../../guild_automod/AutomodFeedback";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { ActionSheet } from "../../../design/components/Sheet/native/ActionSheet.native";
import KeyboardAwareView from "../../keyboard/native/KeyboardAwareView";
import { Text } from "../../../design/components/Text/native/Text";
import { FormRow } from "../../../design/void/Form/native/index";
import { Checkbox, TextInput } from "../../../design/void/native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { trackWithMetadata } from "../../app_analytics/AppAnalyticsUtils";
import { handleResolveRaid } from "../GuildAntiRaidActionCreators";
import SafetyToastsActionCreators_native from "../../safety_common/SafetyToastsActionCreators.native";
const useStyles = createStyles({
container: {
paddingVertical: 24,
paddingHorizontal: 16,
display: "flex",
flexDirection: "column",
alignItems: "center"
},
title: {
marginBottom: 8,
textAlign: "center"
},
subtitle: {
marginBottom: 16,
textAlign: "center"
},
optionContainer: {
borderColor: Module712.colors.BORDER_SUBTLE,
borderWidth: 1,
borderRadius: Module712.radii.xs,
display: "flex",
flexDirection: "column",
marginBottom: 14,
width: "100%"
},
option: {
width: "100%"
},
textInputContainer: {
paddingLeft: 54,
paddingRight: 16,
paddingBottom: 16
},
textInput: {
backgroundColor: Module712.colors.INPUT_BACKGROUND_DEFAULT,
width: "100%",
padding: 8,
borderRadius: Module712.radii.xs
}
});
export default function GuildRaidResolveActionSheet(props) {
let styles, state, setState, state2, setState2;
const { guildId, messageId } = props;
styles = void 0;
state = void 0;
setState = void 0;
state2 = void 0;
setState2 = void 0;
const handleTextInputChange2 = function handleTextInputChange(a0) {
setState2(a0);
};
styles = useStyles();
[state, setState] = useState([]);
[state2, setState2] = useState();
const r15 = [{
text: intl.string(t.yeaXw5),
value: RaidResolutionType.LEGITIMATE_ACTIVITY
}, {
text: intl.string(t["o++3B8"]),
value: RaidResolutionType.DM_SPAM
}, {
text: intl.string(t.UfHAwZ),
value: RaidResolutionType.JOIN_RAID
}, {
text: intl.string(t.K3UWeR),
value: RaidResolutionType.OTHER
}];
return <ActionSheet>
<KeyboardAwareView style={styles.container}>
<Text style={styles.title} variant="heading-xl/bold" color="mobile-text-heading-primary">
{intl.string(t["1zmw/H"])}
</Text>
<Text style={styles.subtitle} variant="text-sm/normal" color="text-default">
{intl.string(t.nF79oO)}
</Text>
{r15.map(({ text, value }) => <View key={value} style={styles.optionContainer}>
<FormRow style={styles.option} onPress={() => {
const value2 = value;
setState(state.includes(value) ? (a0) => a0.filter((item) => item !== value2) : (a0) => [...a0, value2]);
}} leading={<Checkbox selected={state.includes(value)} />} label={text} />
{value === RaidResolutionType.OTHER && state.includes(RaidResolutionType.OTHER) && <View style={styles.textInputContainer}>
<TextInput style={styles.textInput} autoComplete="off" value={state2} placeholder={intl.string(t["PAM+JR"])} onChangeText={handleTextInputChange2} />
</View>}
</View>)}
<Button onPress={function onPress() {
trackWithMetadata(AnalyticEvents.GUILD_RAID_FEEDBACK, {
raid_alert_type: RaidAlertType.JOIN_RAID,
raid_alert_id: messageId,
false_alarm_type: state.map((item) => item.toString()),
false_alarm_other_reason: state2,
guild_id: guildId
});
handleResolveRaid(guildId, messageId, getMostImportantRaidResolutionType(state));
ActionSheetActionCreators.hideActionSheet("GuildRaidResolveActionSheet");
SafetyToastsActionCreators_native.showSuccessToast(SafetyToastType.SAFETY_FEEDBACK_SUCCESS);
}} text={intl.string(t.Gh3A0O)} size="md" />
<Button onPress={function handleClose() {
ActionSheetActionCreators.hideActionSheet("GuildRaidResolveActionSheet");
}} text={intl.string(t["ETE/oC"])} variant="secondary" size="md" />
</KeyboardAwareView>
</ActionSheet>;
};