breaking: more descriptive component event types
This commit is contained in:
5
.changeset/five-wolves-destroy.md
Normal file
5
.changeset/five-wolves-destroy.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"reacord": minor
|
||||
---
|
||||
|
||||
breaking: more descriptive component event types
|
||||
@@ -9,31 +9,34 @@ export interface ComponentEvent {
|
||||
*
|
||||
* @see https://discord.com/developers/docs/resources/channel#message-object
|
||||
*/
|
||||
message: MessageInfo
|
||||
message: ComponentEventMessage
|
||||
|
||||
/**
|
||||
* The channel that this event occurred in.
|
||||
*
|
||||
* @see https://discord.com/developers/docs/resources/channel#channel-object
|
||||
*/
|
||||
channel: ChannelInfo
|
||||
channel: ComponentEventChannel
|
||||
|
||||
/**
|
||||
* The user that triggered this event.
|
||||
*
|
||||
* @see https://discord.com/developers/docs/resources/user#user-object
|
||||
*/
|
||||
user: UserInfo
|
||||
user: ComponentEventUser
|
||||
|
||||
/**
|
||||
* The guild that this event occurred in.
|
||||
*
|
||||
* @see https://discord.com/developers/docs/resources/guild#guild-object
|
||||
*/
|
||||
guild?: GuildInfo
|
||||
guild?: ComponentEventGuild
|
||||
|
||||
/** Create a new reply to this event. */
|
||||
reply(content?: ReactNode, options?: ReplyInfo): ReacordInstance
|
||||
reply(
|
||||
content?: ReactNode,
|
||||
options?: ComponentEventReplyOptions,
|
||||
): ReacordInstance
|
||||
|
||||
/**
|
||||
* Create an ephemeral reply to this event, shown only to the user who
|
||||
@@ -45,13 +48,13 @@ export interface ComponentEvent {
|
||||
}
|
||||
|
||||
/** @category Component Event */
|
||||
export interface ReplyInfo {
|
||||
export interface ComponentEventReplyOptions {
|
||||
ephemeral?: boolean
|
||||
tts?: boolean
|
||||
}
|
||||
|
||||
/** @category Component Event */
|
||||
export interface ChannelInfo {
|
||||
export interface ComponentEventChannel {
|
||||
id: string
|
||||
name?: string
|
||||
topic?: string
|
||||
@@ -63,11 +66,11 @@ export interface ChannelInfo {
|
||||
}
|
||||
|
||||
/** @category Component Event */
|
||||
export interface MessageInfo {
|
||||
export interface ComponentEventMessage {
|
||||
id: string
|
||||
channelId: string
|
||||
authorId: string
|
||||
member?: GuildMemberInfo
|
||||
member?: ComponentEventGuildMember
|
||||
content: string
|
||||
timestamp: string
|
||||
editedTimestamp?: string
|
||||
@@ -78,14 +81,14 @@ export interface MessageInfo {
|
||||
}
|
||||
|
||||
/** @category Component Event */
|
||||
export interface GuildInfo {
|
||||
export interface ComponentEventGuild {
|
||||
id: string
|
||||
name: string
|
||||
member: GuildMemberInfo
|
||||
member: ComponentEventGuildMember
|
||||
}
|
||||
|
||||
/** @category Component Event */
|
||||
export interface GuildMemberInfo {
|
||||
export interface ComponentEventGuildMember {
|
||||
id: string
|
||||
nick?: string
|
||||
displayName: string
|
||||
@@ -100,7 +103,7 @@ export interface GuildMemberInfo {
|
||||
}
|
||||
|
||||
/** @category Component Event */
|
||||
export interface UserInfo {
|
||||
export interface ComponentEventUser {
|
||||
id: string
|
||||
username: string
|
||||
discriminator: string
|
||||
|
||||
@@ -14,12 +14,12 @@ import type {
|
||||
import { ChannelMessageRenderer } from "../internal/renderers/channel-message-renderer"
|
||||
import { InteractionReplyRenderer } from "../internal/renderers/interaction-reply-renderer"
|
||||
import type {
|
||||
ChannelInfo,
|
||||
GuildInfo,
|
||||
GuildMemberInfo,
|
||||
MessageInfo,
|
||||
ReplyInfo,
|
||||
UserInfo,
|
||||
ComponentEventChannel,
|
||||
ComponentEventGuild,
|
||||
ComponentEventGuildMember,
|
||||
ComponentEventMessage,
|
||||
ComponentEventReplyOptions,
|
||||
ComponentEventUser,
|
||||
} from "./component-event"
|
||||
import type { ReacordInstance } from "./instance"
|
||||
import type { ReacordConfig } from "./reacord"
|
||||
@@ -194,7 +194,7 @@ export class ReacordDiscordJs extends Reacord {
|
||||
interaction: Discord.MessageComponentInteraction,
|
||||
): ComponentInteraction {
|
||||
// todo please dear god clean this up
|
||||
const channel: ChannelInfo = interaction.channel
|
||||
const channel: ComponentEventChannel = interaction.channel
|
||||
? {
|
||||
...pruneNullishValues(
|
||||
pick(interaction.channel, [
|
||||
@@ -210,7 +210,7 @@ export class ReacordDiscordJs extends Reacord {
|
||||
}
|
||||
: raise("Non-channel interactions are not supported")
|
||||
|
||||
const message: MessageInfo =
|
||||
const message: ComponentEventMessage =
|
||||
interaction.message instanceof Discord.Message
|
||||
? {
|
||||
...pick(interaction.message, [
|
||||
@@ -233,7 +233,7 @@ export class ReacordDiscordJs extends Reacord {
|
||||
}
|
||||
: raise("Message not found")
|
||||
|
||||
const member: GuildMemberInfo | undefined =
|
||||
const member: ComponentEventGuildMember | undefined =
|
||||
interaction.member instanceof Discord.GuildMember
|
||||
? {
|
||||
...pruneNullishValues(
|
||||
@@ -258,14 +258,14 @@ export class ReacordDiscordJs extends Reacord {
|
||||
}
|
||||
: undefined
|
||||
|
||||
const guild: GuildInfo | undefined = interaction.guild
|
||||
const guild: ComponentEventGuild | undefined = interaction.guild
|
||||
? {
|
||||
...pruneNullishValues(pick(interaction.guild, ["id", "name"])),
|
||||
member: member ?? raise("unexpected: member is undefined"),
|
||||
}
|
||||
: undefined
|
||||
|
||||
const user: UserInfo = {
|
||||
const user: ComponentEventUser = {
|
||||
...pruneNullishValues(
|
||||
pick(interaction.user, ["id", "username", "discriminator", "tag"]),
|
||||
),
|
||||
@@ -307,7 +307,7 @@ export class ReacordDiscordJs extends Reacord {
|
||||
user,
|
||||
guild,
|
||||
|
||||
reply: (content?: ReactNode, options?: ReplyInfo) =>
|
||||
reply: (content?: ReactNode, options?: ComponentEventReplyOptions) =>
|
||||
this.createInstance(
|
||||
this.createInteractionReplyRenderer(interaction, options ?? {}),
|
||||
content,
|
||||
|
||||
@@ -8,11 +8,11 @@ import { setTimeout } from "node:timers/promises"
|
||||
import type { ReactNode } from "react"
|
||||
import { expect } from "vitest"
|
||||
import type {
|
||||
ChannelInfo,
|
||||
GuildInfo,
|
||||
MessageInfo,
|
||||
ReplyInfo,
|
||||
UserInfo,
|
||||
ComponentEventChannel,
|
||||
ComponentEventGuild,
|
||||
ComponentEventMessage,
|
||||
ComponentEventReplyOptions,
|
||||
ComponentEventUser,
|
||||
} from "../library/core/component-event"
|
||||
import type { ButtonClickEvent } from "../library/core/components/button"
|
||||
import type { SelectChangeEvent } from "../library/core/components/select"
|
||||
@@ -55,7 +55,9 @@ export class ReacordTester extends Reacord {
|
||||
)
|
||||
}
|
||||
|
||||
public createInteractionReply(_options?: ReplyInfo): ReacordInstance {
|
||||
public createInteractionReply(
|
||||
_options?: ComponentEventReplyOptions,
|
||||
): ReacordInstance {
|
||||
return this.createInstance(
|
||||
new InteractionReplyRenderer(
|
||||
new TestCommandInteraction(this.messageContainer),
|
||||
@@ -249,10 +251,10 @@ class TestSelectInteraction
|
||||
class TestComponentEvent {
|
||||
constructor(private tester: ReacordTester) {}
|
||||
|
||||
message: MessageInfo = {} as MessageInfo // todo
|
||||
channel: ChannelInfo = {} as ChannelInfo // todo
|
||||
user: UserInfo = {} as UserInfo // todo
|
||||
guild: GuildInfo = {} as GuildInfo // todo
|
||||
message: ComponentEventMessage = {} as ComponentEventMessage // todo
|
||||
channel: ComponentEventChannel = {} as ComponentEventChannel // todo
|
||||
user: ComponentEventUser = {} as ComponentEventUser // todo
|
||||
guild: ComponentEventGuild = {} as ComponentEventGuild // todo
|
||||
|
||||
reply(content?: ReactNode): ReacordInstance {
|
||||
return this.tester.createInteractionReply().render(content)
|
||||
|
||||
Reference in New Issue
Block a user