From 11153dfe0faba17e4bd059706359c4fd7bf37083 Mon Sep 17 00:00:00 2001 From: itsMapleLeaf <19603573+itsMapleLeaf@users.noreply.github.com> Date: Sat, 28 Oct 2023 14:39:16 -0500 Subject: [PATCH] breaking: more descriptive component event types --- .changeset/five-wolves-destroy.md | 5 ++++ .../reacord/library/core/component-event.ts | 29 ++++++++++--------- .../library/core/reacord-discord-js.ts | 24 +++++++-------- packages/reacord/test/test-adapter.ts | 22 +++++++------- 4 files changed, 45 insertions(+), 35 deletions(-) create mode 100644 .changeset/five-wolves-destroy.md diff --git a/.changeset/five-wolves-destroy.md b/.changeset/five-wolves-destroy.md new file mode 100644 index 0000000..4490d47 --- /dev/null +++ b/.changeset/five-wolves-destroy.md @@ -0,0 +1,5 @@ +--- +"reacord": minor +--- + +breaking: more descriptive component event types diff --git a/packages/reacord/library/core/component-event.ts b/packages/reacord/library/core/component-event.ts index 396b3d5..f85fd31 100644 --- a/packages/reacord/library/core/component-event.ts +++ b/packages/reacord/library/core/component-event.ts @@ -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 diff --git a/packages/reacord/library/core/reacord-discord-js.ts b/packages/reacord/library/core/reacord-discord-js.ts index 7c846f6..8a8cdff 100644 --- a/packages/reacord/library/core/reacord-discord-js.ts +++ b/packages/reacord/library/core/reacord-discord-js.ts @@ -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, diff --git a/packages/reacord/test/test-adapter.ts b/packages/reacord/test/test-adapter.ts index 78ffaf7..e361162 100644 --- a/packages/reacord/test/test-adapter.ts +++ b/packages/reacord/test/test-adapter.ts @@ -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)