fix(dispatcher): provide state type information to filters
This commit is contained in:
parent
5e7706a5a3
commit
481f0db129
2 changed files with 82 additions and 11 deletions
|
@ -230,7 +230,22 @@ function generateDispatcher() {
|
||||||
* @param group Handler group index
|
* @param group Handler group index
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
on${type.handlerTypeName}(handler: ${type.handlerTypeName}Handler${type.state ? `<${type.updateType}, State extends never ? never : MessageState<State, SceneName>>` : ''}['callback'], group?: number): void
|
on${type.handlerTypeName}(handler: ${type.handlerTypeName}Handler${type.state ? `<${type.updateType}, State extends never ? never : UpdateState<State, SceneName>>` : ''}['callback'], group?: number): void
|
||||||
|
|
||||||
|
${type.state ? `
|
||||||
|
/**
|
||||||
|
* Register ${toSentence(type)} with a filter
|
||||||
|
*
|
||||||
|
* @param filter Update filter
|
||||||
|
* @param handler ${toSentence(type, 'full')}
|
||||||
|
* @param group Handler group index
|
||||||
|
*/
|
||||||
|
on${type.handlerTypeName}<Mod>(
|
||||||
|
filter: UpdateFilter<${type.updateType}, Mod, State>,
|
||||||
|
handler: ${type.handlerTypeName}Handler<filters.Modify<${type.updateType}, Mod>, State extends never ? never : UpdateState<State, SceneName>>['callback'],
|
||||||
|
group?: number
|
||||||
|
): void
|
||||||
|
` : ''}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register ${toSentence(type)} with a filter
|
* Register ${toSentence(type)} with a filter
|
||||||
|
@ -241,7 +256,7 @@ function generateDispatcher() {
|
||||||
*/
|
*/
|
||||||
on${type.handlerTypeName}<Mod>(
|
on${type.handlerTypeName}<Mod>(
|
||||||
filter: UpdateFilter<${type.updateType}, Mod>,
|
filter: UpdateFilter<${type.updateType}, Mod>,
|
||||||
handler: ${type.handlerTypeName}Handler<filters.Modify<${type.updateType}, Mod>${type.state ? ', State extends never ? never : MessageState<State, SceneName>' : ''}>['callback'],
|
handler: ${type.handlerTypeName}Handler<filters.Modify<${type.updateType}, Mod>${type.state ? ', State extends never ? never : UpdateState<State, SceneName>' : ''}>['callback'],
|
||||||
group?: number
|
group?: number
|
||||||
): void
|
): void
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@ import {
|
||||||
PollVoteHandler,
|
PollVoteHandler,
|
||||||
UserStatusUpdateHandler,
|
UserStatusUpdateHandler,
|
||||||
UserTypingHandler,
|
UserTypingHandler,
|
||||||
UpdateInfoForError,
|
|
||||||
} from './handler'
|
} from './handler'
|
||||||
// end-codegen-imports
|
// end-codegen-imports
|
||||||
|
import { UpdateInfoForError } from './handler'
|
||||||
import { filters, UpdateFilter } from './filters'
|
import { filters, UpdateFilter } from './filters'
|
||||||
import { handlers } from './builders'
|
import { handlers } from './builders'
|
||||||
import { ChatMemberUpdate } from './updates'
|
import { ChatMemberUpdate } from './updates'
|
||||||
|
@ -461,14 +461,20 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
||||||
return
|
return
|
||||||
case 'scene': {
|
case 'scene': {
|
||||||
if (!parsedState)
|
if (!parsedState)
|
||||||
throw new MtCuteArgumentError('Cannot use ToScene without state')
|
throw new MtCuteArgumentError(
|
||||||
|
'Cannot use ToScene without state'
|
||||||
|
)
|
||||||
|
|
||||||
const scene = parsedState['_scene']
|
const scene = parsedState['_scene']
|
||||||
|
|
||||||
if (!scene)
|
if (!scene)
|
||||||
throw new MtCuteArgumentError('Cannot use ToScene without entering a scene')
|
throw new MtCuteArgumentError(
|
||||||
|
'Cannot use ToScene without entering a scene'
|
||||||
|
)
|
||||||
|
|
||||||
return this._scenes[scene]._dispatchUpdateNowImpl(
|
return this._scenes[
|
||||||
|
scene
|
||||||
|
]._dispatchUpdateNowImpl(
|
||||||
update,
|
update,
|
||||||
users,
|
users,
|
||||||
chats,
|
chats,
|
||||||
|
@ -978,9 +984,13 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
||||||
* This will load the state for the given object
|
* This will load the state for the given object
|
||||||
* ignoring local custom storage, key delegate and scene scope.
|
* ignoring local custom storage, key delegate and scene scope.
|
||||||
*/
|
*/
|
||||||
getGlobalState<T>(object: Parameters<StateKeyDelegate>[0]): Promise<UpdateState<T, SceneName>> {
|
getGlobalState<T>(
|
||||||
|
object: Parameters<StateKeyDelegate>[0]
|
||||||
|
): Promise<UpdateState<T, SceneName>> {
|
||||||
if (!this._parent) {
|
if (!this._parent) {
|
||||||
throw new MtCuteArgumentError('This dispatcher does not have a parent')
|
throw new MtCuteArgumentError(
|
||||||
|
'This dispatcher does not have a parent'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {
|
return Promise.resolve(this._stateKeyDelegate!(object)).then((key) => {
|
||||||
|
@ -1071,9 +1081,23 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
||||||
filter: UpdateFilter<Message, Mod, State>,
|
filter: UpdateFilter<Message, Mod, State>,
|
||||||
handler: NewMessageHandler<
|
handler: NewMessageHandler<
|
||||||
filters.Modify<Message, Mod>,
|
filters.Modify<Message, Mod>,
|
||||||
State extends never
|
State extends never ? never : UpdateState<State, SceneName>
|
||||||
? never
|
>['callback'],
|
||||||
: UpdateState<State, SceneName>
|
group?: number
|
||||||
|
): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a new message handler with a filter
|
||||||
|
*
|
||||||
|
* @param filter Update filter
|
||||||
|
* @param handler New message handler
|
||||||
|
* @param group Handler group index
|
||||||
|
*/
|
||||||
|
onNewMessage<Mod>(
|
||||||
|
filter: UpdateFilter<Message, Mod>,
|
||||||
|
handler: NewMessageHandler<
|
||||||
|
filters.Modify<Message, Mod>,
|
||||||
|
State extends never ? never : UpdateState<State, SceneName>
|
||||||
>['callback'],
|
>['callback'],
|
||||||
group?: number
|
group?: number
|
||||||
): void
|
): void
|
||||||
|
@ -1098,6 +1122,22 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
||||||
group?: number
|
group?: number
|
||||||
): void
|
): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register an edit message handler with a filter
|
||||||
|
*
|
||||||
|
* @param filter Update filter
|
||||||
|
* @param handler Edit message handler
|
||||||
|
* @param group Handler group index
|
||||||
|
*/
|
||||||
|
onEditMessage<Mod>(
|
||||||
|
filter: UpdateFilter<Message, Mod, State>,
|
||||||
|
handler: EditMessageHandler<
|
||||||
|
filters.Modify<Message, Mod>,
|
||||||
|
State extends never ? never : UpdateState<State, SceneName>
|
||||||
|
>['callback'],
|
||||||
|
group?: number
|
||||||
|
): void
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register an edit message handler with a filter
|
* Register an edit message handler with a filter
|
||||||
*
|
*
|
||||||
|
@ -1259,6 +1299,22 @@ export class Dispatcher<State = never, SceneName extends string = string> {
|
||||||
group?: number
|
group?: number
|
||||||
): void
|
): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a callback query handler with a filter
|
||||||
|
*
|
||||||
|
* @param filter Update filter
|
||||||
|
* @param handler Callback query handler
|
||||||
|
* @param group Handler group index
|
||||||
|
*/
|
||||||
|
onCallbackQuery<Mod>(
|
||||||
|
filter: UpdateFilter<CallbackQuery, Mod, State>,
|
||||||
|
handler: CallbackQueryHandler<
|
||||||
|
filters.Modify<CallbackQuery, Mod>,
|
||||||
|
State extends never ? never : UpdateState<State, SceneName>
|
||||||
|
>['callback'],
|
||||||
|
group?: number
|
||||||
|
): void
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a callback query handler with a filter
|
* Register a callback query handler with a filter
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue