seyfert/src/events/hooks/guild.ts
2024-05-11 23:29:28 -04:00

145 lines
4.9 KiB
TypeScript

import type {
GatewayGuildAuditLogEntryCreateDispatchData,
GatewayGuildBanAddDispatchData,
GatewayGuildBanRemoveDispatchData,
GatewayGuildCreateDispatchData,
GatewayGuildDeleteDispatchData,
GatewayGuildEmojisUpdateDispatchData,
GatewayGuildIntegrationsUpdateDispatchData,
GatewayGuildMemberRemoveDispatchData,
GatewayGuildMemberUpdateDispatchData,
GatewayGuildMembersChunkDispatchData,
GatewayGuildRoleCreateDispatchData,
GatewayGuildRoleDeleteDispatchData,
GatewayGuildRoleUpdateDispatchData,
GatewayGuildScheduledEventCreateDispatchData,
GatewayGuildScheduledEventDeleteDispatchData,
GatewayGuildScheduledEventUpdateDispatchData,
GatewayGuildScheduledEventUserAddDispatchData,
GatewayGuildScheduledEventUserRemoveDispatchData,
GatewayGuildStickersUpdateDispatchData,
GatewayGuildUpdateDispatchData,
} from 'discord-api-types/v10';
import type { BaseClient } from '../../client/base';
import { toCamelCase } from '../../common';
import {
Guild,
GuildEmoji,
GuildMember,
GuildRole,
Sticker,
UnavailableMember,
User,
type GatewayGuildMemberAddDispatchDataFixed,
} from '../../structures';
export const GUILD_AUDIT_LOG_ENTRY_CREATE = (_self: BaseClient, data: GatewayGuildAuditLogEntryCreateDispatchData) => {
return toCamelCase(data);
};
export const GUILD_BAN_ADD = (self: BaseClient, data: GatewayGuildBanAddDispatchData) => {
return { ...toCamelCase(data), user: new User(self, data.user) };
};
export const GUILD_BAN_REMOVE = (self: BaseClient, data: GatewayGuildBanRemoveDispatchData) => {
return { ...toCamelCase(data), user: new User(self, data.user) };
};
export const GUILD_CREATE = (self: BaseClient, data: GatewayGuildCreateDispatchData) => {
return new Guild<'create'>(self, data);
};
export const GUILD_DELETE = async (self: BaseClient, data: GatewayGuildDeleteDispatchData) => {
return (await self.cache.guilds?.get(data.id)) ?? data;
};
export const GUILD_EMOJIS_UPDATE = (self: BaseClient, data: GatewayGuildEmojisUpdateDispatchData) => {
return {
...toCamelCase(data),
emojis: data.emojis.map(x => new GuildEmoji(self, x, data.guild_id)),
};
};
export const GUILD_INTEGRATIONS_UPDATE = (_self: BaseClient, data: GatewayGuildIntegrationsUpdateDispatchData) => {
return toCamelCase(data);
};
export const GUILD_MEMBER_ADD = (self: BaseClient, data: GatewayGuildMemberAddDispatchDataFixed<boolean>) => {
if (!('user' in data)) return new UnavailableMember(self, data, data.id, data.guild_id);
return new GuildMember(self, data, data.user, data.guild_id);
};
export const GUILD_MEMBER_REMOVE = (self: BaseClient, data: GatewayGuildMemberRemoveDispatchData) => {
return { ...toCamelCase(data), user: new User(self, data.user) };
};
export const GUILD_MEMBERS_CHUNK = (self: BaseClient, data: GatewayGuildMembersChunkDispatchData) => {
return {
...toCamelCase(data),
members: data.members.map(x => new GuildMember(self, x, x.user!, data.guild_id)),
};
};
export const GUILD_MEMBER_UPDATE = async (
self: BaseClient,
data: GatewayGuildMemberUpdateDispatchData,
): Promise<[member: GuildMember, old?: GuildMember]> => {
const oldData = await self.cache.members?.get(data.user.id, data.guild_id);
return [new GuildMember(self, data, data.user, data.guild_id), oldData];
};
export const GUILD_SCHEDULED_EVENT_CREATE = (_self: BaseClient, data: GatewayGuildScheduledEventCreateDispatchData) => {
return toCamelCase(data);
};
export const GUILD_SCHEDULED_EVENT_UPDATE = (_self: BaseClient, data: GatewayGuildScheduledEventUpdateDispatchData) => {
return toCamelCase(data);
};
export const GUILD_SCHEDULED_EVENT_DELETE = (_self: BaseClient, data: GatewayGuildScheduledEventDeleteDispatchData) => {
return toCamelCase(data);
};
export const GUILD_SCHEDULED_EVENT_USER_ADD = (
_self: BaseClient,
data: GatewayGuildScheduledEventUserAddDispatchData,
) => {
return toCamelCase(data);
};
export const GUILD_SCHEDULED_EVENT_USER_REMOVE = (
_self: BaseClient,
data: GatewayGuildScheduledEventUserRemoveDispatchData,
) => {
return toCamelCase(data);
};
export const GUILD_ROLE_CREATE = (self: BaseClient, data: GatewayGuildRoleCreateDispatchData) => {
return new GuildRole(self, data.role, data.guild_id);
};
export const GUILD_ROLE_DELETE = async (self: BaseClient, data: GatewayGuildRoleDeleteDispatchData) => {
return (await self.cache.roles?.get(data.role_id)) || toCamelCase(data);
};
export const GUILD_ROLE_UPDATE = async (
self: BaseClient,
data: GatewayGuildRoleUpdateDispatchData,
): Promise<[role: GuildRole, old?: GuildRole]> => {
return [new GuildRole(self, data.role, data.guild_id), await self.cache.roles?.get(data.role.id)];
};
export const GUILD_STICKERS_UPDATE = (self: BaseClient, data: GatewayGuildStickersUpdateDispatchData) => {
return {
...toCamelCase(data),
stickers: data.stickers.map(x => new Sticker(self, x)),
};
};
export const GUILD_UPDATE = async (
self: BaseClient,
data: GatewayGuildUpdateDispatchData,
): Promise<[guild: Guild, old?: Guild<'cached'>]> => {
return [new Guild(self, data), await self.cache.guilds?.get(data.id)];
};