interactions api design fix
This commit is contained in:
parent
1beccb57ba
commit
2cdb671fb1
12 changed files with 7 additions and 180 deletions
2
mod.ts
2
mod.ts
|
@ -40,10 +40,8 @@ export { GuildManager } from './src/managers/guilds.ts'
|
||||||
export * from './src/structures/base.ts'
|
export * from './src/structures/base.ts'
|
||||||
export * from './src/structures/slash.ts'
|
export * from './src/structures/slash.ts'
|
||||||
export * from './src/structures/interactions.ts'
|
export * from './src/structures/interactions.ts'
|
||||||
export * from './src/structures/messageComponents.ts'
|
|
||||||
export * from './src/types/slashCommands.ts'
|
export * from './src/types/slashCommands.ts'
|
||||||
export * from './src/types/interactions.ts'
|
export * from './src/types/interactions.ts'
|
||||||
export * from './src/types/messageComponents.ts'
|
|
||||||
export { GuildEmojisManager } from './src/managers/guildEmojis.ts'
|
export { GuildEmojisManager } from './src/managers/guildEmojis.ts'
|
||||||
export { MembersManager } from './src/managers/members.ts'
|
export { MembersManager } from './src/managers/members.ts'
|
||||||
export { MessageReactionsManager } from './src/managers/messageReactions.ts'
|
export { MessageReactionsManager } from './src/managers/messageReactions.ts'
|
||||||
|
|
|
@ -22,7 +22,6 @@ import { RolePayload } from '../../types/role.ts'
|
||||||
import { InteractionChannelPayload } from '../../types/slashCommands.ts'
|
import { InteractionChannelPayload } from '../../types/slashCommands.ts'
|
||||||
import { Message } from '../../structures/message.ts'
|
import { Message } from '../../structures/message.ts'
|
||||||
import { TextChannel } from '../../structures/textChannel.ts'
|
import { TextChannel } from '../../structures/textChannel.ts'
|
||||||
import { MessageComponentInteraction } from '../../structures/messageComponents.ts'
|
|
||||||
|
|
||||||
export const interactionCreate: GatewayEventHandler = async (
|
export const interactionCreate: GatewayEventHandler = async (
|
||||||
gateway: Gateway,
|
gateway: Gateway,
|
||||||
|
@ -156,14 +155,6 @@ export const interactionCreate: GatewayEventHandler = async (
|
||||||
user,
|
user,
|
||||||
resolved
|
resolved
|
||||||
})
|
})
|
||||||
} else if (d.type === InteractionType.MESSAGE_COMPONENT) {
|
|
||||||
interaction = new MessageComponentInteraction(gateway.client, d, {
|
|
||||||
member,
|
|
||||||
guild,
|
|
||||||
channel,
|
|
||||||
user,
|
|
||||||
message
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
interaction = new Interaction(gateway.client, d, {
|
interaction = new Interaction(gateway.client, d, {
|
||||||
member,
|
member,
|
||||||
|
|
|
@ -69,7 +69,6 @@ import { applicationCommandCreate } from './applicationCommandCreate.ts'
|
||||||
import { applicationCommandDelete } from './applicationCommandDelete.ts'
|
import { applicationCommandDelete } from './applicationCommandDelete.ts'
|
||||||
import { applicationCommandUpdate } from './applicationCommandUpdate.ts'
|
import { applicationCommandUpdate } from './applicationCommandUpdate.ts'
|
||||||
import type { SlashCommand } from '../../interactions/slashCommand.ts'
|
import type { SlashCommand } from '../../interactions/slashCommand.ts'
|
||||||
import { MessageComponentInteraction } from '../../structures/messageComponents.ts'
|
|
||||||
|
|
||||||
export const gatewayHandlers: {
|
export const gatewayHandlers: {
|
||||||
[eventCode in GatewayEvents]: GatewayEventHandler | undefined
|
[eventCode in GatewayEvents]: GatewayEventHandler | undefined
|
||||||
|
@ -365,12 +364,7 @@ export type ClientEvents = {
|
||||||
* An Interaction was created
|
* An Interaction was created
|
||||||
* @param interaction Created interaction object
|
* @param interaction Created interaction object
|
||||||
*/
|
*/
|
||||||
interactionCreate: [
|
interactionCreate: [interaction: Interaction | SlashCommandInteraction]
|
||||||
interaction:
|
|
||||||
| Interaction
|
|
||||||
| SlashCommandInteraction
|
|
||||||
| MessageComponentInteraction
|
|
||||||
]
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When debug message was made
|
* When debug message was made
|
||||||
|
|
|
@ -17,7 +17,6 @@ import { User } from '../structures/user.ts'
|
||||||
import { HarmonyEventEmitter } from '../utils/events.ts'
|
import { HarmonyEventEmitter } from '../utils/events.ts'
|
||||||
import { encodeText, decodeText } from '../utils/encoding.ts'
|
import { encodeText, decodeText } from '../utils/encoding.ts'
|
||||||
import { SlashCommandsManager } from './slashCommand.ts'
|
import { SlashCommandsManager } from './slashCommand.ts'
|
||||||
import { MessageComponentInteraction } from '../structures/messageComponents.ts'
|
|
||||||
|
|
||||||
export type SlashCommandHandlerCallback = (
|
export type SlashCommandHandlerCallback = (
|
||||||
interaction: SlashCommandInteraction
|
interaction: SlashCommandInteraction
|
||||||
|
@ -203,10 +202,7 @@ export class SlashClient extends HarmonyEventEmitter<SlashClientEvents> {
|
||||||
|
|
||||||
/** Process an incoming Interaction */
|
/** Process an incoming Interaction */
|
||||||
private async _process(
|
private async _process(
|
||||||
interaction:
|
interaction: Interaction | SlashCommandInteraction
|
||||||
| Interaction
|
|
||||||
| SlashCommandInteraction
|
|
||||||
| MessageComponentInteraction
|
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
if (!this.enabled) return
|
if (!this.enabled) return
|
||||||
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
import {
|
|
||||||
MessageComponentData,
|
|
||||||
MessageComponentPayload
|
|
||||||
} from '../types/messageComponents.ts'
|
|
||||||
|
|
||||||
export function transformComponent(
|
|
||||||
d: MessageComponentData[]
|
|
||||||
): MessageComponentPayload[] {
|
|
||||||
return d.map((e: any) => {
|
|
||||||
if (e.customID !== undefined) {
|
|
||||||
e.custom_id = e.customID
|
|
||||||
delete e.customID
|
|
||||||
}
|
|
||||||
if (e.components !== undefined) {
|
|
||||||
e.components = transformComponent(e.components)
|
|
||||||
}
|
|
||||||
return e
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -11,7 +11,6 @@ import type {
|
||||||
import { CHANNEL } from '../types/endpoint.ts'
|
import { CHANNEL } from '../types/endpoint.ts'
|
||||||
import getChannelByType from '../utils/channel.ts'
|
import getChannelByType from '../utils/channel.ts'
|
||||||
import { BaseManager } from './base.ts'
|
import { BaseManager } from './base.ts'
|
||||||
import { transformComponent } from './_util.ts'
|
|
||||||
|
|
||||||
export type AllMessageOptions = MessageOptions | Embed
|
export type AllMessageOptions = MessageOptions | Embed
|
||||||
|
|
||||||
|
@ -101,10 +100,6 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> {
|
||||||
content: content,
|
content: content,
|
||||||
embed: option?.embed,
|
embed: option?.embed,
|
||||||
file: option?.file,
|
file: option?.file,
|
||||||
components:
|
|
||||||
option?.components !== undefined
|
|
||||||
? transformComponent(option.components)
|
|
||||||
: undefined,
|
|
||||||
files: option?.files,
|
files: option?.files,
|
||||||
tts: option?.tts,
|
tts: option?.tts,
|
||||||
allowed_mentions: option?.allowedMentions,
|
allowed_mentions: option?.allowedMentions,
|
||||||
|
@ -172,10 +167,6 @@ export class ChannelsManager extends BaseManager<ChannelPayload, Channel> {
|
||||||
embed: option?.embed !== undefined ? option.embed.toJSON() : undefined,
|
embed: option?.embed !== undefined ? option.embed.toJSON() : undefined,
|
||||||
// Cannot upload new files with Message
|
// Cannot upload new files with Message
|
||||||
// file: option?.file,
|
// file: option?.file,
|
||||||
components:
|
|
||||||
option?.components !== undefined
|
|
||||||
? transformComponent(option.components)
|
|
||||||
: undefined,
|
|
||||||
tts: option?.tts,
|
tts: option?.tts,
|
||||||
allowed_mentions: option?.allowedMentions
|
allowed_mentions: option?.allowedMentions
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import type { Client } from '../client/client.ts'
|
import type { Client } from '../client/client.ts'
|
||||||
import { transformComponent } from '../managers/_util.ts'
|
|
||||||
import {
|
import {
|
||||||
AllowedMentionsPayload,
|
AllowedMentionsPayload,
|
||||||
ChannelTypes,
|
ChannelTypes,
|
||||||
|
@ -14,10 +13,6 @@ import {
|
||||||
InteractionResponseType,
|
InteractionResponseType,
|
||||||
InteractionType
|
InteractionType
|
||||||
} from '../types/interactions.ts'
|
} from '../types/interactions.ts'
|
||||||
import {
|
|
||||||
InteractionMessageComponentData,
|
|
||||||
MessageComponentData
|
|
||||||
} from '../types/messageComponents.ts'
|
|
||||||
import {
|
import {
|
||||||
InteractionApplicationCommandData,
|
InteractionApplicationCommandData,
|
||||||
InteractionChannelPayload
|
InteractionChannelPayload
|
||||||
|
@ -50,7 +45,6 @@ export interface InteractionMessageOptions {
|
||||||
allowedMentions?: AllowedMentionsPayload
|
allowedMentions?: AllowedMentionsPayload
|
||||||
/** Whether the Message Response should be Ephemeral (only visible to User) or not */
|
/** Whether the Message Response should be Ephemeral (only visible to User) or not */
|
||||||
ephemeral?: boolean
|
ephemeral?: boolean
|
||||||
components?: MessageComponentData[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface InteractionResponse extends InteractionMessageOptions {
|
export interface InteractionResponse extends InteractionMessageOptions {
|
||||||
|
@ -107,7 +101,7 @@ export class Interaction extends SnowflakeBase {
|
||||||
_httpResponded?: boolean
|
_httpResponded?: boolean
|
||||||
applicationID: string
|
applicationID: string
|
||||||
/** Data sent with Interaction. Only applies to Application Command */
|
/** Data sent with Interaction. Only applies to Application Command */
|
||||||
data?: InteractionApplicationCommandData | InteractionMessageComponentData
|
data?: InteractionApplicationCommandData
|
||||||
message?: Message
|
message?: Message
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -154,11 +148,7 @@ export class Interaction extends SnowflakeBase {
|
||||||
embeds: data.embeds,
|
embeds: data.embeds,
|
||||||
tts: data.tts ?? false,
|
tts: data.tts ?? false,
|
||||||
flags,
|
flags,
|
||||||
allowed_mentions: data.allowedMentions ?? undefined,
|
allowed_mentions: data.allowedMentions ?? undefined
|
||||||
components:
|
|
||||||
data.components === undefined
|
|
||||||
? undefined
|
|
||||||
: transformComponent(data.components)
|
|
||||||
}
|
}
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
|
@ -231,7 +221,6 @@ export class Interaction extends SnowflakeBase {
|
||||||
embeds?: Array<Embed | EmbedPayload>
|
embeds?: Array<Embed | EmbedPayload>
|
||||||
flags?: number | number[]
|
flags?: number | number[]
|
||||||
allowedMentions?: AllowedMentionsPayload
|
allowedMentions?: AllowedMentionsPayload
|
||||||
components?: MessageComponentData[]
|
|
||||||
}): Promise<Interaction> {
|
}): Promise<Interaction> {
|
||||||
const url = WEBHOOK_MESSAGE(this.applicationID, this.token, '@original')
|
const url = WEBHOOK_MESSAGE(this.applicationID, this.token, '@original')
|
||||||
await this.client.rest.patch(url, {
|
await this.client.rest.patch(url, {
|
||||||
|
@ -241,11 +230,7 @@ export class Interaction extends SnowflakeBase {
|
||||||
typeof data.flags === 'object'
|
typeof data.flags === 'object'
|
||||||
? data.flags.reduce((p, a) => p | a, 0)
|
? data.flags.reduce((p, a) => p | a, 0)
|
||||||
: data.flags,
|
: data.flags,
|
||||||
allowed_mentions: data.allowedMentions,
|
allowed_mentions: data.allowedMentions
|
||||||
components:
|
|
||||||
data.components === undefined
|
|
||||||
? undefined
|
|
||||||
: transformComponent(data.components)
|
|
||||||
})
|
})
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
import {
|
|
||||||
InteractionMessageComponentData,
|
|
||||||
MessageComponentType
|
|
||||||
} from '../types/messageComponents.ts'
|
|
||||||
import { Interaction } from './interactions.ts'
|
|
||||||
import type { Client } from '../client/mod.ts'
|
|
||||||
import { InteractionPayload } from '../types/interactions.ts'
|
|
||||||
import type { Guild } from './guild.ts'
|
|
||||||
import type { GuildTextChannel } from './guildTextChannel.ts'
|
|
||||||
import type { Member } from './member.ts'
|
|
||||||
import type { TextChannel } from './textChannel.ts'
|
|
||||||
import { User } from './user.ts'
|
|
||||||
import { Message } from './message.ts'
|
|
||||||
|
|
||||||
export class MessageComponentInteraction extends Interaction {
|
|
||||||
data: InteractionMessageComponentData
|
|
||||||
declare message: Message
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
client: Client,
|
|
||||||
data: InteractionPayload,
|
|
||||||
others: {
|
|
||||||
channel?: TextChannel | GuildTextChannel
|
|
||||||
guild?: Guild
|
|
||||||
member?: Member
|
|
||||||
user: User
|
|
||||||
message?: Message
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
super(client, data, others)
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
||||||
this.data = data.data as InteractionMessageComponentData
|
|
||||||
}
|
|
||||||
|
|
||||||
get customID(): string {
|
|
||||||
return this.data.custom_id
|
|
||||||
}
|
|
||||||
|
|
||||||
get componentType(): MessageComponentType {
|
|
||||||
return this.data.component_type
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -7,10 +7,6 @@ import type { EmojiPayload } from './emoji.ts'
|
||||||
import type { MemberPayload } from './guild.ts'
|
import type { MemberPayload } from './guild.ts'
|
||||||
import type { InteractionType } from './interactions.ts'
|
import type { InteractionType } from './interactions.ts'
|
||||||
import type { UserPayload } from './user.ts'
|
import type { UserPayload } from './user.ts'
|
||||||
import type {
|
|
||||||
MessageComponentData,
|
|
||||||
MessageComponentPayload
|
|
||||||
} from './messageComponents.ts'
|
|
||||||
|
|
||||||
export interface ChannelPayload {
|
export interface ChannelPayload {
|
||||||
id: string
|
id: string
|
||||||
|
@ -192,7 +188,6 @@ export interface MessagePayload {
|
||||||
flags?: number
|
flags?: number
|
||||||
stickers?: MessageStickerPayload[]
|
stickers?: MessageStickerPayload[]
|
||||||
interaction?: MessageInteractionPayload
|
interaction?: MessageInteractionPayload
|
||||||
components?: MessageComponentPayload[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum AllowedMentionType {
|
export enum AllowedMentionType {
|
||||||
|
@ -215,7 +210,6 @@ export interface MessageOptions {
|
||||||
files?: MessageAttachment[]
|
files?: MessageAttachment[]
|
||||||
allowedMentions?: AllowedMentionsPayload
|
allowedMentions?: AllowedMentionsPayload
|
||||||
reply?: Message | MessageReference | string
|
reply?: Message | MessageReference | string
|
||||||
components?: MessageComponentData[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ChannelMention {
|
export interface ChannelMention {
|
||||||
|
@ -399,7 +393,6 @@ export interface EditMessagePayload {
|
||||||
embed?: EmbedPayload
|
embed?: EmbedPayload
|
||||||
allowed_mentions?: AllowedMentionsPayload
|
allowed_mentions?: AllowedMentionsPayload
|
||||||
flags?: number
|
flags?: number
|
||||||
components?: MessageComponentPayload[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateMessagePayload extends EditMessagePayload {
|
export interface CreateMessagePayload extends EditMessagePayload {
|
||||||
|
@ -408,7 +401,6 @@ export interface CreateMessagePayload extends EditMessagePayload {
|
||||||
message_reference?: MessageReference
|
message_reference?: MessageReference
|
||||||
file?: MessageAttachment
|
file?: MessageAttachment
|
||||||
files?: MessageAttachment[]
|
files?: MessageAttachment[]
|
||||||
components?: MessageComponentPayload[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CreateWebhookMessageBasePayload {
|
export interface CreateWebhookMessageBasePayload {
|
||||||
|
|
|
@ -4,10 +4,6 @@ import {
|
||||||
MessagePayload
|
MessagePayload
|
||||||
} from './channel.ts'
|
} from './channel.ts'
|
||||||
import type { MemberPayload } from './guild.ts'
|
import type { MemberPayload } from './guild.ts'
|
||||||
import {
|
|
||||||
InteractionMessageComponentData,
|
|
||||||
MessageComponentData
|
|
||||||
} from './messageComponents.ts'
|
|
||||||
import type { InteractionApplicationCommandData } from './slashCommands.ts'
|
import type { InteractionApplicationCommandData } from './slashCommands.ts'
|
||||||
import type { UserPayload } from './user.ts'
|
import type { UserPayload } from './user.ts'
|
||||||
|
|
||||||
|
@ -15,9 +11,7 @@ export enum InteractionType {
|
||||||
/** Ping sent by the API (HTTP-only) */
|
/** Ping sent by the API (HTTP-only) */
|
||||||
PING = 1,
|
PING = 1,
|
||||||
/** Slash Command Interaction */
|
/** Slash Command Interaction */
|
||||||
APPLICATION_COMMAND = 2,
|
APPLICATION_COMMAND = 2
|
||||||
/** Message Component Interaction */
|
|
||||||
MESSAGE_COMPONENT = 3
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface InteractionMemberPayload extends MemberPayload {
|
export interface InteractionMemberPayload extends MemberPayload {
|
||||||
|
@ -39,7 +33,7 @@ export interface InteractionPayload {
|
||||||
/**
|
/**
|
||||||
* Data sent with the interaction. Undefined only when Interaction is PING (http-only).*
|
* Data sent with the interaction. Undefined only when Interaction is PING (http-only).*
|
||||||
*/
|
*/
|
||||||
data?: InteractionApplicationCommandData | InteractionMessageComponentData
|
data?: InteractionApplicationCommandData
|
||||||
/** ID of the Guild in which Interaction was invoked */
|
/** ID of the Guild in which Interaction was invoked */
|
||||||
guild_id?: string
|
guild_id?: string
|
||||||
/** ID of the Channel in which Interaction was invoked */
|
/** ID of the Channel in which Interaction was invoked */
|
||||||
|
@ -75,7 +69,6 @@ export interface InteractionResponseDataPayload {
|
||||||
/** Allowed Mentions object */
|
/** Allowed Mentions object */
|
||||||
allowed_mentions?: AllowedMentionsPayload
|
allowed_mentions?: AllowedMentionsPayload
|
||||||
flags?: number
|
flags?: number
|
||||||
components?: MessageComponentData[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum InteractionResponseFlags {
|
export enum InteractionResponseFlags {
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
export enum MessageComponentType {
|
|
||||||
ActionRow = 1,
|
|
||||||
Button = 2
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum ButtonStyle {
|
|
||||||
Primary = 1,
|
|
||||||
Secondary = 2,
|
|
||||||
Success = 3,
|
|
||||||
Destructive = 4,
|
|
||||||
Link = 5
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MessageComponentEmoji {
|
|
||||||
id?: string
|
|
||||||
name?: string
|
|
||||||
animated?: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MessageComponentPayload {
|
|
||||||
type: MessageComponentType
|
|
||||||
components?: MessageComponentPayload[]
|
|
||||||
label?: string
|
|
||||||
style?: ButtonStyle
|
|
||||||
url?: string
|
|
||||||
custom_id?: string
|
|
||||||
emoji?: MessageComponentEmoji
|
|
||||||
disabled?: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MessageComponentData {
|
|
||||||
type: MessageComponentType
|
|
||||||
components?: MessageComponentData[]
|
|
||||||
label?: string
|
|
||||||
style?: ButtonStyle
|
|
||||||
url?: string
|
|
||||||
customID?: string
|
|
||||||
emoji?: MessageComponentEmoji
|
|
||||||
disabled?: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface InteractionMessageComponentData {
|
|
||||||
custom_id: string
|
|
||||||
component_type: MessageComponentType
|
|
||||||
}
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { InteractionType } from '../../mod.ts'
|
import { InteractionType } from '../../mod.ts'
|
||||||
import { Interaction } from '../structures/interactions.ts'
|
import { Interaction } from '../structures/interactions.ts'
|
||||||
import { MessageComponentInteraction } from '../structures/messageComponents.ts'
|
|
||||||
import { SlashCommandInteraction } from '../structures/slash.ts'
|
import { SlashCommandInteraction } from '../structures/slash.ts'
|
||||||
|
|
||||||
export function isSlashCommandInteraction(
|
export function isSlashCommandInteraction(
|
||||||
|
@ -8,9 +7,3 @@ export function isSlashCommandInteraction(
|
||||||
): d is SlashCommandInteraction {
|
): d is SlashCommandInteraction {
|
||||||
return d.type === InteractionType.APPLICATION_COMMAND
|
return d.type === InteractionType.APPLICATION_COMMAND
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isMessageComponentInteraction(
|
|
||||||
d: Interaction
|
|
||||||
): d is MessageComponentInteraction {
|
|
||||||
return d.type === InteractionType.MESSAGE_COMPONENT
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue