Files
discord-decomp/stores/PresenceStore.tsx
T
2026-11-01 12:12:55 +02:00

574 lines
19 KiB
TypeScript

// 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 };