feat(bot): Add guildId to ThreadMember (#4335)

This commit is contained in:
Fleny
2025-08-14 19:21:22 -07:00
committed by GitHub
parent af2b0cca2e
commit 9de5d93014
5 changed files with 35 additions and 15 deletions
@@ -9,7 +9,7 @@ export async function handleThreadMembersUpdate(bot: Bot, data: DiscordGatewayPa
bot.events.threadMembersUpdate({
id: bot.transformers.snowflake(payload.id),
guildId: bot.transformers.snowflake(payload.guild_id),
addedMembers: payload.added_members?.map((member) => bot.transformers.threadMember?.(bot, member)),
addedMembers: payload.added_members?.map((member) => bot.transformers.threadMember?.(bot, member, { guildId: payload.guild_id })),
removedMemberIds: payload.removed_member_ids?.map((id) => bot.transformers.snowflake(id)),
})
}
+8 -7
View File
@@ -138,6 +138,7 @@ import type {
Subscription,
Template,
ThreadMember,
ThreadMemberTransformerExtra,
User,
VoiceState,
Webhook,
@@ -281,7 +282,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
const result = await bot.rest.getActiveThreads(guildId)
return {
threads: result.threads.map((thread) => bot.transformers.channel(bot, { guildId, channel: snakelize(thread) })),
members: result.members.map((member) => bot.transformers.threadMember(bot, snakelize(member))),
members: result.members.map((member) => bot.transformers.threadMember(bot, snakelize(member), { guildId })),
}
},
getApplicationInfo: async () => {
@@ -493,11 +494,11 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
getSticker: async (stickerId) => {
return bot.transformers.sticker(bot, snakelize(await bot.rest.getSticker(stickerId)))
},
getThreadMember: async (channelId, userId, options) => {
return bot.transformers.threadMember(bot, snakelize(await bot.rest.getThreadMember(channelId, userId, options)))
getThreadMember: async (channelId, userId, options, extra) => {
return bot.transformers.threadMember(bot, snakelize(await bot.rest.getThreadMember(channelId, userId, options)), extra)
},
getThreadMembers: async (channelId, options) => {
return (await bot.rest.getThreadMembers(channelId, options)).map((res) => bot.transformers.threadMember(bot, snakelize(res)))
getThreadMembers: async (channelId, options, extra) => {
return (await bot.rest.getThreadMembers(channelId, options)).map((res) => bot.transformers.threadMember(bot, snakelize(res), extra))
},
getReactions: async (channelId, messageId, reaction, options) => {
return (await bot.rest.getReactions(channelId, messageId, reaction, options)).map((res) => bot.transformers.user(bot, snakelize(res)))
@@ -1028,8 +1029,8 @@ export type BotHelpers<TProps extends TransformersDesiredProperties, TBehavior e
getOwnVoiceState: (guildId: BigString) => Promise<SetupDesiredProps<VoiceState, TProps, TBehavior>>
getUserVoiceState: (guildId: BigString, userId: BigString) => Promise<SetupDesiredProps<VoiceState, TProps, TBehavior>>
getSticker: (stickerId: BigString) => Promise<SetupDesiredProps<Sticker, TProps, TBehavior>>
getThreadMember: (channelId: BigString, userId: BigString, options?: GetThreadMember) => Promise<ThreadMember>
getThreadMembers: (channelId: BigString, options?: ListThreadMembers) => Promise<ThreadMember[]>
getThreadMember: (channelId: BigString, userId: BigString, options?: GetThreadMember, extra?: ThreadMemberTransformerExtra) => Promise<ThreadMember>
getThreadMembers: (channelId: BigString, options?: ListThreadMembers, extra?: ThreadMemberTransformerExtra) => Promise<ThreadMember[]>
getReactions: (
channelId: BigString,
messageId: BigString,
+3 -2
View File
@@ -155,6 +155,7 @@ import {
type Template,
type ThreadMember,
type ThreadMemberGuildCreate,
type ThreadMemberTransformerExtra,
transformActivity,
transformActivityInstance,
transformActivityLocation,
@@ -415,7 +416,7 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
subscription: (bot: Bot<TProps, TBehavior>, payload: DiscordSubscription, subscription: SetupDesiredProps<Subscription, TProps, TBehavior>) => any
team: (bot: Bot<TProps, TBehavior>, payload: DiscordTeam, team: Team) => any
template: (bot: Bot<TProps, TBehavior>, payload: DiscordTemplate, template: Template) => any
threadMember: (bot: Bot<TProps, TBehavior>, payload: DiscordThreadMember, threadMember: ThreadMember) => any
threadMember: (bot: Bot<TProps, TBehavior>, payload: DiscordThreadMember, threadMember: ThreadMember, extra?: ThreadMemberTransformerExtra) => any
threadMemberGuildCreate: (
bot: Bot<TProps, TBehavior>,
payload: DiscordThreadMemberGuildCreate,
@@ -560,7 +561,7 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
subscription: (bot: Bot<TProps, TBehavior>, payload: DiscordSubscription) => SetupDesiredProps<Subscription, TProps, TBehavior>
team: (bot: Bot<TProps, TBehavior>, payload: DiscordTeam) => Team
template: (bot: Bot<TProps, TBehavior>, payload: DiscordTemplate) => Template
threadMember: (bot: Bot<TProps, TBehavior>, payload: DiscordThreadMember) => ThreadMember
threadMember: (bot: Bot<TProps, TBehavior>, payload: DiscordThreadMember, extra?: ThreadMemberTransformerExtra) => ThreadMember
threadMemberGuildCreate: (bot: Bot<TProps, TBehavior>, payload: DiscordThreadMemberGuildCreate) => ThreadMemberGuildCreate
unfurledMediaItem: (bot: Bot<TProps, TBehavior>, payload: DiscordUnfurledMediaItem) => UnfurledMediaItem
user: (bot: Bot<TProps, TBehavior>, payload: DiscordUser) => SetupDesiredProps<User, TProps, TBehavior>
+2 -1
View File
@@ -117,7 +117,8 @@ export function transformChannel(bot: Bot, payload: { channel: DiscordChannel; g
if (props.recipients && payload.channel.recipients) channel.recipients = payload.channel.recipients.map((u) => bot.transformers.user(bot, u))
if (props.icon && payload.channel.icon) channel.icon = iconHashToBigInt(payload.channel.icon)
if (props.applicationId && payload.channel.application_id) channel.applicationId = bot.transformers.snowflake(payload.channel.application_id)
if (props.member && payload.channel.member) channel.member = bot.transformers.threadMember(bot, payload.channel.member)
if (props.member && payload.channel.member)
channel.member = bot.transformers.threadMember(bot, payload.channel.member, { guildId: payload.guildId })
if (props.totalMessageSent && payload.channel.total_message_sent !== undefined) channel.totalMessageSent = payload.channel.total_message_sent
if (props.availableTags && payload.channel.available_tags)
channel.availableTags = payload.channel.available_tags.map((x) => bot.transformers.forumTag(bot, x))
+21 -4
View File
@@ -1,16 +1,33 @@
import type { DiscordThreadMember, DiscordThreadMemberGuildCreate } from '@discordeno/types'
import type { BigString, DiscordThreadMember, DiscordThreadMemberGuildCreate } from '@discordeno/types'
import type { Bot, ThreadMember, ThreadMemberGuildCreate } from '../index.js'
export function transformThreadMember(bot: Bot, payload: DiscordThreadMember): ThreadMember {
export function transformThreadMember(bot: Bot, payload: DiscordThreadMember, extra?: ThreadMemberTransformerExtra): ThreadMember {
const threadMember = {
id: payload.id ? bot.transformers.snowflake(payload.id) : undefined,
userId: payload.user_id ? bot.transformers.snowflake(payload.user_id) : undefined,
joinTimestamp: Date.parse(payload.join_timestamp),
flags: payload.flags,
member: payload.member ? bot.transformers.member(bot, payload.member, undefined, bot.transformers.snowflake(payload.user_id)) : undefined,
member: payload.member
? bot.transformers.member(
bot,
payload.member,
extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
bot.transformers.snowflake(payload.user_id),
)
: undefined,
} as ThreadMember
return bot.transformers.customizers.threadMember(bot, payload, threadMember)
return bot.transformers.customizers.threadMember(bot, payload, threadMember, extra)
}
export interface ThreadMemberTransformerExtra {
/**
* Provide this parameter if you want it to be passed down to the `threadMember.member` object (when `withMembers` is set to `true`),
* since Discord does not include a `guildId` in that payload.
*
* This allows you to cache member objects in the member customizer.
*/
guildId?: BigString
}
export function transformThreadMemberGuildCreate(bot: Bot, payload: DiscordThreadMemberGuildCreate): ThreadMemberGuildCreate {