




















@@ -18,8 +18,6 @@ import {
1818editWebhookMessage,
1919getWebhookMessage,
2020} from "./api.js";
21-import type { Client } from "./client.js";
22-import { type ComponentData, type Modal } from "./components.js";
2321import { OptionsHandler } from "./interaction-options.js";
2422import {
2523InteractionResponseController,
@@ -29,11 +27,29 @@ import {
2927import { extractModalFields, ModalFields } from "./modal-fields.js";
3028import { serializePayload, type MessagePayload } from "./payload.js";
3129import { assertDiscordInteractionPayload } from "./schemas.js";
32-import { channelFactory, Guild, Message, User, type DiscordChannel } from "./structures.js";
30+import {
31+channelFactory,
32+Guild,
33+Message,
34+User,
35+type DiscordChannel,
36+type StructureClient,
37+} from "./structures.js";
33383439export { OptionsHandler } from "./interaction-options.js";
3540export { ModalFields } from "./modal-fields.js";
364142+type InteractionClient = StructureClient & {
43+options: { clientId: string };
44+fetchChannel(id: string): Promise<DiscordChannel>;
45+};
46+47+type Modal = {
48+serialize: () => unknown;
49+};
50+51+type ComponentData = Record<string, unknown>;
52+3753export type RawInteraction = APIInteraction & {
3854token: string;
3955member?: { user?: APIUser; roles?: string[] };
@@ -71,7 +87,7 @@ function toModalSubmitRawInteraction(rawData: RawInteraction): ModalSubmitRawInt
7187return rawData as ModalSubmitRawInteraction;
7288}
738974-function readInteractionUser(rawData: RawInteraction, client: Client): User | null {
90+function readInteractionUser(rawData: RawInteraction, client: InteractionClient): User | null {
7591const directUser = "user" in rawData ? rawData.user : undefined;
7692if (directUser && typeof directUser === "object" && "id" in directUser) {
7793return new User(client, directUser);
@@ -98,7 +114,7 @@ export class BaseInteraction {
98114private readonly response = new InteractionResponseController();
99115100116constructor(
101-public client: Client,
117+public client: InteractionClient,
102118public rawData: RawInteraction,
103119) {
104120this.id = rawData.id;
@@ -214,7 +230,10 @@ export class BaseInteraction {
214230215231export class CommandInteraction extends BaseInteraction {
216232readonly options: OptionsHandler;
217-constructor(client: Client, rawData: APIApplicationCommandInteraction & RawInteraction) {
233+constructor(
234+client: InteractionClient,
235+rawData: APIApplicationCommandInteraction & RawInteraction,
236+) {
218237super(client, rawData);
219238this.options = new OptionsHandler(
220239rawData.data.options,
@@ -235,7 +254,7 @@ export class AutocompleteInteraction extends CommandInteraction {
235254export class BaseComponentInteraction extends BaseInteraction {
236255readonly values: string[];
237256238-constructor(client: Client, rawData: APIMessageComponentInteraction & RawInteraction) {
257+constructor(client: InteractionClient, rawData: APIMessageComponentInteraction & RawInteraction) {
239258super(client, rawData);
240259this.message =
241260rawData.message && typeof rawData.message === "object"
@@ -264,7 +283,7 @@ export class ChannelSelectMenuInteraction extends BaseComponentInteraction {}
264283265284export class ModalInteraction extends BaseInteraction {
266285readonly fields: ModalFields;
267-constructor(client: Client, rawData: APIModalSubmitInteraction & RawInteraction) {
286+constructor(client: InteractionClient, rawData: APIModalSubmitInteraction & RawInteraction) {
268287super(client, rawData);
269288this.fields = new ModalFields(
270289extractModalFields(rawData.data.components ?? []),
@@ -277,7 +296,7 @@ export class ModalInteraction extends BaseInteraction {
277296}
278297}
279298280-export function createInteraction(client: Client, rawData: RawInteraction) {
299+export function createInteraction(client: InteractionClient, rawData: RawInteraction) {
281300assertDiscordInteractionPayload(rawData);
282301if (rawData.type === InteractionType.ApplicationCommandAutocomplete) {
283302return new AutocompleteInteraction(client, toCommandRawInteraction(rawData));
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。