Contexts
Описание принципов работы с контекстами
Описание типов
Инициализация
Концепция
Представляет из себя базовый класс для работы с контекстами. Контексты проходят через middleware, позволяя себя модифицировать.
У каждого контекста есть описание типов вызываемых событий
- type — основной тип контекста (например
message
) - subTypes — подтипы контекста (например
[message_new, chat_kick_user]
)
Для удобного определения контекста, есть метод context.is(), позволяет искать сразу по типу и подтипу. Производит поиск пока не найдёт одно подходящее значение.
ts
// Context { type: 'message', subTypes: [...] }
context.is(['message']); // => true
// Context { type: 'message', subTypes: ['chat_invite_user_by_link'] }
context.is(['chat_invite_user', 'chat_invite_user_by_link']); // => true
В каждом контексте, так же есть стандартное пространство для хранения простых состояний, в свойстве state
ts
updates.on('message_new', async (context, next) => {
context.state.user = await fetchUser(context.senderId);
// При этом ничего вам не мешает расширить сам контекст
// context.user = await fetchUser(context.senderId);
return next();
});
Список контекстов:
- VoteContext
- LikeContext
- TypingContext
- CommentContext
- MessageContext
- WallPostContext
- GroupUserContext
- DialogFlagsContext
- MarketOrderContext
- GroupUpdateContext
- GroupMemberContext
- MessageEventContext
- MessagesReadContext
- MessageFlagsContext
- VKAppPayloadContext
- DonutWithdrawContext
- NewAttachmentsContext
- FriendActivityContext
- DialogMessagesContext
- VKPayTransactionContext
- DonutSubscriptionContext
- MessageSubscriptionContext
- DonutSubscriptionPriceContext
- DialogNotificationSettingsContext
Внимание
Контексты могут содержать неполные данные, если например вы получаете их с User Long Poll.
Сериализация контекста
ts
JSON.stringify(context); // => object