// Metro module 4276 (f4277). import AuthenticationStore from "./AuthenticationStore"; import UserStore from "./UserStore"; import { ActivityTypes, ClientTypes, ME, StatusTypes, UserFlags } from "../Constants"; import hasRichActivity from "../modules/activities/utils/hasRichActivity"; import Module12 from "../_bundle/Module12"; import isUndefinedOrNull from "../_bundle/isUndefinedOrNull"; import SnowflakeUtils from "../utils/SnowflakeUtils"; import Module589 from "../_bundle/Module589"; import Dispatcher from "../Dispatcher"; function $mk74181() { return (a0) => [`${a0.application_id}:${a0.party?.id}`, a0]; } let activities, presencesForGuilds, statuses, activities2, filteredActivities, hiddenActivities, clientStatuses, activityMetadata, filterPlayingActivities, flattenPresence, flattenPresenceInConnectionOpen, updatePresence, updatePresenceInConnectionOpen, clearPresence, clearPresences; const sortActivity = function sortActivity(a0, a1) { const type = a1.type; const CUSTOM_STATUS = ActivityTypes.CUSTOM_STATUS; let r0 = 4; const r1 = CUSTOM_STATUS !== type ? ActivityTypes.COMPETING !== type ? ActivityTypes.STREAMING !== type ? ActivityTypes.PLAYING === type ? 1 : 0 : 2 : 3 : 4; const type2 = a0.type; if (ActivityTypes.CUSTOM_STATUS !== type2) { r0 = ActivityTypes.COMPETING !== type2 ? ActivityTypes.STREAMING !== type2 ? ActivityTypes.PLAYING === type2 ? 1 : 0 : 2 : 3; } let r18 = r1 - r0 || (hasRichActivity(a1) ? 1 : 0) - (hasRichActivity(a0) ? 1 : 0); if (!r18) { let created_at = a1.created_at; if (created_at == null) { created_at = 0; } let created_at2 = a0.created_at; if (created_at2 == null) { created_at2 = 0; } r18 = created_at - created_at2; } return r18; }; filterPlayingActivities = function filterPlayingActivities(a0) { if (a0.length === 0) { return a0; } const r24 = []; const r2 = []; for (const item of a0) { if (item.type === ActivityTypes.PLAYING) { r2.push(item); } else { r24.push(item); } } if (r2.length <= 1) { return a0; } return [...r24, [...r2].sort(sortActivity)[0]].sort(sortActivity); }; flattenPresence = function flattenPresence(a0) { let r12, r36; L14: { delete statuses[a0]; delete activities2[a0]; delete filteredActivities[a0]; delete hiddenActivities[a0]; delete clientStatuses[a0]; if (presencesForGuilds[a0] != null) { L10: { r12 = Object.values(presencesForGuilds[a0]); r36 = r12.reduce((acc, item) => { let r13; const processedAtTimestamp2 = item.processedAtTimestamp; const processedAtTimestamp = acc.processedAtTimestamp; const r4 = item.activities != null ? item.activities.length : 0; const r5 = acc.activities != null ? acc.activities.length : 0; L8: { if (!(processedAtTimestamp2 > processedAtTimestamp)) { r13 = acc; if (processedAtTimestamp2 !== processedAtTimestamp) { break L8; } r13 = r4 > r5 ? item : acc; } else { r13 = item; } } return r13; }, r12[0]); if (r36.status === StatusTypes.OFFLINE) { if (r36.hiddenActivities != null && r36.hiddenActivities.length > 0) { break L10; } if (Module12.every(presencesForGuilds[a0], (a0) => a0.status === StatusTypes.OFFLINE && (a0.hiddenActivities == null || a0.hiddenActivities.length === 0))) { delete presencesForGuilds[a0]; break L14; } if (!r12.some((item) => item.hiddenActivities != null && item.hiddenActivities.length > 0)) { break L14; } const r59 = Object.values(r12).flatMap(({ hiddenActivities: hiddenActivities2 }) => { if (hiddenActivities2 == null) { hiddenActivities2 = []; } return hiddenActivities2; }); hiddenActivities[a0] = r59.length !== 0 ? [...new Map([...r59].reverse().map($mk74181())).values()] : r59; break L14; } } statuses[a0] = r36.status; const activities3 = r36.activities; activities2[a0] = activities3; filteredActivities[a0] = filterPlayingActivities(activities3); const r91 = Object.values(r12).flatMap(({ hiddenActivities: hiddenActivities2 }) => { if (hiddenActivities2 == null) { hiddenActivities2 = []; } return hiddenActivities2; }); hiddenActivities[a0] = r91.length !== 0 ? [...new Map([...r91].reverse().map($mk74181())).values()] : r91; if (r36.clientStatus != null) { clientStatuses[a0] = r36.clientStatus; } } } }; flattenPresenceInConnectionOpen = function flattenPresenceInConnectionOpen(a0) { const r11 = presencesForGuilds[a0]; if (r11 != null) { const r19 = Module12.maxBy(Object.values(r11), (a0) => a0.processedAtTimestamp); if (r19.status !== StatusTypes.OFFLINE || r19.hiddenActivities != null && r19.hiddenActivities.length > 0) { statuses[a0] = r19.status; const activities3 = r19.activities; activities2[a0] = activities3; filteredActivities[a0] = filterPlayingActivities(activities3); let hiddenActivities2 = r19.hiddenActivities; if (hiddenActivities2 == null) { hiddenActivities2 = []; } hiddenActivities[a0] = hiddenActivities2; if (r19.clientStatus != null) { clientStatuses[a0] = r19.clientStatus; } } } }; updatePresence = function updatePresence(a0) { const { guildId: guildId3, userId, status, clientStatus, activities: activities3 } = a0; let hiddenActivities2 = a0.hiddenActivities; const processedAtTimestamp = a0.processedAtTimestamp; if (userId === AuthenticationStore.getId()) { return false; } const r3 = status === StatusTypes.OFFLINE && (hiddenActivities2 == null || hiddenActivities2.length === 0); let r29 = presencesForGuilds[userId]; if (r29 == null) { if (r3) { return false; } const r31 = {}; presencesForGuilds[userId] = r31; r29 = r31; } if (r3) { r29[guildId3] = { status, clientStatus, activities, hiddenActivities: activities, processedAtTimestamp }; } else { const r16 = activities3.length > 1 ? [...activities3].sort(sortActivity) : activities3; if (hiddenActivities2 == null) { hiddenActivities2 = []; } const hiddenActivities3 = hiddenActivities2.length !== 0 ? [...new Map([...hiddenActivities2].reverse().map($mk74181())).values()] : hiddenActivities2; const r60 = r29[guildId3]; r29[guildId3] = { status, clientStatus, activities: r60 != null ? isUndefinedOrNull(r60.activities, r16) ? r60.activities : r16 : r16, hiddenActivities: hiddenActivities3, processedAtTimestamp }; } delete activityMetadata[userId]; flattenPresence(userId); return true; }; updatePresenceInConnectionOpen = function updatePresenceInConnectionOpen(a0) { const { guildId: guildId3, userId, status, clientStatus, activities: activities3 } = a0; let hiddenActivities2 = a0.hiddenActivities; const processedAtTimestamp = a0.processedAtTimestamp; if (userId !== AuthenticationStore.getId()) { const r3 = status === StatusTypes.OFFLINE && (hiddenActivities2 == null || hiddenActivities2.length === 0); let r28 = presencesForGuilds[userId]; if (r28 == null) { if (r3) { return void 0; } const r30 = {}; presencesForGuilds[userId] = r30; r28 = r30; } if (r3) { r28[guildId3] = { status, clientStatus, activities, hiddenActivities: activities, processedAtTimestamp }; } else { const activities4 = activities3.length > 1 ? [...activities3].sort(sortActivity) : activities3; if (hiddenActivities2 == null) { hiddenActivities2 = []; } r28[guildId3] = { status, clientStatus, activities: activities4, hiddenActivities: hiddenActivities2.length !== 0 ? [...new Map([...hiddenActivities2].reverse().map($mk74181())).values()] : hiddenActivities2, processedAtTimestamp }; } } }; clearPresence = function clearPresence(a0, item) { if (item === AuthenticationStore.getId()) { return false; } const r6 = presencesForGuilds[item]; if (r6 != null && r6[a0] != null) { delete r6[a0]; if (Object.keys(r6).length === 0) { delete presencesForGuilds[item]; } flattenPresence(item); return void 0; } return false; }; clearPresences = function clearPresences(id) { for (const item of SnowflakeUtils.keys(presencesForGuilds)) { clearPresence(id, item); } }; activities = Object.freeze([]); presencesForGuilds = {}; statuses = {}; activities2 = {}; filteredActivities = {}; hiddenActivities = {}; clientStatuses = {}; activityMetadata = {}; class PresenceStore extends Module589.Store { static displayName = "PresenceStore"; initialize() { this.waitFor(AuthenticationStore, UserStore); } setCurrentUserOnConnectionOpen(a0, a1) { statuses[AuthenticationStore.getId()] = a0; const id = AuthenticationStore.getId(); const r17 = [...a1].sort(sortActivity); activities2[id] = r17; filteredActivities[id] = filterPlayingActivities(r17); } getStatus(a0, r8 = null, r3 = StatusTypes.OFFLINE) { const user = UserStore.getUser(a0); if (user != null && user.hasFlag(UserFlags.BOT_HTTP_INTERACTIONS)) { r3 = StatusTypes.UNKNOWN; } if (r8 == null) { let r22 = statuses[a0]; if (r22 == null) { r22 = r3; } return r22; } const r17 = presencesForGuilds[a0]; let r20 = (r17 != null ? r17[r8] : null)?.status; if (r20 == null) { r20 = r3; } return r20; } getActivities(a0, r7 = null) { if (r7 == null) { let r15 = filteredActivities[a0]; if (r15 == null) { r15 = activities; } return r15; } const r6 = presencesForGuilds[a0]; const r9 = r6 != null ? r6[r7] : null; return r9 != null && r9.activities != null ? filterPlayingActivities(r9.activities) : activities; } getUnfilteredActivities(a0, r6 = null) { if (r6 == null) { let r12 = activities2[a0]; if (r12 == null) { r12 = activities; } return r12; } const r5 = presencesForGuilds[a0]; const r8 = r5 != null ? r5[r6] : null; return r8 != null && r8.activities != null ? r8.activities : activities; } getHiddenActivities(a0, r7 = null) { let r10; if (r7 == null) { let r12 = hiddenActivities[a0]; if (r12 == null) { r12 = activities; } r10 = r12; } else { const r6 = presencesForGuilds[a0]; r10 = (r6 != null ? r6[r7] : null)?.hiddenActivities; if (r10 == null) { r10 = activities; } } return r10; } getPrimaryActivity(a0, r5 = null) { return this.getActivities(a0, r5).filter((item) => item.type !== ActivityTypes.HANG_STATUS)[0]; } getAllApplicationActivities(a0) { const r0 = []; for (const item of SnowflakeUtils.keys(filteredActivities)) { const userId = item; for (const item2 of filteredActivities[item]) { const activity = item2; if (item2.application_id === a0) { r0.push({ userId, activity }); } } } return r0; } getApplicationActivity(a0, c14076_0, r5 = null) { return this.findActivity(a0, (a0) => a0.application_id === c14076_0, r5, true); } findActivity(a0, a1, r8 = null, r2 = false) { if (r2 == null) { r2 = false; } const activities3 = this.getActivities(a0, r8); return (r2 ? activities3.concat(this.getHiddenActivities(a0, r8)) : activities3).find(a1); } getActivityMetadata(a0) { return activityMetadata[a0]; } getUserIds() { return SnowflakeUtils.keys(activities2); } isMobileOnline(a0) { const r6 = clientStatuses[a0]; return r6 != null && r6[ClientTypes.MOBILE] === StatusTypes.ONLINE && r6[ClientTypes.DESKTOP] !== StatusTypes.ONLINE && r6[ClientTypes.VR] !== StatusTypes.ONLINE; } isVROnline(a0) { const r5 = clientStatuses[a0]; return r5 != null && r5[ClientTypes.VR] === StatusTypes.ONLINE; } getClientStatus(a0) { return clientStatuses[a0]; } getState() { return { presencesForGuilds, statuses, activities: activities2, filteredActivities, hiddenActivities, activityMetadata, clientStatuses }; } } const presenceStore = new PresenceStore(Dispatcher, { CONNECTION_OPEN: function handleConnectionOpen() { return true; }, CONNECTION_OPEN_SUPPLEMENTAL: function handleConnectionOpenSupplemental({ guilds, presences }) { const id = AuthenticationStore.getId(); presencesForGuilds = {}; activityMetadata = {}; const r15 = {}; r15[id] = statuses[id]; statuses = r15; const r17 = {}; r17[id] = activities2[id]; activities2 = r17; const r20 = {}; r20[id] = filteredActivities[id]; filteredActivities = r20; const r23 = {}; r23[id] = hiddenActivities[id]; hiddenActivities = r23; const r26 = {}; r26[id] = {}; clientStatuses = r26; const set = new Set(); let c14077_0 = set; guilds.forEach((guild) => { guild.presences.forEach((presence) => { const user = presence.user; updatePresenceInConnectionOpen({ guildId: guild.id, userId: user.id, status: presence.status, clientStatus: presence.clientStatus, activities: presence.activities, hiddenActivities: presence.hiddenActivities, processedAtTimestamp: presence.processedAtTimestamp }); c14077_0.add(user.id); }); }); presences.forEach(({ user, status, clientStatus, activities: activities3, hiddenActivities: hiddenActivities2, processedAtTimestamp }) => { if (user != null) { updatePresenceInConnectionOpen({ guildId: ME, userId: user.id, status, clientStatus, activities: activities3, hiddenActivities: hiddenActivities2, processedAtTimestamp }); c14077_0.add(user.id); } }); set.delete(id); set.forEach(flattenPresenceInConnectionOpen); }, OVERLAY_INITIALIZE: function handleOverlayInitialize({ presences }) { presencesForGuilds = presences.presencesForGuilds; statuses = presences.statuses; activities2 = presences.activities; hiddenActivities = presences.hiddenActivities; activityMetadata = presences.activityMetadata; }, GUILD_CREATE: function handleGuildCreate({ guild }) { guild.presences.forEach((presence) => { updatePresence({ guildId: guild.id, userId: presence.user.id, status: presence.status, clientStatus: presence.clientStatus, activities: presence.activities, hiddenActivities: presence.hiddenActivities, processedAtTimestamp: presence.processedAtTimestamp }); }); }, GUILD_DELETE: function handleGuildDelete(a0) { clearPresences(a0.guild.id); }, GUILD_MEMBER_REMOVE: function handleGuildMemberRemove(a0) { const guildId3 = a0.guildId; const id = a0.user.id; const id2 = AuthenticationStore.getId(); let r1 = false; if (id !== id2) { const r14 = presencesForGuilds[id]; const r4 = r14 == null; r1 = false; if (!r4) { const r16 = r14[guildId3] == null; r1 = false; if (!r16) { delete r14[guildId3]; if (Object.keys(r14).length === 0) { delete presencesForGuilds[id]; } flattenPresence(id); r1 = void 0; } } } return r1; }, PRESENCE_UPDATES: function handlePresenceUpdates(a0) { return a0.updates.map((update) => { let guildId3 = update.guildId; const { user, status, clientStatus, activities: activities3, hiddenActivities: hiddenActivities2, processedAtTimestamp } = update; if (guildId3 == null) { guildId3 = ME; } return updatePresence({ guildId: guildId3, userId: user.id, status, clientStatus, activities: activities3, hiddenActivities: hiddenActivities2, processedAtTimestamp }); }).some((item) => item); }, PRESENCES_REPLACE: function handlePresenceReplace({ presences }) { clearPresences(ME); presences.forEach(({ user, status, clientStatus, activities: activities3, hiddenActivities: hiddenActivities2, processedAtTimestamp }) => { if (user != null) { updatePresence({ guildId: ME, userId: user.id, status, clientStatus, activities: activities3, hiddenActivities: hiddenActivities2, processedAtTimestamp }); } }); }, ACTIVITY_METADATA_UPDATE: function handleActivityMetadataUpdate(a0) { activityMetadata[a0.userId] = a0.metadata; return false; }, THREAD_MEMBER_LIST_UPDATE: function handleThreadMemberListUpdate(a0) { const guildId = a0.guildId; a0.members.forEach((member) => { if (member.presence != null) { updatePresence({ guildId, userId: member.user_id, status: member.presence.status, clientStatus: member.presence.clientStatus, activities: member.presence.activities, hiddenActivities: member.presence.hiddenActivities, processedAtTimestamp: member.presence.processedAtTimestamp }); } }); }, THREAD_MEMBERS_UPDATE: function handleThreadMembersUpdate({ guildId: guildId2, addedMembers }) { if (addedMembers != null) { addedMembers.forEach((addedMember) => { if (addedMember.presence != null) { updatePresence({ guildId: guildId2, userId: addedMember.userId, status: addedMember.presence.status, clientStatus: addedMember.presence.clientStatus, activities: addedMember.presence.activities, hiddenActivities: addedMember.presence.hiddenActivities, processedAtTimestamp: addedMember.presence.processedAtTimestamp }); } }); } }, SELF_PRESENCE_STORE_UPDATE: function handleCurrentUserPresenceUpdate(a0) { const id = AuthenticationStore.getId(); if (statuses[id] === a0.status && activities2[id] === a0.activities && hiddenActivities[id] === a0.hiddenActivities) { return false; } statuses[id] = a0.status; const r9 = [...a0.activities].sort(sortActivity); activities2[id] = r9; filteredActivities[id] = filterPlayingActivities(r9); hiddenActivities[id] = [...a0.hiddenActivities].sort(sortActivity); delete activityMetadata[id]; } }); export default presenceStore; export { sortActivity };