This commit is contained in:
ITOH
2021-04-09 21:37:13 +02:00
parent 577010e953
commit 9312606100
26 changed files with 233 additions and 13 deletions
+4
View File
@@ -32,6 +32,10 @@ export async function handleChannelDelete(data: DiscordGatewayPayload) {
await cacheHandlers.delete("channels", payload.id);
cacheHandlers.forEach("messages", (message) => {
eventHandlers.debug(
"loop",
`Running forEach messages loop in CHANNEL_DELTE file.`,
);
if (message.channelId === payload.id) {
cacheHandlers.delete("messages", message.id);
}
+12
View File
@@ -27,18 +27,30 @@ export async function handleGuildDelete(
}
cacheHandlers.forEach("messages", (message) => {
eventHandlers.debug(
"loop",
`1. Running forEach messages loop in CHANNEL_DELTE file.`,
);
if (message.guildId === payload.id) {
cacheHandlers.delete("messages", message.id);
}
});
cacheHandlers.forEach("channels", (channel) => {
eventHandlers.debug(
"loop",
`2. Running forEach channels loop in CHANNEL_DELTE file.`,
);
if (channel.guildId === payload.id) {
cacheHandlers.delete("channels", channel.id);
}
});
cacheHandlers.forEach("members", (member) => {
eventHandlers.debug(
"loop",
`3. Running forEach members loop in CHANNEL_DELTE file.`,
);
if (!member.guilds.has(payload.id)) return;
member.guilds.delete(payload.id);
@@ -46,12 +46,20 @@ export async function handleGuildMemberUpdate(data: DiscordGatewayPayload) {
const roleIds = guildMember.roles || [];
roleIds.forEach((id) => {
eventHandlers.debug(
"loop",
`1. Running forEach loop in GUILD_MEMBER_UPDATE file.`,
);
if (!payload.roles.includes(id)) {
eventHandlers.roleLost?.(guild, memberStruct, id);
}
});
payload.roles.forEach((id) => {
eventHandlers.debug(
"loop",
`2. Running forEach loop in GUILD_MEMBER_UPDATE file.`,
);
if (!roleIds.includes(id)) {
eventHandlers.roleGained?.(guild, memberStruct, id);
}
+25 -3
View File
@@ -32,7 +32,13 @@ export async function handleReady(
shard.unavailableGuildIds = new Set(payload.guilds.map((g) => g.id));
// Start ready check in 2 seconds
setTimeout(async () => await checkReady(payload, shardId, now), 2000);
setTimeout(async () => {
eventHandlers.debug(
"loop",
`1. Running setTimeout in READY file.`,
);
await checkReady(payload, shardId, now);
}, 2000);
// Wait 5 seconds to spawn next shard
await delay(5000);
@@ -53,7 +59,13 @@ async function checkReady(payload: DiscordReady, shardId: number, now: number) {
await loaded(shardId);
} else {
// Not all guilds were loaded but 10 seconds haven't passed so check again
setTimeout(async () => await checkReady(payload, shardId, now), 2000);
setTimeout(async () => {
eventHandlers.debug(
"loop",
`2. Running setTimeout in READY file.`,
);
await checkReady(payload, shardId, now);
}, 2000);
}
} else {
// All guilds were loaded
@@ -71,13 +83,23 @@ async function loaded(shardId: number) {
if (shardId === ws.lastShardId - 1) {
// Still some shards are loading so wait another 2 seconds for them
if (ws.shards.some((shard) => !shard.ready)) {
setTimeout(async () => await loaded(shardId), 2000);
setTimeout(async () => {
eventHandlers.debug(
"loop",
`3. Running setTimeout in CHANNEL_DELTE file.`,
);
await loaded(shardId);
}, 2000);
} else {
cache.isReady = true;
eventHandlers.ready?.();
// All the members that came in on guild creates should now be processed 1 by 1
for (const [guildId, members] of initialMemberLoadQueue.entries()) {
eventHandlers.debug(
"loop",
"Running for of loop in READY file for loading members.",
);
await Promise.allSettled(
members.map(async (member) => {
const memberStruct = await structures.createMemberStruct(
+4
View File
@@ -10,6 +10,10 @@ export async function handleUserUpdate(data: DiscordGatewayPayload) {
if (!member) return;
Object.entries(userData).forEach(([key, value]) => {
eventHandlers.debug(
"loop",
`Running forEach loop in USER_UPDATE file.`,
);
// @ts-ignore index signatures
if (member[key] !== value) return member[key] = value;
});
+8
View File
@@ -15,10 +15,18 @@ export async function handleGuildRoleDelete(data: DiscordGatewayPayload) {
// For bots without GUILD_MEMBERS member.roles is never updated breaking permissions checking.
cacheHandlers.forEach("members", (member) => {
eventHandlers.debug(
"loop",
`1. Running forEach members loop in GUILD_ROLE_DELETE file.`,
);
// Not in the relevant guild so just skip.
if (!member.guilds.has(guild.id)) return;
member.guilds.forEach((g) => {
eventHandlers.debug(
"loop",
`2. Running forEach loop in CHANNEL_DELTE file.`,
);
// Member does not have this role
if (!g.roles.includes(payload.role_id)) return;
// Remove this role from the members cache