mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-17 03:38:17 +00:00
2c3692810d
* structures: rename structure create functions * fix: errors occured because of structure rename * fix(controllers): errors occured because of structure rename * fix * fix createServer to createGuild rename * rename create*structure to create*Struct * update docs * Phew * rename createguildrole * fix that * fmt? * idk * why * fixxess * Update member.ts * Update member.ts * ahh found it * revert this * Update mod.ts Co-authored-by: ayntee <ayyantee@gmail.com>
67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import { eventHandlers } from "../../bot.ts";
|
|
import {
|
|
DiscordPayload,
|
|
GuildRoleDeletePayload,
|
|
GuildRolePayload,
|
|
} from "../../types/mod.ts";
|
|
import { structures } from "../structures/mod.ts";
|
|
import { cacheHandlers } from "./cache.ts";
|
|
|
|
export async function handleInternalGuildRoleCreate(data: DiscordPayload) {
|
|
if (data.t !== "GUILD_ROLE_CREATE") return;
|
|
|
|
const payload = data.d as GuildRolePayload;
|
|
const guild = await cacheHandlers.get("guilds", payload.guild_id);
|
|
if (!guild) return;
|
|
|
|
const role = await structures.createRoleStruct(payload.role);
|
|
guild.roles = guild.roles.set(payload.role.id, role);
|
|
await cacheHandlers.set("guilds", payload.guild_id, guild);
|
|
|
|
eventHandlers.roleCreate?.(guild, role);
|
|
}
|
|
|
|
export async function handleInternalGuildRoleDelete(data: DiscordPayload) {
|
|
if (data.t !== "GUILD_ROLE_DELETE") return;
|
|
|
|
const payload = data.d as GuildRoleDeletePayload;
|
|
const guild = await cacheHandlers.get("guilds", payload.guild_id);
|
|
if (!guild) return;
|
|
|
|
const cachedRole = guild.roles.get(payload.role_id)!;
|
|
guild.roles.delete(payload.role_id);
|
|
|
|
if (cachedRole) eventHandlers.roleDelete?.(guild, cachedRole);
|
|
|
|
// For bots without GUILD_MEMBERS member.roles is never updated breaking permissions checking.
|
|
cacheHandlers.forEach("members", (member) => {
|
|
// Not in the relevant guild so just skip.
|
|
if (!member.guilds.has(guild.id)) return;
|
|
|
|
member.guilds.forEach((g) => {
|
|
// Member does not have this role
|
|
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);
|
|
});
|
|
});
|
|
}
|
|
|
|
export async function handleInternalGuildRoleUpdate(data: DiscordPayload) {
|
|
if (data.t !== "GUILD_ROLE_UPDATE") return;
|
|
|
|
const payload = data.d as GuildRolePayload;
|
|
const guild = await cacheHandlers.get("guilds", payload.guild_id);
|
|
if (!guild) return;
|
|
|
|
const cachedRole = guild.roles.get(payload.role.id);
|
|
if (!cachedRole) return;
|
|
|
|
const role = await structures.createRoleStruct(payload.role);
|
|
guild.roles.set(payload.role.id, role);
|
|
await cacheHandlers.set("guilds", guild.id, guild);
|
|
|
|
eventHandlers.roleUpdate?.(guild, role, cachedRole);
|
|
}
|