Files
discord-decomp/modules/instant_invite/native/InstantInviteUtils.tsx
T
2026-11-01 12:12:55 +02:00

249 lines
9.2 KiB
TypeScript

// Metro module 8348 (f8349).
import GuildTemplateStore from "../../guild_templates/GuildTemplateStore";
import { ChannelRecordBase } from "../../../records/ChannelRecord";
import ChannelStore from "../../../stores/ChannelStore";
import CreateInviteModalStore from "../../../stores/CreateInviteModalStore";
import GuildChannelStore from "../../../stores/GuildChannelStore";
import InviteStore from "../../../stores/InviteStore";
import PresenceStore from "../../../stores/PresenceStore";
import UserStore from "../../../stores/UserStore";
import DisplayedInviteStore from "../../../stores/native/DisplayedInviteStore";
import { InviteTargetTypes } from "../Constants";
import { IOS_COPY_TO_PASTEBOARD } from "./InstantInviteConstants";
import { AnalyticEvents, InviteOptionsType, Permissions } from "../../../Constants";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { getStreamerApplication } from "../../go_live/utils/StreamerApplicationSelectors";
import CreateInviteModalActionCreators from "../../../actions/CreateInviteModalActionCreators";
import openInstantInviteActionSheet from "./components/openInstantInviteActionSheet";
import { parseExtraDataFromInviteKey, parseInviteCodeFromInviteKey } from "../InviteCodeUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { showShareActionSheet } from "../../action_sheet/native/showShareActionSheet";
import { presentInviteSent, presentLinkCopied } from "../../toast/native/ToastUtils";
import getInviteURL from "../getInviteURL";
import { copy } from "../../../utils/ClipboardUtils.native";
import { canOpenUrlScheme } from "./DCDSendUtils";
import Module38 from "../../../_bundle/Module38";
import { getInviteChannelId } from "../../../utils/native/InstantInviteUtils";
let trackOptionClicked;
const showInstantInviteActionSheet = function showInstantInviteActionSheet(a0, a1) {
AnalyticsUtils.track(AnalyticEvents.OPEN_POPOUT, {
type: "Instant Invite",
source: a1?.source
});
const stream = a1?.stream;
const r19 = {
isActionSheet: true,
location: "IOS Instant Invite Action Sheet Mount"
};
if (stream != null) {
const stream2 = a1.stream;
r19.targetType = InviteTargetTypes.STREAM;
r19.targetUserId = stream2.ownerId;
const streamerApplication = getStreamerApplication(stream2, PresenceStore);
AnalyticsUtils.track(AnalyticEvents.OPEN_MODAL, {
type: "Send Stream Invite",
location: r19.location,
other_user_id: stream2.ownerId,
application_id: streamerApplication?.id,
application_name: streamerApplication?.name,
game_id: streamerApplication?.id
});
} else if (a1?.targetApplicationId != null) {
r19.targetType = InviteTargetTypes.EMBEDDED_APPLICATION;
r19.targetApplicationId = a1.targetApplicationId;
}
if (a1?.createInvite !== false && a1?.code == null) {
CreateInviteModalActionCreators.init(a0.getGuildId(), a0.id, r19);
}
openInstantInviteActionSheet({
channel: a0,
source: a1?.source,
guildScheduledEventId: a1?.guildScheduledEventId,
targetApplicationId: a1?.targetApplicationId,
code: a1?.code,
vanityURLCode: null,
stackingBehavior: a1?.stackingBehavior
});
};
trackOptionClicked = function trackOptionClicked(a0, a1, a2, a3) {
let guild_id;
const invite = InviteStore.getInvite(parseExtraDataFromInviteKey(a0).baseCode);
const INSTANT_INVITE_OPTION_CLICKED = AnalyticEvents.INSTANT_INVITE_OPTION_CLICKED;
if (a1 instanceof ChannelRecordBase) {
guild_id = a1.guild_id;
} else {
const channel = ChannelStore.getChannel(a1?.id);
guild_id = channel == null ? void 0 : channel.getGuildId();
}
AnalyticsUtils.track(INSTANT_INVITE_OPTION_CLICKED, {
invite_type: a2,
guild_id,
channel_id: a1?.id,
invite_code: parseInviteCodeFromInviteKey(a0),
invite_channel_type: a1?.type,
invite_inviter_id: UserStore.getCurrentUser()?.id,
location: a3,
application_id: invite == null ? void 0 : invite.target_application?.id
});
};
export function showInstantInviteActionSheetForChannel(a0) {
const channel = ChannelStore.getChannel(a0);
if (channel != null) {
showInstantInviteActionSheet(channel);
}
}
export { showInstantInviteActionSheet };
export function showVanityUrlInviteActionSheet(a0, a1, a2, a3) {
AnalyticsUtils.track(AnalyticEvents.OPEN_POPOUT, {
type: "Vanity URL Invite",
source: a2
});
CreateInviteModalActionCreators.init(a0.id, a1.id, {
skipCreateInvite: true
});
openInstantInviteActionSheet({
vanityURLCode: a0.vanityURLCode,
channel: a1,
source: a2,
guildScheduledEventId: a3?.guildScheduledEventId,
stackingBehavior: a3?.stackingBehavior
});
}
export { trackOptionClicked };
export function getShareMessage(a0) {
return a0;
}
export function handleOpenShareSheet(a0, a1, a2, a3, r5 = true) {
let guild_id;
if (a0 != null) {
const r15 = parseExtraDataFromInviteKey(a0);
const invite = InviteStore.getInvite(r15.baseCode);
const INSTANT_INVITE_SHARED = AnalyticEvents.INSTANT_INVITE_SHARED;
if (a1 instanceof ChannelRecordBase) {
guild_id = a1.guild_id;
} else {
const channel = ChannelStore.getChannel(a1?.id);
guild_id = channel == null ? void 0 : channel.getGuildId();
}
const id = a1?.id;
AnalyticsUtils.track(INSTANT_INVITE_SHARED, {
guild_id,
channel_id: id,
invite_code: r15.baseCode,
invite_channel_type: a1?.type,
invite_inviter_id: UserStore.getCurrentUser()?.id,
invite_guild_scheduled_event_id: r15.guildScheduledEventId,
location: a3,
application_id: invite == null ? void 0 : invite.target_application?.id
});
if (r5) {
trackOptionClicked(a0, a1, InviteOptionsType.SHARE, a3);
}
ActionSheetActionCreators.hideAllActionSheets();
showShareActionSheet({
message: a2,
iOSOnlyShareCallback: (a0, a1) => {
if ((a0 ? a1 != null : a0) && !a1.includes(IOS_COPY_TO_PASTEBOARD)) {
presentInviteSent();
}
}
}, a3);
}
}
export function handleCopy(a0, a1, a2, r6 = true) {
let guild_id;
if (a0 != null) {
const r13 = parseExtraDataFromInviteKey(a0);
copy(getInviteURL(a0));
const invite = InviteStore.getInvite(r13.baseCode);
const COPY_INSTANT_INVITE = AnalyticEvents.COPY_INSTANT_INVITE;
if (a1 instanceof ChannelRecordBase) {
guild_id = a1.guild_id;
} else {
const channel = ChannelStore.getChannel(a1?.id);
guild_id = channel == null ? void 0 : channel.getGuildId();
}
AnalyticsUtils.track(COPY_INSTANT_INVITE, {
server: guild_id,
channel: a1?.id,
channel_type: a1?.type,
location: a2,
code: r13.baseCode,
guild_scheduled_event_id: r13.guildScheduledEventId,
application_id: invite == null ? void 0 : invite.target_application?.id
});
if (r6) {
trackOptionClicked(a0, a1, InviteOptionsType.COPY);
}
presentLinkCopied();
}
}
export function handlePressSettings(a0, c16520_1, a2) {
let r7 = a2;
ActionSheetActionCreators.hideActionSheet();
const pendingSettings = CreateInviteModalStore.getPendingSettings();
const { guild_id, id } = a0;
if (a2 == null) {
r7 = "Instant Invite Action Sheet";
}
CreateInviteModalActionCreators.openSettings(guild_id, id, r7, () => {
if (c16520_1 != null) {
c16520_1();
} else {
let targetApplicationId = pendingSettings?.targetApplicationId;
if (targetApplicationId == null) {
targetApplicationId = void 0;
}
showInstantInviteActionSheet(a0, {
createInvite: false,
targetApplicationId
});
}
});
}
export function isAppInstalled(a0) {
return canOpenUrlScheme(a0);
}
export function handleOpenInviteActionsheet(a0, a1, a2, a3) {
let channel = ChannelStore.getChannel(a1);
if (channel == null) {
channel = GuildChannelStore.getDefaultChannel(a0.id, true, Permissions.CREATE_INSTANT_INVITE);
}
Module38(channel != null, "Channel cannot be null");
if (a0.vanityURLCode != null && a0.vanityURLCode !== "") {
AnalyticsUtils.track(AnalyticEvents.OPEN_POPOUT, {
type: "Vanity URL Invite",
source: a3
});
CreateInviteModalActionCreators.init(a0.id, channel.id, {
skipCreateInvite: true
});
openInstantInviteActionSheet({
vanityURLCode: a0.vanityURLCode,
channel,
source: a3,
guildScheduledEventId: void 0,
stackingBehavior: void 0
});
} else {
const inviteChannelId = getInviteChannelId(channel.id, a2);
if (inviteChannelId != null) {
let r33 = ChannelStore.getChannel(inviteChannelId);
if (r33 == null) {
r33 = GuildChannelStore.getDefaultChannel(a0.id, true, Permissions.CREATE_INSTANT_INVITE);
}
Module38(r33 != null, "Channel cannot be null");
showInstantInviteActionSheet(r33, {
source: a3
});
}
}
}
export function hasDeferredInvite() {
const displayedInviteCode = DisplayedInviteStore.getDisplayedInviteCode();
const displayedGuildTemplateCode = GuildTemplateStore.getDisplayedGuildTemplateCode();
const r9 = displayedInviteCode != null ? InviteStore.getInvite(displayedInviteCode) : null;
const r13 = displayedGuildTemplateCode != null ? GuildTemplateStore.getGuildTemplate(displayedGuildTemplateCode) : null;
return r9 != null || r13 != null;
}