574 lines
19 KiB
TypeScript
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 };
|