diff --git a/packages/core/src/features/session/SessionManager.ts b/packages/core/src/features/session/SessionManager.ts index 0fbfcd4c..63696fba 100644 --- a/packages/core/src/features/session/SessionManager.ts +++ b/packages/core/src/features/session/SessionManager.ts @@ -68,6 +68,11 @@ export interface SessionManager extends BotAware, BotLifecycleObserver { meta?: SessionExecutionMeta, ): Awaitable; + /** Resolves an {@link Session} given a {@link SessionUpdateInteraction}. */ + resolve( + interaction: SessionUpdateInteraction, + ): Awaitable | null>; + /** Returns the event subscriber for {@link SessionUpdateInteraction}. */ getUpdateSubscriber(): EventSubscriber< ClientEvents, diff --git a/packages/framework/src/features/session/DefaultSessionManager.ts b/packages/framework/src/features/session/DefaultSessionManager.ts index cd6b433e..24019d4c 100644 --- a/packages/framework/src/features/session/DefaultSessionManager.ts +++ b/packages/framework/src/features/session/DefaultSessionManager.ts @@ -277,6 +277,17 @@ export class DefaultSessionManager implements SessionManager { return this; } + public resolve( + interaction: SessionUpdateInteraction, + ): Promise | null> { + const { customId } = interaction; + const sessionCustomId = this.codec.deserializeToObjectId(customId); + + if (!sessionCustomId) return Promise.resolve(null); + + return this.repository.get(sessionCustomId); + } + public async setUpdateSubscriber( subscriber: EventSubscriber, ): Promise {