@dementevdev/maxbot-ts 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/LICENSE +21 -0
- package/README.md +1176 -0
- package/dist/cjs/api/BotsApi.d.ts +17 -0
- package/dist/cjs/api/BotsApi.d.ts.map +1 -0
- package/dist/cjs/api/BotsApi.js +22 -0
- package/dist/cjs/api/ChatsApi.d.ts +87 -0
- package/dist/cjs/api/ChatsApi.d.ts.map +1 -0
- package/dist/cjs/api/ChatsApi.js +144 -0
- package/dist/cjs/api/MessagesApi.d.ts +41 -0
- package/dist/cjs/api/MessagesApi.d.ts.map +1 -0
- package/dist/cjs/api/MessagesApi.js +66 -0
- package/dist/cjs/api/SubscriptionsApi.d.ts +45 -0
- package/dist/cjs/api/SubscriptionsApi.d.ts.map +1 -0
- package/dist/cjs/api/SubscriptionsApi.js +69 -0
- package/dist/cjs/api/UploadsApi.d.ts +45 -0
- package/dist/cjs/api/UploadsApi.d.ts.map +1 -0
- package/dist/cjs/api/UploadsApi.js +113 -0
- package/dist/cjs/api/index.d.ts +7 -0
- package/dist/cjs/api/index.d.ts.map +1 -0
- package/dist/cjs/api/index.js +14 -0
- package/dist/cjs/api/interfaces.d.ts +108 -0
- package/dist/cjs/api/interfaces.d.ts.map +1 -0
- package/dist/cjs/api/interfaces.js +3 -0
- package/dist/cjs/bot/Bot.d.ts +380 -0
- package/dist/cjs/bot/Bot.d.ts.map +1 -0
- package/dist/cjs/bot/Bot.js +624 -0
- package/dist/cjs/bot/Composer.d.ts +131 -0
- package/dist/cjs/bot/Composer.d.ts.map +1 -0
- package/dist/cjs/bot/Composer.js +218 -0
- package/dist/cjs/bot/context/BotStartedContext.d.ts +83 -0
- package/dist/cjs/bot/context/BotStartedContext.d.ts.map +1 -0
- package/dist/cjs/bot/context/BotStartedContext.js +113 -0
- package/dist/cjs/bot/context/CallbackContext.d.ts +107 -0
- package/dist/cjs/bot/context/CallbackContext.d.ts.map +1 -0
- package/dist/cjs/bot/context/CallbackContext.js +158 -0
- package/dist/cjs/bot/context/ChatContext.d.ts +35 -0
- package/dist/cjs/bot/context/ChatContext.d.ts.map +1 -0
- package/dist/cjs/bot/context/ChatContext.js +52 -0
- package/dist/cjs/bot/context/MessageContext.d.ts +149 -0
- package/dist/cjs/bot/context/MessageContext.d.ts.map +1 -0
- package/dist/cjs/bot/context/MessageContext.js +228 -0
- package/dist/cjs/bot/context/guards.d.ts +69 -0
- package/dist/cjs/bot/context/guards.d.ts.map +1 -0
- package/dist/cjs/bot/context/guards.js +85 -0
- package/dist/cjs/bot/context/index.d.ts +6 -0
- package/dist/cjs/bot/context/index.d.ts.map +1 -0
- package/dist/cjs/bot/context/index.js +18 -0
- package/dist/cjs/bot/dispatch.d.ts +51 -0
- package/dist/cjs/bot/dispatch.d.ts.map +1 -0
- package/dist/cjs/bot/dispatch.js +201 -0
- package/dist/cjs/bot/index.d.ts +10 -0
- package/dist/cjs/bot/index.d.ts.map +1 -0
- package/dist/cjs/bot/index.js +24 -0
- package/dist/cjs/bot/lifecycle.d.ts +85 -0
- package/dist/cjs/bot/lifecycle.d.ts.map +1 -0
- package/dist/cjs/bot/lifecycle.js +167 -0
- package/dist/cjs/bot/metrics.d.ts +18 -0
- package/dist/cjs/bot/metrics.d.ts.map +1 -0
- package/dist/cjs/bot/metrics.js +3 -0
- package/dist/cjs/bot/routing.d.ts +131 -0
- package/dist/cjs/bot/routing.d.ts.map +1 -0
- package/dist/cjs/bot/routing.js +198 -0
- package/dist/cjs/bot/triggers.d.ts +61 -0
- package/dist/cjs/bot/triggers.d.ts.map +1 -0
- package/dist/cjs/bot/triggers.js +84 -0
- package/dist/cjs/core/errors/MaxError.d.ts +11 -0
- package/dist/cjs/core/errors/MaxError.d.ts.map +1 -0
- package/dist/cjs/core/errors/MaxError.js +19 -0
- package/dist/cjs/core/errors/errors.d.ts +59 -0
- package/dist/cjs/core/errors/errors.d.ts.map +1 -0
- package/dist/cjs/core/errors/errors.js +84 -0
- package/dist/cjs/core/errors/index.d.ts +3 -0
- package/dist/cjs/core/errors/index.d.ts.map +1 -0
- package/dist/cjs/core/errors/index.js +13 -0
- package/dist/cjs/core/http/HttpClient.d.ts +28 -0
- package/dist/cjs/core/http/HttpClient.d.ts.map +1 -0
- package/dist/cjs/core/http/HttpClient.js +148 -0
- package/dist/cjs/core/http/index.d.ts +3 -0
- package/dist/cjs/core/http/index.d.ts.map +1 -0
- package/dist/cjs/core/http/index.js +6 -0
- package/dist/cjs/core/http/interfaces.d.ts +42 -0
- package/dist/cjs/core/http/interfaces.d.ts.map +1 -0
- package/dist/cjs/core/http/interfaces.js +3 -0
- package/dist/cjs/core/rate-limiter/RateLimiter.d.ts +46 -0
- package/dist/cjs/core/rate-limiter/RateLimiter.d.ts.map +1 -0
- package/dist/cjs/core/rate-limiter/RateLimiter.js +110 -0
- package/dist/cjs/core/rate-limiter/index.d.ts +3 -0
- package/dist/cjs/core/rate-limiter/index.d.ts.map +1 -0
- package/dist/cjs/core/rate-limiter/index.js +6 -0
- package/dist/cjs/filters/index.d.ts +2 -0
- package/dist/cjs/filters/index.d.ts.map +1 -0
- package/dist/cjs/filters/index.js +10 -0
- package/dist/cjs/filters/predicates.d.ts +85 -0
- package/dist/cjs/filters/predicates.d.ts.map +1 -0
- package/dist/cjs/filters/predicates.js +111 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/middleware/compose.d.ts +28 -0
- package/dist/cjs/middleware/compose.d.ts.map +1 -0
- package/dist/cjs/middleware/compose.js +89 -0
- package/dist/cjs/middleware/index.d.ts +3 -0
- package/dist/cjs/middleware/index.d.ts.map +1 -0
- package/dist/cjs/middleware/index.js +7 -0
- package/dist/cjs/middleware/types.d.ts +17 -0
- package/dist/cjs/middleware/types.d.ts.map +1 -0
- package/dist/cjs/middleware/types.js +3 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/transport/LongPollingTransport.d.ts +33 -0
- package/dist/cjs/transport/LongPollingTransport.d.ts.map +1 -0
- package/dist/cjs/transport/LongPollingTransport.js +153 -0
- package/dist/cjs/transport/WebhookTransport.d.ts +40 -0
- package/dist/cjs/transport/WebhookTransport.d.ts.map +1 -0
- package/dist/cjs/transport/WebhookTransport.js +229 -0
- package/dist/cjs/transport/index.d.ts +4 -0
- package/dist/cjs/transport/index.d.ts.map +1 -0
- package/dist/cjs/transport/index.js +8 -0
- package/dist/cjs/transport/interfaces.d.ts +74 -0
- package/dist/cjs/transport/interfaces.d.ts.map +1 -0
- package/dist/cjs/transport/interfaces.js +3 -0
- package/dist/cjs/types/bot.d.ts +19 -0
- package/dist/cjs/types/bot.d.ts.map +1 -0
- package/dist/cjs/types/bot.js +3 -0
- package/dist/cjs/types/chat.d.ts +94 -0
- package/dist/cjs/types/chat.d.ts.map +1 -0
- package/dist/cjs/types/chat.js +3 -0
- package/dist/cjs/types/common.d.ts +38 -0
- package/dist/cjs/types/common.d.ts.map +1 -0
- package/dist/cjs/types/common.js +6 -0
- package/dist/cjs/types/index.d.ts +9 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +26 -0
- package/dist/cjs/types/keyboard.d.ts +97 -0
- package/dist/cjs/types/keyboard.d.ts.map +1 -0
- package/dist/cjs/types/keyboard.js +3 -0
- package/dist/cjs/types/message.d.ts +162 -0
- package/dist/cjs/types/message.d.ts.map +1 -0
- package/dist/cjs/types/message.js +3 -0
- package/dist/cjs/types/subscription.d.ts +23 -0
- package/dist/cjs/types/subscription.d.ts.map +1 -0
- package/dist/cjs/types/subscription.js +3 -0
- package/dist/cjs/types/update.d.ts +99 -0
- package/dist/cjs/types/update.d.ts.map +1 -0
- package/dist/cjs/types/update.js +3 -0
- package/dist/cjs/types/upload.d.ts +29 -0
- package/dist/cjs/types/upload.d.ts.map +1 -0
- package/dist/cjs/types/upload.js +3 -0
- package/dist/cjs/utils/Histogram.d.ts +93 -0
- package/dist/cjs/utils/Histogram.d.ts.map +1 -0
- package/dist/cjs/utils/Histogram.js +103 -0
- package/dist/cjs/utils/assertNever.d.ts +19 -0
- package/dist/cjs/utils/assertNever.d.ts.map +1 -0
- package/dist/cjs/utils/assertNever.js +24 -0
- package/dist/cjs/utils/format.d.ts +22 -0
- package/dist/cjs/utils/format.d.ts.map +1 -0
- package/dist/cjs/utils/format.js +25 -0
- package/dist/cjs/utils/index.d.ts +6 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +14 -0
- package/dist/cjs/utils/keyboard.d.ts +70 -0
- package/dist/cjs/utils/keyboard.d.ts.map +1 -0
- package/dist/cjs/utils/keyboard.js +166 -0
- package/dist/esm/api/BotsApi.d.ts +17 -0
- package/dist/esm/api/BotsApi.d.ts.map +1 -0
- package/dist/esm/api/BotsApi.js +18 -0
- package/dist/esm/api/ChatsApi.d.ts +87 -0
- package/dist/esm/api/ChatsApi.d.ts.map +1 -0
- package/dist/esm/api/ChatsApi.js +140 -0
- package/dist/esm/api/MessagesApi.d.ts +41 -0
- package/dist/esm/api/MessagesApi.d.ts.map +1 -0
- package/dist/esm/api/MessagesApi.js +62 -0
- package/dist/esm/api/SubscriptionsApi.d.ts +45 -0
- package/dist/esm/api/SubscriptionsApi.d.ts.map +1 -0
- package/dist/esm/api/SubscriptionsApi.js +65 -0
- package/dist/esm/api/UploadsApi.d.ts +45 -0
- package/dist/esm/api/UploadsApi.d.ts.map +1 -0
- package/dist/esm/api/UploadsApi.js +109 -0
- package/dist/esm/api/index.d.ts +7 -0
- package/dist/esm/api/index.d.ts.map +1 -0
- package/dist/esm/api/index.js +6 -0
- package/dist/esm/api/interfaces.d.ts +108 -0
- package/dist/esm/api/interfaces.d.ts.map +1 -0
- package/dist/esm/api/interfaces.js +2 -0
- package/dist/esm/bot/Bot.d.ts +380 -0
- package/dist/esm/bot/Bot.d.ts.map +1 -0
- package/dist/esm/bot/Bot.js +620 -0
- package/dist/esm/bot/Composer.d.ts +131 -0
- package/dist/esm/bot/Composer.d.ts.map +1 -0
- package/dist/esm/bot/Composer.js +214 -0
- package/dist/esm/bot/context/BotStartedContext.d.ts +83 -0
- package/dist/esm/bot/context/BotStartedContext.d.ts.map +1 -0
- package/dist/esm/bot/context/BotStartedContext.js +109 -0
- package/dist/esm/bot/context/CallbackContext.d.ts +107 -0
- package/dist/esm/bot/context/CallbackContext.d.ts.map +1 -0
- package/dist/esm/bot/context/CallbackContext.js +154 -0
- package/dist/esm/bot/context/ChatContext.d.ts +35 -0
- package/dist/esm/bot/context/ChatContext.d.ts.map +1 -0
- package/dist/esm/bot/context/ChatContext.js +48 -0
- package/dist/esm/bot/context/MessageContext.d.ts +149 -0
- package/dist/esm/bot/context/MessageContext.d.ts.map +1 -0
- package/dist/esm/bot/context/MessageContext.js +224 -0
- package/dist/esm/bot/context/guards.d.ts +69 -0
- package/dist/esm/bot/context/guards.d.ts.map +1 -0
- package/dist/esm/bot/context/guards.js +78 -0
- package/dist/esm/bot/context/index.d.ts +6 -0
- package/dist/esm/bot/context/index.d.ts.map +1 -0
- package/dist/esm/bot/context/index.js +6 -0
- package/dist/esm/bot/dispatch.d.ts +51 -0
- package/dist/esm/bot/dispatch.d.ts.map +1 -0
- package/dist/esm/bot/dispatch.js +197 -0
- package/dist/esm/bot/index.d.ts +10 -0
- package/dist/esm/bot/index.d.ts.map +1 -0
- package/dist/esm/bot/index.js +9 -0
- package/dist/esm/bot/lifecycle.d.ts +85 -0
- package/dist/esm/bot/lifecycle.d.ts.map +1 -0
- package/dist/esm/bot/lifecycle.js +163 -0
- package/dist/esm/bot/metrics.d.ts +18 -0
- package/dist/esm/bot/metrics.d.ts.map +1 -0
- package/dist/esm/bot/metrics.js +2 -0
- package/dist/esm/bot/routing.d.ts +131 -0
- package/dist/esm/bot/routing.d.ts.map +1 -0
- package/dist/esm/bot/routing.js +194 -0
- package/dist/esm/bot/triggers.d.ts +61 -0
- package/dist/esm/bot/triggers.d.ts.map +1 -0
- package/dist/esm/bot/triggers.js +80 -0
- package/dist/esm/core/errors/MaxError.d.ts +11 -0
- package/dist/esm/core/errors/MaxError.d.ts.map +1 -0
- package/dist/esm/core/errors/MaxError.js +15 -0
- package/dist/esm/core/errors/errors.d.ts +59 -0
- package/dist/esm/core/errors/errors.d.ts.map +1 -0
- package/dist/esm/core/errors/errors.js +75 -0
- package/dist/esm/core/errors/index.d.ts +3 -0
- package/dist/esm/core/errors/index.d.ts.map +1 -0
- package/dist/esm/core/errors/index.js +3 -0
- package/dist/esm/core/http/HttpClient.d.ts +28 -0
- package/dist/esm/core/http/HttpClient.d.ts.map +1 -0
- package/dist/esm/core/http/HttpClient.js +144 -0
- package/dist/esm/core/http/index.d.ts +3 -0
- package/dist/esm/core/http/index.d.ts.map +1 -0
- package/dist/esm/core/http/index.js +2 -0
- package/dist/esm/core/http/interfaces.d.ts +42 -0
- package/dist/esm/core/http/interfaces.d.ts.map +1 -0
- package/dist/esm/core/http/interfaces.js +2 -0
- package/dist/esm/core/rate-limiter/RateLimiter.d.ts +46 -0
- package/dist/esm/core/rate-limiter/RateLimiter.d.ts.map +1 -0
- package/dist/esm/core/rate-limiter/RateLimiter.js +106 -0
- package/dist/esm/core/rate-limiter/index.d.ts +3 -0
- package/dist/esm/core/rate-limiter/index.d.ts.map +1 -0
- package/dist/esm/core/rate-limiter/index.js +2 -0
- package/dist/esm/filters/index.d.ts +2 -0
- package/dist/esm/filters/index.d.ts.map +1 -0
- package/dist/esm/filters/index.js +2 -0
- package/dist/esm/filters/predicates.d.ts +85 -0
- package/dist/esm/filters/predicates.d.ts.map +1 -0
- package/dist/esm/filters/predicates.js +104 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/middleware/compose.d.ts +28 -0
- package/dist/esm/middleware/compose.d.ts.map +1 -0
- package/dist/esm/middleware/compose.js +85 -0
- package/dist/esm/middleware/index.d.ts +3 -0
- package/dist/esm/middleware/index.d.ts.map +1 -0
- package/dist/esm/middleware/index.js +2 -0
- package/dist/esm/middleware/types.d.ts +17 -0
- package/dist/esm/middleware/types.d.ts.map +1 -0
- package/dist/esm/middleware/types.js +2 -0
- package/dist/esm/transport/LongPollingTransport.d.ts +33 -0
- package/dist/esm/transport/LongPollingTransport.d.ts.map +1 -0
- package/dist/esm/transport/LongPollingTransport.js +149 -0
- package/dist/esm/transport/WebhookTransport.d.ts +40 -0
- package/dist/esm/transport/WebhookTransport.d.ts.map +1 -0
- package/dist/esm/transport/WebhookTransport.js +225 -0
- package/dist/esm/transport/index.d.ts +4 -0
- package/dist/esm/transport/index.d.ts.map +1 -0
- package/dist/esm/transport/index.js +3 -0
- package/dist/esm/transport/interfaces.d.ts +74 -0
- package/dist/esm/transport/interfaces.d.ts.map +1 -0
- package/dist/esm/transport/interfaces.js +2 -0
- package/dist/esm/types/bot.d.ts +19 -0
- package/dist/esm/types/bot.d.ts.map +1 -0
- package/dist/esm/types/bot.js +2 -0
- package/dist/esm/types/chat.d.ts +94 -0
- package/dist/esm/types/chat.d.ts.map +1 -0
- package/dist/esm/types/chat.js +2 -0
- package/dist/esm/types/common.d.ts +38 -0
- package/dist/esm/types/common.d.ts.map +1 -0
- package/dist/esm/types/common.js +5 -0
- package/dist/esm/types/index.d.ts +9 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +10 -0
- package/dist/esm/types/keyboard.d.ts +97 -0
- package/dist/esm/types/keyboard.d.ts.map +1 -0
- package/dist/esm/types/keyboard.js +2 -0
- package/dist/esm/types/message.d.ts +162 -0
- package/dist/esm/types/message.d.ts.map +1 -0
- package/dist/esm/types/message.js +2 -0
- package/dist/esm/types/subscription.d.ts +23 -0
- package/dist/esm/types/subscription.d.ts.map +1 -0
- package/dist/esm/types/subscription.js +2 -0
- package/dist/esm/types/update.d.ts +99 -0
- package/dist/esm/types/update.d.ts.map +1 -0
- package/dist/esm/types/update.js +2 -0
- package/dist/esm/types/upload.d.ts +29 -0
- package/dist/esm/types/upload.d.ts.map +1 -0
- package/dist/esm/types/upload.js +2 -0
- package/dist/esm/utils/Histogram.d.ts +93 -0
- package/dist/esm/utils/Histogram.d.ts.map +1 -0
- package/dist/esm/utils/Histogram.js +99 -0
- package/dist/esm/utils/assertNever.d.ts +19 -0
- package/dist/esm/utils/assertNever.d.ts.map +1 -0
- package/dist/esm/utils/assertNever.js +21 -0
- package/dist/esm/utils/format.d.ts +22 -0
- package/dist/esm/utils/format.d.ts.map +1 -0
- package/dist/esm/utils/format.js +22 -0
- package/dist/esm/utils/index.d.ts +6 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +5 -0
- package/dist/esm/utils/keyboard.d.ts +70 -0
- package/dist/esm/utils/keyboard.d.ts.map +1 -0
- package/dist/esm/utils/keyboard.js +162 -0
- package/dist/types/api/BotsApi.d.ts +17 -0
- package/dist/types/api/BotsApi.d.ts.map +1 -0
- package/dist/types/api/ChatsApi.d.ts +87 -0
- package/dist/types/api/ChatsApi.d.ts.map +1 -0
- package/dist/types/api/MessagesApi.d.ts +41 -0
- package/dist/types/api/MessagesApi.d.ts.map +1 -0
- package/dist/types/api/SubscriptionsApi.d.ts +45 -0
- package/dist/types/api/SubscriptionsApi.d.ts.map +1 -0
- package/dist/types/api/UploadsApi.d.ts +45 -0
- package/dist/types/api/UploadsApi.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +7 -0
- package/dist/types/api/index.d.ts.map +1 -0
- package/dist/types/api/interfaces.d.ts +108 -0
- package/dist/types/api/interfaces.d.ts.map +1 -0
- package/dist/types/bot/Bot.d.ts +380 -0
- package/dist/types/bot/Bot.d.ts.map +1 -0
- package/dist/types/bot/Composer.d.ts +131 -0
- package/dist/types/bot/Composer.d.ts.map +1 -0
- package/dist/types/bot/context/BotStartedContext.d.ts +83 -0
- package/dist/types/bot/context/BotStartedContext.d.ts.map +1 -0
- package/dist/types/bot/context/CallbackContext.d.ts +107 -0
- package/dist/types/bot/context/CallbackContext.d.ts.map +1 -0
- package/dist/types/bot/context/ChatContext.d.ts +35 -0
- package/dist/types/bot/context/ChatContext.d.ts.map +1 -0
- package/dist/types/bot/context/MessageContext.d.ts +149 -0
- package/dist/types/bot/context/MessageContext.d.ts.map +1 -0
- package/dist/types/bot/context/guards.d.ts +69 -0
- package/dist/types/bot/context/guards.d.ts.map +1 -0
- package/dist/types/bot/context/index.d.ts +6 -0
- package/dist/types/bot/context/index.d.ts.map +1 -0
- package/dist/types/bot/dispatch.d.ts +51 -0
- package/dist/types/bot/dispatch.d.ts.map +1 -0
- package/dist/types/bot/index.d.ts +10 -0
- package/dist/types/bot/index.d.ts.map +1 -0
- package/dist/types/bot/lifecycle.d.ts +85 -0
- package/dist/types/bot/lifecycle.d.ts.map +1 -0
- package/dist/types/bot/metrics.d.ts +18 -0
- package/dist/types/bot/metrics.d.ts.map +1 -0
- package/dist/types/bot/routing.d.ts +131 -0
- package/dist/types/bot/routing.d.ts.map +1 -0
- package/dist/types/bot/triggers.d.ts +61 -0
- package/dist/types/bot/triggers.d.ts.map +1 -0
- package/dist/types/core/errors/MaxError.d.ts +11 -0
- package/dist/types/core/errors/MaxError.d.ts.map +1 -0
- package/dist/types/core/errors/errors.d.ts +59 -0
- package/dist/types/core/errors/errors.d.ts.map +1 -0
- package/dist/types/core/errors/index.d.ts +3 -0
- package/dist/types/core/errors/index.d.ts.map +1 -0
- package/dist/types/core/http/HttpClient.d.ts +28 -0
- package/dist/types/core/http/HttpClient.d.ts.map +1 -0
- package/dist/types/core/http/index.d.ts +3 -0
- package/dist/types/core/http/index.d.ts.map +1 -0
- package/dist/types/core/http/interfaces.d.ts +42 -0
- package/dist/types/core/http/interfaces.d.ts.map +1 -0
- package/dist/types/core/rate-limiter/RateLimiter.d.ts +46 -0
- package/dist/types/core/rate-limiter/RateLimiter.d.ts.map +1 -0
- package/dist/types/core/rate-limiter/index.d.ts +3 -0
- package/dist/types/core/rate-limiter/index.d.ts.map +1 -0
- package/dist/types/filters/index.d.ts +2 -0
- package/dist/types/filters/index.d.ts.map +1 -0
- package/dist/types/filters/predicates.d.ts +85 -0
- package/dist/types/filters/predicates.d.ts.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/middleware/compose.d.ts +28 -0
- package/dist/types/middleware/compose.d.ts.map +1 -0
- package/dist/types/middleware/index.d.ts +3 -0
- package/dist/types/middleware/index.d.ts.map +1 -0
- package/dist/types/middleware/types.d.ts +17 -0
- package/dist/types/middleware/types.d.ts.map +1 -0
- package/dist/types/transport/LongPollingTransport.d.ts +33 -0
- package/dist/types/transport/LongPollingTransport.d.ts.map +1 -0
- package/dist/types/transport/WebhookTransport.d.ts +40 -0
- package/dist/types/transport/WebhookTransport.d.ts.map +1 -0
- package/dist/types/transport/index.d.ts +4 -0
- package/dist/types/transport/index.d.ts.map +1 -0
- package/dist/types/transport/interfaces.d.ts +74 -0
- package/dist/types/transport/interfaces.d.ts.map +1 -0
- package/dist/types/types/bot.d.ts +19 -0
- package/dist/types/types/bot.d.ts.map +1 -0
- package/dist/types/types/chat.d.ts +94 -0
- package/dist/types/types/chat.d.ts.map +1 -0
- package/dist/types/types/common.d.ts +38 -0
- package/dist/types/types/common.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +9 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/keyboard.d.ts +97 -0
- package/dist/types/types/keyboard.d.ts.map +1 -0
- package/dist/types/types/message.d.ts +162 -0
- package/dist/types/types/message.d.ts.map +1 -0
- package/dist/types/types/subscription.d.ts +23 -0
- package/dist/types/types/subscription.d.ts.map +1 -0
- package/dist/types/types/update.d.ts +99 -0
- package/dist/types/types/update.d.ts.map +1 -0
- package/dist/types/types/upload.d.ts +29 -0
- package/dist/types/types/upload.d.ts.map +1 -0
- package/dist/types/utils/Histogram.d.ts +93 -0
- package/dist/types/utils/Histogram.d.ts.map +1 -0
- package/dist/types/utils/assertNever.d.ts +19 -0
- package/dist/types/utils/assertNever.d.ts.map +1 -0
- package/dist/types/utils/format.d.ts +22 -0
- package/dist/types/utils/format.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +6 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/keyboard.d.ts +70 -0
- package/dist/types/utils/keyboard.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { Middleware } from "../middleware/types.js";
|
|
2
|
+
import type { Context } from "./Bot.js";
|
|
3
|
+
import type { UpdateType } from "../types/update.js";
|
|
4
|
+
import { type HearsTrigger } from "./triggers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Тип предиката-фильтра, уточняющего тип контекста.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const isAdmin: Filter<Context, MessageContext> = (ctx) =>
|
|
10
|
+
* isMessageContext(ctx) && ctx.senderId === ADMIN_ID;
|
|
11
|
+
*/
|
|
12
|
+
export type Filter<Ctx, Narrowed extends Ctx> = (ctx: Ctx) => ctx is Narrowed;
|
|
13
|
+
/**
|
|
14
|
+
* Composer — независимый суб-роутер, совместимый с `bot.use()`.
|
|
15
|
+
*
|
|
16
|
+
* Собирает маршруты (`command`, `hears`, `action`, `on`, `filter`) в изолированную
|
|
17
|
+
* цепочку middleware и подключается к боту через `bot.use(composer.middleware())`.
|
|
18
|
+
*
|
|
19
|
+
* Позволяет разбить логику бота на независимые модули с явными границами:
|
|
20
|
+
* - `adminRouter` — команды только для администраторов
|
|
21
|
+
* - `shopRouter` — весь шоппинг-флоу
|
|
22
|
+
* - `notificationRouter` — обработка системных событий
|
|
23
|
+
*
|
|
24
|
+
* @example Суб-роутер для администраторов
|
|
25
|
+
* ```ts
|
|
26
|
+
* const adminRouter = new Composer<Context>();
|
|
27
|
+
*
|
|
28
|
+
* adminRouter.use(onlyAdminMiddleware);
|
|
29
|
+
* adminRouter.command('stats', async (ctx) => { ... });
|
|
30
|
+
* adminRouter.hears(/^админ/i, async (ctx) => { ... });
|
|
31
|
+
*
|
|
32
|
+
* bot.use(adminRouter.middleware());
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example bot.filter() + Composer
|
|
36
|
+
* ```ts
|
|
37
|
+
* const privateRouter = new Composer<Context>();
|
|
38
|
+
* privateRouter.command('start', async (ctx) => { ... });
|
|
39
|
+
*
|
|
40
|
+
* // Подключаем только для приватных диалогов
|
|
41
|
+
* bot.filter(isPrivateChat, privateRouter.middleware());
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class Composer<Ctx extends Context = Context> {
|
|
45
|
+
private readonly fns;
|
|
46
|
+
/**
|
|
47
|
+
* Добавить middleware в цепочку.
|
|
48
|
+
*
|
|
49
|
+
* Middleware получает контекст и функцию `next` для перехода к следующему звену.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* composer.use(async (ctx, next) => {
|
|
53
|
+
* console.log('before');
|
|
54
|
+
* await next();
|
|
55
|
+
* console.log('after');
|
|
56
|
+
* });
|
|
57
|
+
*/
|
|
58
|
+
use(middleware: Middleware<Ctx>): this;
|
|
59
|
+
/**
|
|
60
|
+
* Подписаться на конкретный тип обновления.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* composer.on('bot_added', async (ctx, next) => {
|
|
64
|
+
* await ctx.reply('Бот добавлен!');
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
on(event: UpdateType, ...fns: Middleware<Ctx>[]): this;
|
|
68
|
+
/**
|
|
69
|
+
* Подписаться на команду (`/name`).
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* composer.command('help', async (ctx) => { ... });
|
|
73
|
+
* composer.command('pay', authMw, async (ctx) => { ... });
|
|
74
|
+
*/
|
|
75
|
+
command(name: string, ...fns: Middleware<Ctx>[]): this;
|
|
76
|
+
/**
|
|
77
|
+
* Подписаться на текст сообщения.
|
|
78
|
+
*
|
|
79
|
+
* `pattern` может быть строкой, RegExp или массивом — срабатывает на первое совпадение.
|
|
80
|
+
* При совпадении RegExp устанавливает `ctx.match` с capture-группами.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* composer.hears(/(\d+)\+(\d+)/, async (ctx) => {
|
|
84
|
+
* const [, a, b] = ctx.match!;
|
|
85
|
+
* });
|
|
86
|
+
* composer.hears([/^\d+$/, 'помощь'], handler); // массив паттернов
|
|
87
|
+
*/
|
|
88
|
+
hears(pattern: HearsTrigger, ...fns: Middleware<Ctx>[]): this;
|
|
89
|
+
/**
|
|
90
|
+
* Подписаться на callback payload.
|
|
91
|
+
*
|
|
92
|
+
* `pattern` может быть строкой, RegExp или массивом — срабатывает на первое совпадение.
|
|
93
|
+
* При совпадении RegExp устанавливает `ctx.match` с capture-группами.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* composer.action(/^buy:(\d+)$/, async (ctx) => {
|
|
97
|
+
* const [, id] = ctx.match!;
|
|
98
|
+
* });
|
|
99
|
+
* composer.action(['confirm', 'ok'], handler); // несколько payload
|
|
100
|
+
*/
|
|
101
|
+
action(pattern: HearsTrigger, ...fns: Middleware<Ctx>[]): this;
|
|
102
|
+
/**
|
|
103
|
+
* Фильтровать контекст по предикату с сужением типа.
|
|
104
|
+
*
|
|
105
|
+
* Если предикат возвращает `true` — выполняются handlers с суженным типом.
|
|
106
|
+
* Если `false` — вызывается `next()` (передаётся наружу).
|
|
107
|
+
*
|
|
108
|
+
* @example Только авторизованные пользователи
|
|
109
|
+
* composer.filter(isAdmin, async (ctx) => {
|
|
110
|
+
* await ctx.reply('Привет, администратор!');
|
|
111
|
+
* });
|
|
112
|
+
*
|
|
113
|
+
* @example Только сообщения с текстом
|
|
114
|
+
* composer.filter(hasText, async (ctx) => {
|
|
115
|
+
* console.log(ctx.text.toUpperCase()); // ctx.text: string
|
|
116
|
+
* });
|
|
117
|
+
*/
|
|
118
|
+
filter<Narrowed extends Ctx>(predicate: (ctx: Ctx) => ctx is Narrowed, ...fns: Middleware<Narrowed>[]): this;
|
|
119
|
+
/**
|
|
120
|
+
* Вернуть этот Composer как один `Middleware` для подключения к боту или другому Composer.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* const router = new Composer();
|
|
124
|
+
* router.command('start', handler);
|
|
125
|
+
* bot.use(router.middleware());
|
|
126
|
+
*/
|
|
127
|
+
middleware(): Middleware<Ctx>;
|
|
128
|
+
/** Сборка цепочки из нескольких fns в единый терминальный обработчик (без next). */
|
|
129
|
+
private pipe;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=Composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../../src/bot/Composer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,MAAM,MAAM,CAAC,GAAG,EAAE,QAAQ,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,QAAQ,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,QAAQ,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAE7C;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI;IAKtC;;;;;;;OAOG;IACH,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAatD;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAkBtD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAkB7D;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAkB9D;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,QAAQ,SAAS,GAAG,EACzB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,QAAQ,EACxC,GAAG,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,GAC7B,IAAI;IAWP;;;;;;;OAOG;IACH,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC;IAU7B,oFAAoF;IACpF,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { compose } from "../middleware/compose.js";
|
|
2
|
+
import { isMessageContext, isCallbackContext } from "./context/guards.js";
|
|
3
|
+
import { matchTrigger } from "./triggers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Composer — независимый суб-роутер, совместимый с `bot.use()`.
|
|
6
|
+
*
|
|
7
|
+
* Собирает маршруты (`command`, `hears`, `action`, `on`, `filter`) в изолированную
|
|
8
|
+
* цепочку middleware и подключается к боту через `bot.use(composer.middleware())`.
|
|
9
|
+
*
|
|
10
|
+
* Позволяет разбить логику бота на независимые модули с явными границами:
|
|
11
|
+
* - `adminRouter` — команды только для администраторов
|
|
12
|
+
* - `shopRouter` — весь шоппинг-флоу
|
|
13
|
+
* - `notificationRouter` — обработка системных событий
|
|
14
|
+
*
|
|
15
|
+
* @example Суб-роутер для администраторов
|
|
16
|
+
* ```ts
|
|
17
|
+
* const adminRouter = new Composer<Context>();
|
|
18
|
+
*
|
|
19
|
+
* adminRouter.use(onlyAdminMiddleware);
|
|
20
|
+
* adminRouter.command('stats', async (ctx) => { ... });
|
|
21
|
+
* adminRouter.hears(/^админ/i, async (ctx) => { ... });
|
|
22
|
+
*
|
|
23
|
+
* bot.use(adminRouter.middleware());
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example bot.filter() + Composer
|
|
27
|
+
* ```ts
|
|
28
|
+
* const privateRouter = new Composer<Context>();
|
|
29
|
+
* privateRouter.command('start', async (ctx) => { ... });
|
|
30
|
+
*
|
|
31
|
+
* // Подключаем только для приватных диалогов
|
|
32
|
+
* bot.filter(isPrivateChat, privateRouter.middleware());
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class Composer {
|
|
36
|
+
fns = [];
|
|
37
|
+
/**
|
|
38
|
+
* Добавить middleware в цепочку.
|
|
39
|
+
*
|
|
40
|
+
* Middleware получает контекст и функцию `next` для перехода к следующему звену.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* composer.use(async (ctx, next) => {
|
|
44
|
+
* console.log('before');
|
|
45
|
+
* await next();
|
|
46
|
+
* console.log('after');
|
|
47
|
+
* });
|
|
48
|
+
*/
|
|
49
|
+
use(middleware) {
|
|
50
|
+
this.fns.push(middleware);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Подписаться на конкретный тип обновления.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* composer.on('bot_added', async (ctx, next) => {
|
|
58
|
+
* await ctx.reply('Бот добавлен!');
|
|
59
|
+
* });
|
|
60
|
+
*/
|
|
61
|
+
on(event, ...fns) {
|
|
62
|
+
const composed = this.pipe(...fns);
|
|
63
|
+
this.fns.push(async (ctx, next) => {
|
|
64
|
+
// ctx as Context — безопасно: Ctx extends Context, все .raw содержат update_type
|
|
65
|
+
if (ctx.raw.update_type === event) {
|
|
66
|
+
await composed(ctx);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
await next();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Подписаться на команду (`/name`).
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* composer.command('help', async (ctx) => { ... });
|
|
79
|
+
* composer.command('pay', authMw, async (ctx) => { ... });
|
|
80
|
+
*/
|
|
81
|
+
command(name, ...fns) {
|
|
82
|
+
const composed = this.pipe(...fns);
|
|
83
|
+
this.fns.push(async (ctx, next) => {
|
|
84
|
+
if (!isMessageContext(ctx)) {
|
|
85
|
+
await next();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const text = ctx.text ?? "";
|
|
89
|
+
const normalized = name.startsWith("/") ? name : `/${name}`;
|
|
90
|
+
if (text === normalized || text.startsWith(`${normalized} `)) {
|
|
91
|
+
await composed(ctx);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
await next();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Подписаться на текст сообщения.
|
|
101
|
+
*
|
|
102
|
+
* `pattern` может быть строкой, RegExp или массивом — срабатывает на первое совпадение.
|
|
103
|
+
* При совпадении RegExp устанавливает `ctx.match` с capture-группами.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* composer.hears(/(\d+)\+(\d+)/, async (ctx) => {
|
|
107
|
+
* const [, a, b] = ctx.match!;
|
|
108
|
+
* });
|
|
109
|
+
* composer.hears([/^\d+$/, 'помощь'], handler); // массив паттернов
|
|
110
|
+
*/
|
|
111
|
+
hears(pattern, ...fns) {
|
|
112
|
+
const composed = this.pipe(...fns);
|
|
113
|
+
this.fns.push(async (ctx, next) => {
|
|
114
|
+
if (!isMessageContext(ctx)) {
|
|
115
|
+
await next();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const result = matchTrigger(pattern, ctx.text ?? "");
|
|
119
|
+
if (result !== null) {
|
|
120
|
+
if (result !== true)
|
|
121
|
+
ctx.match = result;
|
|
122
|
+
await composed(ctx);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
await next();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Подписаться на callback payload.
|
|
132
|
+
*
|
|
133
|
+
* `pattern` может быть строкой, RegExp или массивом — срабатывает на первое совпадение.
|
|
134
|
+
* При совпадении RegExp устанавливает `ctx.match` с capture-группами.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* composer.action(/^buy:(\d+)$/, async (ctx) => {
|
|
138
|
+
* const [, id] = ctx.match!;
|
|
139
|
+
* });
|
|
140
|
+
* composer.action(['confirm', 'ok'], handler); // несколько payload
|
|
141
|
+
*/
|
|
142
|
+
action(pattern, ...fns) {
|
|
143
|
+
const composed = this.pipe(...fns);
|
|
144
|
+
this.fns.push(async (ctx, next) => {
|
|
145
|
+
if (!isCallbackContext(ctx)) {
|
|
146
|
+
await next();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const result = matchTrigger(pattern, ctx.data);
|
|
150
|
+
if (result !== null) {
|
|
151
|
+
if (result !== true)
|
|
152
|
+
ctx.match = result;
|
|
153
|
+
await composed(ctx);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
await next();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return this;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Фильтровать контекст по предикату с сужением типа.
|
|
163
|
+
*
|
|
164
|
+
* Если предикат возвращает `true` — выполняются handlers с суженным типом.
|
|
165
|
+
* Если `false` — вызывается `next()` (передаётся наружу).
|
|
166
|
+
*
|
|
167
|
+
* @example Только авторизованные пользователи
|
|
168
|
+
* composer.filter(isAdmin, async (ctx) => {
|
|
169
|
+
* await ctx.reply('Привет, администратор!');
|
|
170
|
+
* });
|
|
171
|
+
*
|
|
172
|
+
* @example Только сообщения с текстом
|
|
173
|
+
* composer.filter(hasText, async (ctx) => {
|
|
174
|
+
* console.log(ctx.text.toUpperCase()); // ctx.text: string
|
|
175
|
+
* });
|
|
176
|
+
*/
|
|
177
|
+
filter(predicate, ...fns) {
|
|
178
|
+
this.fns.push(async (ctx, next) => {
|
|
179
|
+
if (predicate(ctx)) {
|
|
180
|
+
await compose(fns, async () => { })(ctx);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
await next();
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Вернуть этот Composer как один `Middleware` для подключения к боту или другому Composer.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* const router = new Composer();
|
|
193
|
+
* router.command('start', handler);
|
|
194
|
+
* bot.use(router.middleware());
|
|
195
|
+
*/
|
|
196
|
+
middleware() {
|
|
197
|
+
if (this.fns.length === 0) {
|
|
198
|
+
return async (_ctx, next) => next();
|
|
199
|
+
}
|
|
200
|
+
return async (ctx, next) => {
|
|
201
|
+
// Запускаем внутреннюю цепочку; в конце вызываем внешний next — fall-through
|
|
202
|
+
await compose(this.fns, async () => next())(ctx);
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/** Сборка цепочки из нескольких fns в единый терминальный обработчик (без next). */
|
|
206
|
+
pipe(...fns) {
|
|
207
|
+
if (fns.length === 1) {
|
|
208
|
+
const fn = fns[0];
|
|
209
|
+
return (ctx) => Promise.resolve(fn(ctx, async () => { }));
|
|
210
|
+
}
|
|
211
|
+
return compose(fns, async () => { });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=Composer.js.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { ContextApi, SendOptions } from "./MessageContext.js";
|
|
2
|
+
import type { Message } from "../../types/message.js";
|
|
3
|
+
import type { User } from "../../types/common.js";
|
|
4
|
+
import type { BotStartedUpdate } from "../../types/update.js";
|
|
5
|
+
import type { Context } from "../Bot.js";
|
|
6
|
+
/**
|
|
7
|
+
* Контекст события bot_started.
|
|
8
|
+
*
|
|
9
|
+
* Возникает когда пользователь нажимает кнопку Start в диалоге с ботом
|
|
10
|
+
* или переходит по deep link вида `https://max.ru/...?start=<payload>`.
|
|
11
|
+
*
|
|
12
|
+
* Используйте `ctx.startPayload` для чтения payload из deep link:
|
|
13
|
+
* реферальные программы, onboarding-флоу, контекстный запуск бота.
|
|
14
|
+
*
|
|
15
|
+
* @example Реферальная ссылка
|
|
16
|
+
* bot.onStart(async (ctx) => {
|
|
17
|
+
* if (ctx.startPayload) {
|
|
18
|
+
* await ctx.reply(`Вы пришли по ссылке: ref=${ctx.startPayload}`);
|
|
19
|
+
* } else {
|
|
20
|
+
* await ctx.reply("Добро пожаловать!");
|
|
21
|
+
* }
|
|
22
|
+
* });
|
|
23
|
+
*/
|
|
24
|
+
export declare class BotStartedContext {
|
|
25
|
+
private readonly update;
|
|
26
|
+
private readonly api;
|
|
27
|
+
constructor(update: BotStartedUpdate, api: ContextApi);
|
|
28
|
+
/** Исходное обновление */
|
|
29
|
+
get raw(): BotStartedUpdate;
|
|
30
|
+
/** ID чата (диалога), в котором произошло событие */
|
|
31
|
+
get chatId(): number;
|
|
32
|
+
/** Пользователь, нажавший Start */
|
|
33
|
+
get user(): User;
|
|
34
|
+
/** ID пользователя */
|
|
35
|
+
get userId(): number;
|
|
36
|
+
/**
|
|
37
|
+
* Payload из deep link.
|
|
38
|
+
*
|
|
39
|
+
* `null` или `undefined` если Start нажат без параметра (обычный запуск).
|
|
40
|
+
* Непустая строка — значение параметра `start` из ссылки.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* // Ссылка: https://max.ru/...?start=ref_123
|
|
44
|
+
* bot.onStart(async (ctx) => {
|
|
45
|
+
* const ref = ctx.startPayload; // "ref_123" | null | undefined
|
|
46
|
+
* });
|
|
47
|
+
*/
|
|
48
|
+
get startPayload(): string | null | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Отправить сообщение в диалог пользователю.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* bot.onStart(async (ctx) => {
|
|
54
|
+
* if (isBotStartedContext(ctx)) await ctx.reply('Добро пожаловать!');
|
|
55
|
+
* });
|
|
56
|
+
*/
|
|
57
|
+
reply(text: string, options?: SendOptions): Promise<Message>;
|
|
58
|
+
/**
|
|
59
|
+
* Отправить произвольное действие в чат (диалог пользователя).
|
|
60
|
+
*
|
|
61
|
+
* Распространённые значения: `"typing_on"`, `"sending_photo"`,
|
|
62
|
+
* `"sending_video"`, `"sending_audio"`, `"sending_file"`, `"mark_seen"`.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* bot.onStart(async (ctx) => {
|
|
66
|
+
* await ctx.sendAction('typing_on');
|
|
67
|
+
* await ctx.reply('Добро пожаловать!');
|
|
68
|
+
* });
|
|
69
|
+
*/
|
|
70
|
+
sendAction(action: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* bot.onStart(async (ctx) => {
|
|
77
|
+
* if (ctx.has(isPrivateChat)) { ... }
|
|
78
|
+
* });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
has<R extends Context>(filter: (ctx: Context) => ctx is R): this is R;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=BotStartedContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BotStartedContext.d.ts","sourceRoot":"","sources":["../../../../src/bot/context/BotStartedContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,UAAU;IAGlC,0BAA0B;IAC1B,IAAI,GAAG,IAAI,gBAAgB,CAE1B;IAED,qDAAqD;IACrD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,mCAAmC;IACnC,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,sBAAsB;IACtB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,YAAY,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS,CAE5C;IAED;;;;;;;OAOG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlE;;;;;;;;;;;OAWG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;;;;;;;;OASG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;CAGtE"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Контекст события bot_started.
|
|
3
|
+
*
|
|
4
|
+
* Возникает когда пользователь нажимает кнопку Start в диалоге с ботом
|
|
5
|
+
* или переходит по deep link вида `https://max.ru/...?start=<payload>`.
|
|
6
|
+
*
|
|
7
|
+
* Используйте `ctx.startPayload` для чтения payload из deep link:
|
|
8
|
+
* реферальные программы, onboarding-флоу, контекстный запуск бота.
|
|
9
|
+
*
|
|
10
|
+
* @example Реферальная ссылка
|
|
11
|
+
* bot.onStart(async (ctx) => {
|
|
12
|
+
* if (ctx.startPayload) {
|
|
13
|
+
* await ctx.reply(`Вы пришли по ссылке: ref=${ctx.startPayload}`);
|
|
14
|
+
* } else {
|
|
15
|
+
* await ctx.reply("Добро пожаловать!");
|
|
16
|
+
* }
|
|
17
|
+
* });
|
|
18
|
+
*/
|
|
19
|
+
export class BotStartedContext {
|
|
20
|
+
update;
|
|
21
|
+
api;
|
|
22
|
+
constructor(
|
|
23
|
+
// BotStartedUpdate — не общий Update: типизация гарантирует chat_id, user, payload
|
|
24
|
+
update, api) {
|
|
25
|
+
this.update = update;
|
|
26
|
+
this.api = api;
|
|
27
|
+
}
|
|
28
|
+
/** Исходное обновление */
|
|
29
|
+
get raw() {
|
|
30
|
+
return this.update;
|
|
31
|
+
}
|
|
32
|
+
/** ID чата (диалога), в котором произошло событие */
|
|
33
|
+
get chatId() {
|
|
34
|
+
return this.update.chat_id;
|
|
35
|
+
}
|
|
36
|
+
/** Пользователь, нажавший Start */
|
|
37
|
+
get user() {
|
|
38
|
+
return this.update.user;
|
|
39
|
+
}
|
|
40
|
+
/** ID пользователя */
|
|
41
|
+
get userId() {
|
|
42
|
+
return this.update.user.user_id;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Payload из deep link.
|
|
46
|
+
*
|
|
47
|
+
* `null` или `undefined` если Start нажат без параметра (обычный запуск).
|
|
48
|
+
* Непустая строка — значение параметра `start` из ссылки.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Ссылка: https://max.ru/...?start=ref_123
|
|
52
|
+
* bot.onStart(async (ctx) => {
|
|
53
|
+
* const ref = ctx.startPayload; // "ref_123" | null | undefined
|
|
54
|
+
* });
|
|
55
|
+
*/
|
|
56
|
+
get startPayload() {
|
|
57
|
+
return this.update.payload;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Отправить сообщение в диалог пользователю.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* bot.onStart(async (ctx) => {
|
|
64
|
+
* if (isBotStartedContext(ctx)) await ctx.reply('Добро пожаловать!');
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
async reply(text, options) {
|
|
68
|
+
const body = {
|
|
69
|
+
text,
|
|
70
|
+
format: options?.format,
|
|
71
|
+
attachments: options?.attachments,
|
|
72
|
+
notify: options?.notify,
|
|
73
|
+
};
|
|
74
|
+
const response = await this.api.messages.sendMessage({
|
|
75
|
+
chat_id: this.chatId,
|
|
76
|
+
disable_link_preview: options?.disable_link_preview,
|
|
77
|
+
}, body);
|
|
78
|
+
return response.message;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Отправить произвольное действие в чат (диалог пользователя).
|
|
82
|
+
*
|
|
83
|
+
* Распространённые значения: `"typing_on"`, `"sending_photo"`,
|
|
84
|
+
* `"sending_video"`, `"sending_audio"`, `"sending_file"`, `"mark_seen"`.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* bot.onStart(async (ctx) => {
|
|
88
|
+
* await ctx.sendAction('typing_on');
|
|
89
|
+
* await ctx.reply('Добро пожаловать!');
|
|
90
|
+
* });
|
|
91
|
+
*/
|
|
92
|
+
async sendAction(action) {
|
|
93
|
+
await this.api.chats.sendAction(this.chatId, action);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```ts
|
|
100
|
+
* bot.onStart(async (ctx) => {
|
|
101
|
+
* if (ctx.has(isPrivateChat)) { ... }
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
has(filter) {
|
|
106
|
+
return filter(this);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=BotStartedContext.js.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { ContextApi, SendOptions } from "./MessageContext.js";
|
|
2
|
+
import type { User } from "../../types/common.js";
|
|
3
|
+
import type { Message, NewMessageBody } from "../../types/message.js";
|
|
4
|
+
import type { CallbackUpdate } from "../../types/update.js";
|
|
5
|
+
import type { Context } from "../Bot.js";
|
|
6
|
+
/**
|
|
7
|
+
* Опции ответа на callback
|
|
8
|
+
*/
|
|
9
|
+
export interface AnswerOptions {
|
|
10
|
+
/** Обновить текущее сообщение */
|
|
11
|
+
message?: NewMessageBody;
|
|
12
|
+
/** Одноразовое уведомление пользователю */
|
|
13
|
+
notification?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Контекст callback-запроса (нажатие на inline-кнопку).
|
|
17
|
+
*/
|
|
18
|
+
export declare class CallbackContext {
|
|
19
|
+
private readonly update;
|
|
20
|
+
private readonly api;
|
|
21
|
+
/**
|
|
22
|
+
* Результат совпадения RegExp из `bot.action()`.
|
|
23
|
+
*
|
|
24
|
+
* Доступен только внутри обработчика `action()` с RegExp-паттерном.
|
|
25
|
+
* Содержит полный `RegExpExecArray`: `ctx.match[0]` — полное совпадение,
|
|
26
|
+
* `ctx.match[1]`, `ctx.match[2]`, ... — группы захвата.
|
|
27
|
+
*
|
|
28
|
+
* `null` если обработчик вызван не через `action()` или паттерн — строка.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* bot.action(/^buy:(\d+)$/, async (ctx) => {
|
|
32
|
+
* if (isCallbackContext(ctx)) console.log(ctx.match?.[1]); // id товара
|
|
33
|
+
* });
|
|
34
|
+
*/
|
|
35
|
+
match: RegExpExecArray | null;
|
|
36
|
+
constructor(update: CallbackUpdate, api: ContextApi);
|
|
37
|
+
/** Исходное обновление */
|
|
38
|
+
get raw(): CallbackUpdate;
|
|
39
|
+
/** ID callback-запроса */
|
|
40
|
+
get callbackId(): string;
|
|
41
|
+
/** Данные callback (payload кнопки) */
|
|
42
|
+
get data(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Сообщение, к которому была прикреплена кнопка.
|
|
45
|
+
* Может отсутствовать, если сообщение было удалено к моменту callback.
|
|
46
|
+
*/
|
|
47
|
+
get message(): Message | null;
|
|
48
|
+
/** ID чата */
|
|
49
|
+
get chatId(): number | null;
|
|
50
|
+
/** Пользователь, нажавший кнопку — гарантировано присутствие API */
|
|
51
|
+
get callbackUser(): User;
|
|
52
|
+
/** ID пользователя, нажавшего кнопку */
|
|
53
|
+
get userId(): number;
|
|
54
|
+
/** Локаль пользователя */
|
|
55
|
+
get locale(): string | null;
|
|
56
|
+
/**
|
|
57
|
+
* Ответить на callback.
|
|
58
|
+
*
|
|
59
|
+
* Закрывает "часики" на кнопке и опционально показывает уведомление.
|
|
60
|
+
*/
|
|
61
|
+
answer(options?: AnswerOptions): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Ответить сообщением в чат.
|
|
64
|
+
*
|
|
65
|
+
* Бросает ошибку, если chat_id недоступен — сообщение было удалено.
|
|
66
|
+
*/
|
|
67
|
+
reply(text: string, options?: SendOptions): Promise<Message>;
|
|
68
|
+
/**
|
|
69
|
+
* Редактировать сообщение с кнопкой.
|
|
70
|
+
*/
|
|
71
|
+
editMessage(text: string, options?: SendOptions): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Удалить сообщение с кнопкой.
|
|
74
|
+
*
|
|
75
|
+
* Бросает ошибку, если сообщение было удалено до callback.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* await ctx.deleteMessage();
|
|
79
|
+
*/
|
|
80
|
+
deleteMessage(): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Отправить произвольное действие в чат.
|
|
83
|
+
*
|
|
84
|
+
* Распространённые значения: `"typing_on"`, `"sending_photo"`,
|
|
85
|
+
* `"sending_video"`, `"sending_audio"`, `"sending_file"`, `"mark_seen"`.
|
|
86
|
+
*
|
|
87
|
+
* Бросает ошибку, если chat_id недоступен — сообщение удалено.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* await ctx.sendAction('typing_on');
|
|
91
|
+
*/
|
|
92
|
+
sendAction(action: string): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* bot.on('callback', async (ctx) => {
|
|
99
|
+
* if (ctx.has(hasCallbackPayload('confirm'))) {
|
|
100
|
+
* await ctx.answer({ notification: 'Подтверждено!' });
|
|
101
|
+
* }
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
has<R extends Context>(filter: (ctx: Context) => ctx is R): this is R;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=CallbackContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallbackContext.d.ts","sourceRoot":"","sources":["../../../../src/bot/context/CallbackContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,eAAe;IAmBxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAnBtB;;;;;;;;;;;;;OAaG;IACH,KAAK,EAAE,eAAe,GAAG,IAAI,CAAQ;gBAIlB,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,UAAU;IAGlC,0BAA0B;IAC1B,IAAI,GAAG,IAAI,cAAc,CAExB;IAED,0BAA0B;IAC1B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,uCAAuC;IACvC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAE5B;IAED,cAAc;IACd,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,oEAAoE;IACpE,IAAI,YAAY,IAAI,IAAI,CAEvB;IAED,wCAAwC;IACxC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,0BAA0B;IAC1B,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED;;;;OAIG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;;;OAIG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBlE;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE;;;;;;;OAOG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC;;;;;;;;;;OAUG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;CAGtE"}
|