mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-17 03:38:17 +00:00
fix(controllers): update cache with new value in gateway events (#433)
* fix(controllers): cache updated member * fix(controllers): cache update guild * fix(controllers): cache user update * fix(controllers): cache voice state update * refactor(controllers): message reaction add remove previousReactions * refactor(controllers): message reaction remove remove previousReactions * fix(controllers): cache message reaction remove all * fix(controllers): cache message reaction remove emoji * fix(controllers): cache guild role create * fix(controllers): role delete event update cache and return eventHandler * fix(controllers): cache role update * don't return eventHandlers * don't return eventHandlers
This commit is contained in:
@@ -33,7 +33,7 @@ export async function handleInternalGuildCreate(
|
||||
}
|
||||
|
||||
if (!cache.isReady) return eventHandlers.guildLoaded?.(guild);
|
||||
return eventHandlers.guildCreate?.(guild);
|
||||
eventHandlers.guildCreate?.(guild);
|
||||
}
|
||||
|
||||
export async function handleInternalGuildDelete(data: DiscordPayload) {
|
||||
@@ -61,7 +61,7 @@ export async function handleInternalGuildDelete(data: DiscordPayload) {
|
||||
const guild = await cacheHandlers.get("guilds", payload.id);
|
||||
if (!guild) return;
|
||||
|
||||
return eventHandlers.guildDelete?.(guild);
|
||||
eventHandlers.guildDelete?.(guild);
|
||||
}
|
||||
|
||||
export async function handleInternalGuildUpdate(data: DiscordPayload) {
|
||||
@@ -91,7 +91,6 @@ export async function handleInternalGuildUpdate(data: DiscordPayload) {
|
||||
|
||||
if (Array.isArray(cachedValue) && Array.isArray(value)) {
|
||||
const different = (cachedValue.length !== value.length) ||
|
||||
// @ts-ignore no idea how to fix this
|
||||
cachedValue.find((val) => !value.includes(val)) ||
|
||||
value.find((val) => !cachedValue.includes(val));
|
||||
if (!different) return;
|
||||
@@ -103,7 +102,9 @@ export async function handleInternalGuildUpdate(data: DiscordPayload) {
|
||||
}
|
||||
}).filter((change) => change) as GuildUpdateChange[];
|
||||
|
||||
return eventHandlers.guildUpdate?.(cachedGuild, changes);
|
||||
await cacheHandlers.set("guilds", payload.id, { ...cachedGuild, ...changes });
|
||||
|
||||
eventHandlers.guildUpdate?.(cachedGuild, changes);
|
||||
}
|
||||
|
||||
export async function handleInternalGuildEmojisUpdate(data: DiscordPayload) {
|
||||
@@ -118,7 +119,7 @@ export async function handleInternalGuildEmojisUpdate(data: DiscordPayload) {
|
||||
|
||||
cacheHandlers.set("guilds", payload.guild_id, guild);
|
||||
|
||||
return eventHandlers.guildEmojisUpdate?.(
|
||||
eventHandlers.guildEmojisUpdate?.(
|
||||
guild,
|
||||
payload.emojis,
|
||||
cachedEmojis,
|
||||
|
||||
@@ -70,6 +70,8 @@ export async function handleInternalGuildMemberUpdate(data: DiscordPayload) {
|
||||
payload.guild_id,
|
||||
);
|
||||
|
||||
await cacheHandlers.set("messages", member.id, member);
|
||||
|
||||
if (guildMember?.nick !== payload.nick) {
|
||||
eventHandlers.nicknameUpdate?.(
|
||||
guild,
|
||||
|
||||
@@ -63,7 +63,7 @@ export async function handleInternalPresenceUpdate(data: DiscordPayload) {
|
||||
const oldPresence = await cacheHandlers.get("presences", payload.user.id);
|
||||
await cacheHandlers.set("presences", payload.user.id, payload);
|
||||
|
||||
return eventHandlers.presenceUpdate?.(payload, oldPresence);
|
||||
eventHandlers.presenceUpdate?.(payload, oldPresence);
|
||||
}
|
||||
|
||||
/** This function is the internal handler for the typings event. Users can override this with controllers if desired. */
|
||||
@@ -85,7 +85,10 @@ export async function handleInternalUserUpdate(data: DiscordPayload) {
|
||||
// @ts-ignore index signatures
|
||||
if (member[key] !== value) return member[key] = value;
|
||||
});
|
||||
return eventHandlers.botUpdate?.(userData);
|
||||
|
||||
await cacheHandlers.set("members", userData.id, member);
|
||||
|
||||
eventHandlers.botUpdate?.(userData);
|
||||
}
|
||||
|
||||
/** This function is the internal handler for the voice state update event. Users can override this with controllers if desired. */
|
||||
@@ -117,6 +120,8 @@ export async function handleInternalVoiceStateUpdate(data: DiscordPayload) {
|
||||
selfStream: payload.self_stream || false,
|
||||
});
|
||||
|
||||
await cacheHandlers.set("guilds", payload.guild_id, guild);
|
||||
|
||||
if (cachedState?.channelID !== payload.channel_id) {
|
||||
// Either joined or moved channels
|
||||
if (payload.channel_id) {
|
||||
@@ -144,7 +149,7 @@ export function handleInternalWebhooksUpdate(data: DiscordPayload) {
|
||||
if (data.t !== "WEBHOOKS_UPDATE") return;
|
||||
|
||||
const options = data.d as WebhookUpdatePayload;
|
||||
return eventHandlers.webhooksUpdate?.(
|
||||
eventHandlers.webhooksUpdate?.(
|
||||
options.channel_id,
|
||||
options.guild_id,
|
||||
);
|
||||
|
||||
@@ -15,8 +15,7 @@ export async function handleInternalMessageReactionAdd(data: DiscordPayload) {
|
||||
const message = await cacheHandlers.get("messages", payload.message_id);
|
||||
|
||||
if (message) {
|
||||
const previousReactions = message.reactions;
|
||||
const reactionExisted = previousReactions?.find(
|
||||
const reactionExisted = message.reactions?.find(
|
||||
(reaction) =>
|
||||
reaction.emoji.id === payload.emoji.id &&
|
||||
reaction.emoji.name === payload.emoji.name,
|
||||
@@ -68,8 +67,7 @@ export async function handleInternalMessageReactionRemove(
|
||||
const message = await cacheHandlers.get("messages", payload.message_id);
|
||||
|
||||
if (message) {
|
||||
const previousReactions = message.reactions;
|
||||
const reactionExisted = previousReactions?.find(
|
||||
const reactionExisted = message.reactions?.find(
|
||||
(reaction) =>
|
||||
reaction.emoji.id === payload.emoji.id &&
|
||||
reaction.emoji.name === payload.emoji.name,
|
||||
@@ -115,15 +113,43 @@ export async function handleInternalMessageReactionRemove(
|
||||
);
|
||||
}
|
||||
|
||||
export function handleInternalMessageReactionRemoveAll(data: DiscordPayload) {
|
||||
export async function handleInternalMessageReactionRemoveAll(
|
||||
data: DiscordPayload,
|
||||
) {
|
||||
if (data.t !== "MESSAGE_REACTION_REMOVE_ALL") return;
|
||||
|
||||
const payload = data.d as BaseMessageReactionPayload;
|
||||
const message = await cacheHandlers.get("messages", payload.message_id);
|
||||
|
||||
if (message?.reactions) {
|
||||
message.reactions = undefined;
|
||||
|
||||
await cacheHandlers.set("messages", payload.message_id, message);
|
||||
}
|
||||
|
||||
eventHandlers.reactionRemoveAll?.(data.d as BaseMessageReactionPayload);
|
||||
}
|
||||
|
||||
export function handleInternalMessageReactionRemoveEmoji(data: DiscordPayload) {
|
||||
export async function handleInternalMessageReactionRemoveEmoji(
|
||||
data: DiscordPayload,
|
||||
) {
|
||||
if (data.t !== "MESSAGE_REACTION_REMOVE_EMOJI") return;
|
||||
|
||||
const payload = data.d as MessageReactionRemoveEmojiPayload;
|
||||
const message = await cacheHandlers.get("messages", payload.message_id);
|
||||
|
||||
if (message?.reactions) {
|
||||
message.reactions = message.reactions?.filter(
|
||||
(reaction) =>
|
||||
!(
|
||||
reaction.emoji.id === payload.emoji.id &&
|
||||
reaction.emoji.name === payload.emoji.name
|
||||
),
|
||||
);
|
||||
|
||||
await cacheHandlers.set("messages", payload.message_id, message);
|
||||
}
|
||||
|
||||
eventHandlers.reactionRemoveEmoji?.(
|
||||
data.d as MessageReactionRemoveEmojiPayload,
|
||||
);
|
||||
|
||||
@@ -16,7 +16,9 @@ export async function handleInternalGuildRoleCreate(data: DiscordPayload) {
|
||||
|
||||
const role = await structures.createRole(payload.role);
|
||||
guild.roles = guild.roles.set(payload.role.id, role);
|
||||
return eventHandlers.roleCreate?.(guild, role);
|
||||
await cacheHandlers.set("guilds", payload.guild_id, guild);
|
||||
|
||||
eventHandlers.roleCreate?.(guild, role);
|
||||
}
|
||||
|
||||
export async function handleInternalGuildRoleDelete(data: DiscordPayload) {
|
||||
@@ -41,8 +43,11 @@ export async function handleInternalGuildRoleDelete(data: DiscordPayload) {
|
||||
if (!g.roles.includes(payload.role_id)) return;
|
||||
// Remove this role from the members cache
|
||||
g.roles = g.roles.filter((id) => id !== payload.role_id);
|
||||
cacheHandlers.set("members", member.id, member);
|
||||
});
|
||||
});
|
||||
|
||||
eventHandlers.roleDelete?.(guild, cachedRole);
|
||||
}
|
||||
|
||||
export async function handleInternalGuildRoleUpdate(data: DiscordPayload) {
|
||||
@@ -57,5 +62,7 @@ export async function handleInternalGuildRoleUpdate(data: DiscordPayload) {
|
||||
|
||||
const role = await structures.createRole(payload.role);
|
||||
guild.roles.set(payload.role.id, role);
|
||||
await cacheHandlers.set("guilds", guild.id, guild);
|
||||
|
||||
eventHandlers.roleUpdate?.(guild, role, cachedRole);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user