fix(types)!: Fix nullability for DiscordEmoji (#4285)

* Fix nullability for DiscordEmoji

* Fix type errors, use actual DiscordEmoji for partial emojis

* Apply code review suggestions
This commit is contained in:
Fleny
2025-08-11 18:41:50 +02:00
committed by GitHub
parent 3e6bf86db0
commit d713d09064
10 changed files with 23 additions and 26 deletions
@@ -399,6 +399,7 @@ function oldtransformMessage(bot: Bot, payload: DiscordMessage): any {
reactions: payload.reactions?.map((reaction) => ({
me: reaction.me,
count: reaction.count,
// @ts-expect-error: TODO: Deal with partials
emoji: bot.transformers.emoji(bot, reaction.emoji),
})),
type: payload.type,
@@ -15,6 +15,7 @@ export async function handleMessageReactionAdd(bot: Bot, data: DiscordGatewayPay
guildId,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, userId) : undefined,
user: payload.member ? bot.transformers.user(bot, payload.member.user) : undefined,
// @ts-expect-error TODO: Deal with partials
emoji: bot.transformers.emoji(bot, payload.emoji),
messageAuthorId: payload.message_author_id ? bot.transformers.snowflake(payload.message_author_id) : undefined,
burst: payload.burst,
@@ -11,6 +11,7 @@ export async function handleMessageReactionRemove(bot: Bot, data: DiscordGateway
channelId: bot.transformers.snowflake(payload.channel_id),
messageId: bot.transformers.snowflake(payload.message_id),
guildId: payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined,
// @ts-expect-error TODO: Deal with partials
emoji: bot.transformers.emoji(bot, payload.emoji),
burst: payload.burst,
})
@@ -10,6 +10,7 @@ export async function handleMessageReactionRemoveEmoji(bot: Bot, data: DiscordGa
channelId: bot.transformers.snowflake(payload.channel_id),
messageId: bot.transformers.snowflake(payload.message_id),
guildId: payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined,
// @ts-expect-error TODO: Deal with partials
emoji: bot.transformers.emoji(bot, payload.emoji),
})
}
+1 -1
View File
@@ -177,7 +177,7 @@ function transformSelectMenuComponent(bot: Bot, payload: DiscordSelectMenuCompon
emoji: option.emoji
? {
id: option.emoji.id ? bot.transformers.snowflake(option.emoji.id) : undefined,
name: option.emoji.name,
name: option.emoji.name ?? undefined,
animated: option.emoji.animated,
}
: undefined,
+1
View File
@@ -244,6 +244,7 @@ export function transformMessage(
burst: reaction.count_details.burst,
normal: reaction.count_details.normal,
},
// @ts-expect-error TODO: Deal with partials
emoji: bot.transformers.emoji(bot, reaction.emoji),
burstColors: reaction.burst_colors,
}))
@@ -99,8 +99,8 @@ function transformButtonComponent(bot: Bot, payload: Component): DiscordButtonCo
disabled: payload.disabled,
emoji: payload.emoji
? {
id: payload.emoji.id ? bot.transformers.reverse.snowflake(payload.emoji.id) : undefined,
name: payload.emoji.name,
id: payload.emoji.id ? bot.transformers.reverse.snowflake(payload.emoji.id) : null,
name: payload.emoji.name ?? null,
animated: payload.emoji.animated,
}
: undefined,
@@ -145,8 +145,8 @@ function transformSelectMenuComponent(bot: Bot, payload: Component): DiscordSele
description: option.description,
emoji: option.emoji
? {
id: option.emoji.id ? bot.transformers.reverse.snowflake(option.emoji.id) : undefined,
name: option.emoji.name,
id: option.emoji.id ? bot.transformers.reverse.snowflake(option.emoji.id) : null,
name: option.emoji.name ?? null,
animated: option.emoji.animated,
}
: undefined,
@@ -3,8 +3,8 @@ import type { Emoji, InternalBot } from '../../index.js'
export function transformEmojiToDiscordEmoji(bot: InternalBot, payload: Emoji): DiscordEmoji {
return {
id: payload.id ? bot.transformers.reverse.snowflake(payload.id) : undefined,
name: payload.name ?? undefined,
id: payload.id ? bot.transformers.reverse.snowflake(payload.id) : null,
name: payload.name ?? null,
roles: payload.roles?.map((id) => bot.transformers.reverse.snowflake(id)),
user: payload.user ? bot.transformers.reverse.user(bot, payload.user) : undefined,
require_colons: payload.toggles.requireColons,
+3 -16
View File
@@ -1,6 +1,7 @@
/** Types for: https://discord.com/developers/docs/components/reference */
import type { ChannelTypes } from './channel.js'
import type { DiscordEmoji } from './emoji.js'
/** https://discord.com/developers/docs/components/reference#component-object-component-types */
export enum MessageComponentTypes {
@@ -91,14 +92,7 @@ export interface DiscordButtonComponent extends DiscordBaseComponent {
* @remarks
* A button of style {@link ButtonStyles.Premium | Premium} cannot have an emoji
*/
emoji?: {
/** Emoji id */
id?: string
/** Emoji name */
name?: string
/** Whether this emoji is animated */
animated?: boolean
}
emoji?: Pick<DiscordEmoji, 'id' | 'name' | 'animated'>
/**
* A dev-defined unique string sent on click (max 100 characters).
*
@@ -193,14 +187,7 @@ export interface DiscordSelectOption {
/** An additional description of the option. Maximum 50 characters. */
description?: string
/** The id, name, and animated properties of an emoji. */
emoji?: {
/** Emoji id */
id?: string
/** Emoji name */
name?: string
/** Whether this emoji is animated */
animated?: boolean
}
emoji?: Pick<DiscordEmoji, 'id' | 'name' | 'animated'>
/** Will render this option as already-selected by default. */
default?: boolean
}
+8 -3
View File
@@ -4,10 +4,15 @@ import type { DiscordUser } from './user.js'
/** https://discord.com/developers/docs/resources/emoji#emoji-object-emoji-structure */
export interface DiscordEmoji {
/** Emoji name (can only be null in reaction emoji objects) */
name?: string
/** Emoji id */
id?: string
id: string | null
/**
* Emoji name
*
* @remarks
* Can be null only in reaction emoji objects
*/
name: string | null
/** Roles allowed to use this emoji */
roles?: string[]
/** User that created this emoji */