mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 16:43:31 +01:00
* feat: add @discordjs/core * chore: lint * chore: add all gateway events * chore: add the rest of the rest routes * chore: cleanup gateway * chore: rename gateway to client * chore: rename gateway to client * fix: don't spread unless we need to * refactor: use classes and make requested changes * chore: show shardId on emit * chore: add interface for intrinsic props * refactor: scope dispatch data instead of spreading * chore: add utility for uploading files for messages and interactions * feat: finish up form data handling * chore: add readme * chore: update api-extractor stuff * chore: bump deps * chore: make requested changes * chore: make requested changes * Update package.json * chore: make requested changes * fix: add missing interaction responses * chore: make some requested changes * chore: remove `return await` * chore: use autoModeration instead of automod * refactor: use snowflakes and -types results * chore: sort imports, fix return type on editUserVoiceState * chore: rename bots to users * feat: add automod dispatch events * refactor: move templates and members into guild * fix: use users instead of bots in api class * chore: imports * chore: make requested changes * fix: don't make files required on interaction replies * fix: rename sendMessage to createMessage * feat: add application command routes * feat: add webhook.execute overloads and options to invites.get * chore: use create prefixes * chore: seperate interaction params * chore: use Id * chore: make requested changes * chore: make requested changes * chore: make requested changes * chore: for -> from * Apply suggestions from code review Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> * Update packages/core/README.md Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> * chore: make requested changes * chore: update -types * chore: bump vitest * fix: sticker uploading * fix: lockfile * chore: make requested changes * chore: make requested changes * Update packages/core/src/api/applicationCommands.ts Co-authored-by: Almeida <almeidx@pm.me> * Apply suggestions from code review Co-authored-by: Aura Román <kyradiscord@gmail.com> * Update packages/core/README.md Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: almeidx <almeidx@pm.me> Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: Aura Román <kyradiscord@gmail.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
180 lines
9.4 KiB
TypeScript
180 lines
9.4 KiB
TypeScript
import type { REST } from '@discordjs/rest';
|
|
import { WebSocketShardEvents, type WebSocketManager } from '@discordjs/ws';
|
|
import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';
|
|
import type {
|
|
GatewayAutoModerationActionExecutionDispatchData,
|
|
GatewayAutoModerationRuleCreateDispatchData,
|
|
GatewayAutoModerationRuleDeleteDispatchData,
|
|
GatewayAutoModerationRuleUpdateDispatchData,
|
|
GatewayChannelCreateDispatchData,
|
|
GatewayChannelDeleteDispatchData,
|
|
GatewayChannelPinsUpdateDispatchData,
|
|
GatewayChannelUpdateDispatchData,
|
|
GatewayDispatchEvents,
|
|
GatewayGuildBanAddDispatchData,
|
|
GatewayGuildBanRemoveDispatchData,
|
|
GatewayGuildCreateDispatchData,
|
|
GatewayGuildDeleteDispatchData,
|
|
GatewayGuildEmojisUpdateDispatchData,
|
|
GatewayGuildIntegrationsUpdateDispatchData,
|
|
GatewayGuildMemberAddDispatchData,
|
|
GatewayGuildMemberRemoveDispatchData,
|
|
GatewayGuildMembersChunkDispatchData,
|
|
GatewayGuildMemberUpdateDispatchData,
|
|
GatewayGuildRoleCreateDispatchData,
|
|
GatewayGuildRoleDeleteDispatchData,
|
|
GatewayGuildRoleUpdateDispatchData,
|
|
GatewayGuildScheduledEventCreateDispatchData,
|
|
GatewayGuildScheduledEventDeleteDispatchData,
|
|
GatewayGuildScheduledEventUpdateDispatchData,
|
|
GatewayGuildScheduledEventUserAddDispatchData,
|
|
GatewayGuildScheduledEventUserRemoveDispatchData,
|
|
GatewayGuildStickersUpdateDispatchData,
|
|
GatewayGuildUpdateDispatchData,
|
|
GatewayIntegrationCreateDispatchData,
|
|
GatewayIntegrationDeleteDispatchData,
|
|
GatewayIntegrationUpdateDispatchData,
|
|
GatewayInteractionCreateDispatchData,
|
|
GatewayInviteCreateDispatchData,
|
|
GatewayInviteDeleteDispatchData,
|
|
GatewayMessageCreateDispatchData,
|
|
GatewayMessageDeleteBulkDispatchData,
|
|
GatewayMessageDeleteDispatchData,
|
|
GatewayMessageReactionAddDispatchData,
|
|
GatewayMessageReactionRemoveAllDispatchData,
|
|
GatewayMessageReactionRemoveDispatchData,
|
|
GatewayMessageReactionRemoveEmojiDispatchData,
|
|
GatewayMessageUpdateDispatchData,
|
|
GatewayPresenceUpdateDispatchData,
|
|
GatewayReadyDispatchData,
|
|
GatewayStageInstanceCreateDispatchData,
|
|
GatewayStageInstanceDeleteDispatchData,
|
|
GatewayStageInstanceUpdateDispatchData,
|
|
GatewayThreadCreateDispatchData,
|
|
GatewayThreadDeleteDispatchData,
|
|
GatewayThreadListSyncDispatchData,
|
|
GatewayThreadMembersUpdateDispatchData,
|
|
GatewayThreadMemberUpdateDispatchData,
|
|
GatewayThreadUpdateDispatchData,
|
|
GatewayTypingStartDispatchData,
|
|
GatewayUserUpdateDispatchData,
|
|
GatewayVoiceServerUpdateDispatchData,
|
|
GatewayVoiceStateUpdateDispatchData,
|
|
GatewayWebhooksUpdateDispatchData,
|
|
} from 'discord-api-types/v10';
|
|
import { API } from './api/index.js';
|
|
|
|
export interface IntrinsicProps {
|
|
/**
|
|
* The REST API
|
|
*/
|
|
api: API;
|
|
/**
|
|
* The id of the shard that emitted the event
|
|
*/
|
|
shardId: number;
|
|
}
|
|
|
|
export interface WithIntrinsicProps<T> extends IntrinsicProps {
|
|
data: T;
|
|
}
|
|
|
|
export interface MappedEvents {
|
|
[GatewayDispatchEvents.ChannelCreate]: [WithIntrinsicProps<GatewayChannelCreateDispatchData>];
|
|
[GatewayDispatchEvents.ChannelDelete]: [WithIntrinsicProps<GatewayChannelDeleteDispatchData>];
|
|
[GatewayDispatchEvents.ChannelPinsUpdate]: [WithIntrinsicProps<GatewayChannelPinsUpdateDispatchData>];
|
|
[GatewayDispatchEvents.ChannelUpdate]: [WithIntrinsicProps<GatewayChannelUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildBanAdd]: [WithIntrinsicProps<GatewayGuildBanAddDispatchData>];
|
|
[GatewayDispatchEvents.GuildBanRemove]: [WithIntrinsicProps<GatewayGuildBanRemoveDispatchData>];
|
|
[GatewayDispatchEvents.GuildCreate]: [WithIntrinsicProps<GatewayGuildCreateDispatchData>];
|
|
[GatewayDispatchEvents.GuildDelete]: [WithIntrinsicProps<GatewayGuildDeleteDispatchData>];
|
|
[GatewayDispatchEvents.GuildEmojisUpdate]: [WithIntrinsicProps<GatewayGuildEmojisUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildIntegrationsUpdate]: [WithIntrinsicProps<GatewayGuildIntegrationsUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildMemberAdd]: [WithIntrinsicProps<GatewayGuildMemberAddDispatchData>];
|
|
[GatewayDispatchEvents.GuildMemberRemove]: [WithIntrinsicProps<GatewayGuildMemberRemoveDispatchData>];
|
|
[GatewayDispatchEvents.GuildMemberUpdate]: [WithIntrinsicProps<GatewayGuildMemberUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildMembersChunk]: [WithIntrinsicProps<GatewayGuildMembersChunkDispatchData>];
|
|
[GatewayDispatchEvents.GuildRoleCreate]: [WithIntrinsicProps<GatewayGuildRoleCreateDispatchData>];
|
|
[GatewayDispatchEvents.GuildRoleDelete]: [WithIntrinsicProps<GatewayGuildRoleDeleteDispatchData>];
|
|
[GatewayDispatchEvents.GuildRoleUpdate]: [WithIntrinsicProps<GatewayGuildRoleUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildScheduledEventCreate]: [WithIntrinsicProps<GatewayGuildScheduledEventCreateDispatchData>];
|
|
[GatewayDispatchEvents.GuildScheduledEventDelete]: [WithIntrinsicProps<GatewayGuildScheduledEventDeleteDispatchData>];
|
|
[GatewayDispatchEvents.GuildScheduledEventUpdate]: [WithIntrinsicProps<GatewayGuildScheduledEventUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildScheduledEventUserAdd]: [
|
|
WithIntrinsicProps<GatewayGuildScheduledEventUserAddDispatchData>,
|
|
];
|
|
[GatewayDispatchEvents.GuildScheduledEventUserRemove]: [
|
|
WithIntrinsicProps<GatewayGuildScheduledEventUserRemoveDispatchData>,
|
|
];
|
|
[GatewayDispatchEvents.GuildStickersUpdate]: [WithIntrinsicProps<GatewayGuildStickersUpdateDispatchData>];
|
|
[GatewayDispatchEvents.GuildUpdate]: [WithIntrinsicProps<GatewayGuildUpdateDispatchData>];
|
|
[GatewayDispatchEvents.IntegrationCreate]: [WithIntrinsicProps<GatewayIntegrationCreateDispatchData>];
|
|
[GatewayDispatchEvents.IntegrationDelete]: [WithIntrinsicProps<GatewayIntegrationDeleteDispatchData>];
|
|
[GatewayDispatchEvents.IntegrationUpdate]: [WithIntrinsicProps<GatewayIntegrationUpdateDispatchData>];
|
|
[GatewayDispatchEvents.InteractionCreate]: [WithIntrinsicProps<GatewayInteractionCreateDispatchData>];
|
|
[GatewayDispatchEvents.InviteCreate]: [WithIntrinsicProps<GatewayInviteCreateDispatchData>];
|
|
[GatewayDispatchEvents.InviteDelete]: [WithIntrinsicProps<GatewayInviteDeleteDispatchData>];
|
|
[GatewayDispatchEvents.MessageCreate]: [WithIntrinsicProps<GatewayMessageCreateDispatchData>];
|
|
[GatewayDispatchEvents.MessageDelete]: [WithIntrinsicProps<GatewayMessageDeleteDispatchData>];
|
|
[GatewayDispatchEvents.MessageDeleteBulk]: [WithIntrinsicProps<GatewayMessageDeleteBulkDispatchData>];
|
|
[GatewayDispatchEvents.MessageReactionAdd]: [WithIntrinsicProps<GatewayMessageReactionAddDispatchData>];
|
|
[GatewayDispatchEvents.MessageReactionRemove]: [WithIntrinsicProps<GatewayMessageReactionRemoveDispatchData>];
|
|
[GatewayDispatchEvents.MessageReactionRemoveAll]: [WithIntrinsicProps<GatewayMessageReactionRemoveAllDispatchData>];
|
|
[GatewayDispatchEvents.MessageReactionRemoveEmoji]: [
|
|
WithIntrinsicProps<GatewayMessageReactionRemoveEmojiDispatchData>,
|
|
];
|
|
[GatewayDispatchEvents.MessageUpdate]: [WithIntrinsicProps<GatewayMessageUpdateDispatchData>];
|
|
[GatewayDispatchEvents.PresenceUpdate]: [WithIntrinsicProps<GatewayPresenceUpdateDispatchData>];
|
|
[GatewayDispatchEvents.Ready]: [WithIntrinsicProps<GatewayReadyDispatchData>];
|
|
[GatewayDispatchEvents.StageInstanceCreate]: [WithIntrinsicProps<GatewayStageInstanceCreateDispatchData>];
|
|
[GatewayDispatchEvents.StageInstanceDelete]: [WithIntrinsicProps<GatewayStageInstanceDeleteDispatchData>];
|
|
[GatewayDispatchEvents.StageInstanceUpdate]: [WithIntrinsicProps<GatewayStageInstanceUpdateDispatchData>];
|
|
[GatewayDispatchEvents.ThreadCreate]: [WithIntrinsicProps<GatewayThreadCreateDispatchData>];
|
|
[GatewayDispatchEvents.ThreadDelete]: [WithIntrinsicProps<GatewayThreadDeleteDispatchData>];
|
|
[GatewayDispatchEvents.ThreadListSync]: [WithIntrinsicProps<GatewayThreadListSyncDispatchData>];
|
|
[GatewayDispatchEvents.ThreadMemberUpdate]: [WithIntrinsicProps<GatewayThreadMemberUpdateDispatchData>];
|
|
[GatewayDispatchEvents.ThreadMembersUpdate]: [WithIntrinsicProps<GatewayThreadMembersUpdateDispatchData>];
|
|
[GatewayDispatchEvents.ThreadUpdate]: [WithIntrinsicProps<GatewayThreadUpdateDispatchData>];
|
|
[GatewayDispatchEvents.UserUpdate]: [WithIntrinsicProps<GatewayUserUpdateDispatchData>];
|
|
[GatewayDispatchEvents.VoiceServerUpdate]: [WithIntrinsicProps<GatewayVoiceServerUpdateDispatchData>];
|
|
[GatewayDispatchEvents.VoiceStateUpdate]: [WithIntrinsicProps<GatewayVoiceStateUpdateDispatchData>];
|
|
[GatewayDispatchEvents.WebhooksUpdate]: [WithIntrinsicProps<GatewayWebhooksUpdateDispatchData>];
|
|
[GatewayDispatchEvents.Resumed]: [WithIntrinsicProps<never>];
|
|
[GatewayDispatchEvents.TypingStart]: [WithIntrinsicProps<GatewayTypingStartDispatchData>];
|
|
[GatewayDispatchEvents.AutoModerationActionExecution]: [
|
|
WithIntrinsicProps<GatewayAutoModerationActionExecutionDispatchData>,
|
|
];
|
|
[GatewayDispatchEvents.AutoModerationRuleCreate]: [WithIntrinsicProps<GatewayAutoModerationRuleCreateDispatchData>];
|
|
[GatewayDispatchEvents.AutoModerationRuleDelete]: [WithIntrinsicProps<GatewayAutoModerationRuleDeleteDispatchData>];
|
|
[GatewayDispatchEvents.AutoModerationRuleUpdate]: [WithIntrinsicProps<GatewayAutoModerationRuleUpdateDispatchData>];
|
|
}
|
|
|
|
export type ManagerShardEventsMap = {
|
|
[K in keyof MappedEvents]: MappedEvents[K];
|
|
};
|
|
|
|
export interface ClientOptions {
|
|
rest: REST;
|
|
ws: WebSocketManager;
|
|
}
|
|
|
|
export function createClient({ rest, ws }: ClientOptions) {
|
|
const api = new API(rest);
|
|
const emitter = new AsyncEventEmitter<ManagerShardEventsMap>();
|
|
|
|
function wrapIntrinsicProps<T>(obj: T, shardId: number): WithIntrinsicProps<T> {
|
|
return {
|
|
api,
|
|
shardId,
|
|
data: obj,
|
|
};
|
|
}
|
|
|
|
ws.on(WebSocketShardEvents.Dispatch, ({ data: dispatch, shardId }) => {
|
|
// @ts-expect-error event props can't be resolved properly, but they are correct
|
|
emitter.emit(dispatch.t, wrapIntrinsicProps(dispatch.d, shardId));
|
|
});
|
|
|
|
return emitter;
|
|
}
|