@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,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Контекст callback-запроса (нажатие на inline-кнопку).
|
|
3
|
+
*/
|
|
4
|
+
export class CallbackContext {
|
|
5
|
+
update;
|
|
6
|
+
api;
|
|
7
|
+
/**
|
|
8
|
+
* Результат совпадения RegExp из `bot.action()`.
|
|
9
|
+
*
|
|
10
|
+
* Доступен только внутри обработчика `action()` с RegExp-паттерном.
|
|
11
|
+
* Содержит полный `RegExpExecArray`: `ctx.match[0]` — полное совпадение,
|
|
12
|
+
* `ctx.match[1]`, `ctx.match[2]`, ... — группы захвата.
|
|
13
|
+
*
|
|
14
|
+
* `null` если обработчик вызван не через `action()` или паттерн — строка.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* bot.action(/^buy:(\d+)$/, async (ctx) => {
|
|
18
|
+
* if (isCallbackContext(ctx)) console.log(ctx.match?.[1]); // id товара
|
|
19
|
+
* });
|
|
20
|
+
*/
|
|
21
|
+
match = null;
|
|
22
|
+
constructor(
|
|
23
|
+
// CallbackUpdate — не общий Update: типизация гарантирует наличие callback-полей
|
|
24
|
+
update, api) {
|
|
25
|
+
this.update = update;
|
|
26
|
+
this.api = api;
|
|
27
|
+
}
|
|
28
|
+
/** Исходное обновление */
|
|
29
|
+
get raw() {
|
|
30
|
+
return this.update;
|
|
31
|
+
}
|
|
32
|
+
/** ID callback-запроса */
|
|
33
|
+
get callbackId() {
|
|
34
|
+
return this.update.callback.callback_id;
|
|
35
|
+
}
|
|
36
|
+
/** Данные callback (payload кнопки) */
|
|
37
|
+
get data() {
|
|
38
|
+
return this.update.callback.payload ?? "";
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Сообщение, к которому была прикреплена кнопка.
|
|
42
|
+
* Может отсутствовать, если сообщение было удалено к моменту callback.
|
|
43
|
+
*/
|
|
44
|
+
get message() {
|
|
45
|
+
return this.update.message ?? null;
|
|
46
|
+
}
|
|
47
|
+
/** ID чата */
|
|
48
|
+
get chatId() {
|
|
49
|
+
return this.update.message?.recipient.chat_id ?? null;
|
|
50
|
+
}
|
|
51
|
+
/** Пользователь, нажавший кнопку — гарантировано присутствие API */
|
|
52
|
+
get callbackUser() {
|
|
53
|
+
return this.update.callback.user;
|
|
54
|
+
}
|
|
55
|
+
/** ID пользователя, нажавшего кнопку */
|
|
56
|
+
get userId() {
|
|
57
|
+
return this.update.callback.user.user_id;
|
|
58
|
+
}
|
|
59
|
+
/** Локаль пользователя */
|
|
60
|
+
get locale() {
|
|
61
|
+
return this.update.user_locale ?? null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Ответить на callback.
|
|
65
|
+
*
|
|
66
|
+
* Закрывает "часики" на кнопке и опционально показывает уведомление.
|
|
67
|
+
*/
|
|
68
|
+
async answer(options) {
|
|
69
|
+
await this.api.messages.answerCallback(this.callbackId, options);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Ответить сообщением в чат.
|
|
73
|
+
*
|
|
74
|
+
* Бросает ошибку, если chat_id недоступен — сообщение было удалено.
|
|
75
|
+
*/
|
|
76
|
+
async reply(text, options) {
|
|
77
|
+
const chatId = this.chatId;
|
|
78
|
+
if (!chatId) {
|
|
79
|
+
throw new Error(`CallbackContext.reply: chat_id недоступен — сообщение удалено`);
|
|
80
|
+
}
|
|
81
|
+
const body = {
|
|
82
|
+
text,
|
|
83
|
+
format: options?.format,
|
|
84
|
+
attachments: options?.attachments,
|
|
85
|
+
notify: options?.notify,
|
|
86
|
+
};
|
|
87
|
+
const response = await this.api.messages.sendMessage({ chat_id: chatId, disable_link_preview: options?.disable_link_preview }, body);
|
|
88
|
+
return response.message;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Редактировать сообщение с кнопкой.
|
|
92
|
+
*/
|
|
93
|
+
async editMessage(text, options) {
|
|
94
|
+
const body = {
|
|
95
|
+
text,
|
|
96
|
+
format: options?.format,
|
|
97
|
+
attachments: options?.attachments,
|
|
98
|
+
};
|
|
99
|
+
const messageId = this.message?.body?.mid;
|
|
100
|
+
if (!messageId) {
|
|
101
|
+
throw new Error("Невозможно редактировать сообщение без message_id");
|
|
102
|
+
}
|
|
103
|
+
await this.api.messages.editMessage(messageId, body);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Удалить сообщение с кнопкой.
|
|
107
|
+
*
|
|
108
|
+
* Бросает ошибку, если сообщение было удалено до callback.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* await ctx.deleteMessage();
|
|
112
|
+
*/
|
|
113
|
+
async deleteMessage() {
|
|
114
|
+
const messageId = this.message?.body?.mid;
|
|
115
|
+
if (!messageId) {
|
|
116
|
+
throw new Error(`CallbackContext.deleteMessage: message_id недоступен — сообщение удалено`);
|
|
117
|
+
}
|
|
118
|
+
await this.api.messages.deleteMessage(messageId);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Отправить произвольное действие в чат.
|
|
122
|
+
*
|
|
123
|
+
* Распространённые значения: `"typing_on"`, `"sending_photo"`,
|
|
124
|
+
* `"sending_video"`, `"sending_audio"`, `"sending_file"`, `"mark_seen"`.
|
|
125
|
+
*
|
|
126
|
+
* Бросает ошибку, если chat_id недоступен — сообщение удалено.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* await ctx.sendAction('typing_on');
|
|
130
|
+
*/
|
|
131
|
+
async sendAction(action) {
|
|
132
|
+
const chatId = this.chatId;
|
|
133
|
+
if (!chatId) {
|
|
134
|
+
throw new Error(`CallbackContext.sendAction: chat_id недоступен — сообщение удалено`);
|
|
135
|
+
}
|
|
136
|
+
await this.api.chats.sendAction(chatId, action);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* bot.on('callback', async (ctx) => {
|
|
144
|
+
* if (ctx.has(hasCallbackPayload('confirm'))) {
|
|
145
|
+
* await ctx.answer({ notification: 'Подтверждено!' });
|
|
146
|
+
* }
|
|
147
|
+
* });
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
has(filter) {
|
|
151
|
+
return filter(this);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=CallbackContext.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { User } from "../../types/common.js";
|
|
2
|
+
import type { ChatUpdate } from "../../types/update.js";
|
|
3
|
+
import type { Context } from "../Bot.js";
|
|
4
|
+
/**
|
|
5
|
+
* Контекст системного события чата (bot_added, bot_removed, user_added, user_removed, chat_title_changed).
|
|
6
|
+
*
|
|
7
|
+
* Системные события не содержат message — для них неприменимы reply/send.
|
|
8
|
+
* Отдельный тип предотвращает runtime ошибки при обращении к message в MessageContext.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ChatContext {
|
|
11
|
+
private readonly update;
|
|
12
|
+
constructor(update: ChatUpdate);
|
|
13
|
+
/** Исходное обновление */
|
|
14
|
+
get raw(): ChatUpdate;
|
|
15
|
+
/** ID чата, в котором произошло событие */
|
|
16
|
+
get chatId(): number;
|
|
17
|
+
/** Пользователь, инициировавший событие */
|
|
18
|
+
get user(): User;
|
|
19
|
+
/** ID пользователя */
|
|
20
|
+
get userId(): number;
|
|
21
|
+
/** Является ли чат каналом */
|
|
22
|
+
get isChannel(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* bot.on('bot_added', async (ctx) => {
|
|
29
|
+
* if (ctx.has(isPrivateChat)) { ... }
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
has<R extends Context>(filter: (ctx: Context) => ctx is R): this is R;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ChatContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../../../src/bot/context/ChatContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;GAKG;AACH,qBAAa,WAAW;IAGpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAGrC,0BAA0B;IAC1B,IAAI,GAAG,IAAI,UAAU,CAEpB;IAED,2CAA2C;IAC3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,2CAA2C;IAC3C,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,sBAAsB;IACtB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,8BAA8B;IAC9B,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;;;;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,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Контекст системного события чата (bot_added, bot_removed, user_added, user_removed, chat_title_changed).
|
|
3
|
+
*
|
|
4
|
+
* Системные события не содержат message — для них неприменимы reply/send.
|
|
5
|
+
* Отдельный тип предотвращает runtime ошибки при обращении к message в MessageContext.
|
|
6
|
+
*/
|
|
7
|
+
export class ChatContext {
|
|
8
|
+
update;
|
|
9
|
+
constructor(
|
|
10
|
+
// ChatUpdate — не общий Update: типизация гарантирует chat_id и user
|
|
11
|
+
update) {
|
|
12
|
+
this.update = update;
|
|
13
|
+
}
|
|
14
|
+
/** Исходное обновление */
|
|
15
|
+
get raw() {
|
|
16
|
+
return this.update;
|
|
17
|
+
}
|
|
18
|
+
/** ID чата, в котором произошло событие */
|
|
19
|
+
get chatId() {
|
|
20
|
+
return this.update.chat_id;
|
|
21
|
+
}
|
|
22
|
+
/** Пользователь, инициировавший событие */
|
|
23
|
+
get user() {
|
|
24
|
+
return this.update.user;
|
|
25
|
+
}
|
|
26
|
+
/** ID пользователя */
|
|
27
|
+
get userId() {
|
|
28
|
+
return this.update.user.user_id;
|
|
29
|
+
}
|
|
30
|
+
/** Является ли чат каналом */
|
|
31
|
+
get isChannel() {
|
|
32
|
+
return this.update.is_channel ?? false;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* bot.on('bot_added', async (ctx) => {
|
|
40
|
+
* if (ctx.has(isPrivateChat)) { ... }
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
has(filter) {
|
|
45
|
+
return filter(this);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ChatContext.js.map
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { IBotsApi, IChatsApi, IMessagesApi, ISubscriptionsApi, IUploadsApi } from "../../api/interfaces.js";
|
|
2
|
+
import type { Attachment, Message, NewMessageBody } from "../../types/message.js";
|
|
3
|
+
import type { MessageUpdate } from "../../types/update.js";
|
|
4
|
+
import type { Context } from "../Bot.js";
|
|
5
|
+
/**
|
|
6
|
+
* API, доступные в контексте
|
|
7
|
+
*/
|
|
8
|
+
export interface ContextApi {
|
|
9
|
+
bots: IBotsApi;
|
|
10
|
+
chats: IChatsApi;
|
|
11
|
+
messages: IMessagesApi;
|
|
12
|
+
subscriptions: ISubscriptionsApi;
|
|
13
|
+
uploads: IUploadsApi;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Опции отправки сообщения
|
|
17
|
+
*/
|
|
18
|
+
export interface SendOptions {
|
|
19
|
+
format?: "markdown" | "html";
|
|
20
|
+
attachments?: NewMessageBody["attachments"];
|
|
21
|
+
notify?: boolean;
|
|
22
|
+
disable_link_preview?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Контекст сообщения.
|
|
26
|
+
*
|
|
27
|
+
* Оборачивает MessageUpdate и добавляет удобные методы для ответа.
|
|
28
|
+
* Избавляет разработчика от необходимости передавать chatId/userId в каждый метод.
|
|
29
|
+
*/
|
|
30
|
+
export declare class MessageContext {
|
|
31
|
+
private readonly update;
|
|
32
|
+
private readonly api;
|
|
33
|
+
/**
|
|
34
|
+
* Результат совпадения RegExp из `bot.hears()`.
|
|
35
|
+
*
|
|
36
|
+
* Доступен только внутри обработчика `hears()` с RegExp-паттерном.
|
|
37
|
+
* Содержит полный `RegExpExecArray`: `ctx.match[0]` — полное совпадение,
|
|
38
|
+
* `ctx.match[1]`, `ctx.match[2]`, ... — группы захвата.
|
|
39
|
+
*
|
|
40
|
+
* `null` если обработчик вызван не через `hears()` или паттерн — строка.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* bot.hears(/(\d+)/, async (ctx) => {
|
|
44
|
+
* if (isMessageContext(ctx)) console.log(ctx.match?.[1]); // первая группа
|
|
45
|
+
* });
|
|
46
|
+
*/
|
|
47
|
+
match: RegExpExecArray | null;
|
|
48
|
+
constructor(update: MessageUpdate, api: ContextApi);
|
|
49
|
+
/** Исходное обновление */
|
|
50
|
+
get raw(): MessageUpdate;
|
|
51
|
+
/** Сообщение */
|
|
52
|
+
get message(): Message;
|
|
53
|
+
/** Текст сообщения */
|
|
54
|
+
get text(): string | undefined;
|
|
55
|
+
/** ID сообщения. null если сообщение не содержит body (например, пересланное без текста). */
|
|
56
|
+
get messageId(): string | null;
|
|
57
|
+
/** ID чата (если сообщение из чата) */
|
|
58
|
+
get chatId(): number | null;
|
|
59
|
+
/** ID отправителя */
|
|
60
|
+
get senderId(): number | undefined;
|
|
61
|
+
/** Имя отправителя */
|
|
62
|
+
get senderName(): string | undefined;
|
|
63
|
+
/** Username отправителя */
|
|
64
|
+
get senderUsername(): string | null | undefined;
|
|
65
|
+
/** Локаль пользователя */
|
|
66
|
+
get locale(): string | null;
|
|
67
|
+
/** Тип чата */
|
|
68
|
+
get chatType(): "chat" | "dialog";
|
|
69
|
+
/** Это личное сообщение? */
|
|
70
|
+
get isPrivate(): boolean;
|
|
71
|
+
/** Это сообщение в группе? */
|
|
72
|
+
get isGroup(): boolean;
|
|
73
|
+
/** Вложения сообщения */
|
|
74
|
+
get attachments(): Attachment[] | null;
|
|
75
|
+
/**
|
|
76
|
+
* Ответить на сообщение.
|
|
77
|
+
*
|
|
78
|
+
* Бросает ошибку, если chat_id недоступен — это защищает от молчаливого падения если message.recipient не содержит chat_id.
|
|
79
|
+
*/
|
|
80
|
+
reply(text: string, options?: SendOptions): Promise<Message>;
|
|
81
|
+
/**
|
|
82
|
+
* Ответить с цитированием исходного сообщения.
|
|
83
|
+
*
|
|
84
|
+
* Бросает ошибку, если chat_id или mid недоступны.
|
|
85
|
+
*/
|
|
86
|
+
replyWithQuote(text: string, options?: SendOptions): Promise<Message>;
|
|
87
|
+
/**
|
|
88
|
+
* Отправить действие "печатает..." в чат.
|
|
89
|
+
*
|
|
90
|
+
* Бросает ошибку, если chat_id недоступен — согласован со стилем reply().
|
|
91
|
+
*/
|
|
92
|
+
sendTyping(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Отправить произвольное действие в чат.
|
|
95
|
+
*
|
|
96
|
+
* Распространённые значения: `"typing_on"`, `"sending_photo"`,
|
|
97
|
+
* `"sending_video"`, `"sending_audio"`, `"sending_file"`, `"mark_seen"`.
|
|
98
|
+
*
|
|
99
|
+
* Бросает ошибку, если chat_id недоступен.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* await ctx.sendAction('sending_photo');
|
|
103
|
+
*/
|
|
104
|
+
sendAction(action: string): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Редактировать текущее сообщение.
|
|
107
|
+
*
|
|
108
|
+
* Бросает ошибку, если message_id недоступен.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* await ctx.editMessage('Обновлённый текст');
|
|
112
|
+
*/
|
|
113
|
+
editMessage(text: string, options?: SendOptions): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Удалить текущее сообщение.
|
|
116
|
+
*
|
|
117
|
+
* Бросает ошибку, если message_id недоступен.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* await ctx.deleteMessage();
|
|
121
|
+
*/
|
|
122
|
+
deleteMessage(): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
125
|
+
*
|
|
126
|
+
* Принимает предикат-фильтр и возвращает `true`, если данный контекст
|
|
127
|
+
* удовлетворяет условию. TypeScript автоматически суживает тип внутри
|
|
128
|
+
* блока `if` до более конкретного.
|
|
129
|
+
*
|
|
130
|
+
* @example С predicate из filters
|
|
131
|
+
* ```ts
|
|
132
|
+
* bot.on('message', async (ctx) => {
|
|
133
|
+
* if (ctx.has(hasText)) {
|
|
134
|
+
* console.log(ctx.text.toUpperCase()); // ctx.text: string (не undefined)
|
|
135
|
+
* }
|
|
136
|
+
* });
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @example Произвольный предикат
|
|
140
|
+
* ```ts
|
|
141
|
+
* const isAdmin = (ctx: Context): ctx is MessageContext =>
|
|
142
|
+
* isMessageContext(ctx) && ctx.senderId === ADMIN_ID;
|
|
143
|
+
*
|
|
144
|
+
* if (ctx.has(isAdmin)) { ... }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
has<R extends Context>(filter: (ctx: Context) => ctx is R): this is R;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=MessageContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageContext.d.ts","sourceRoot":"","sources":["../../../../src/bot/context/MessageContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Контекст сообщения.
|
|
3
|
+
*
|
|
4
|
+
* Оборачивает MessageUpdate и добавляет удобные методы для ответа.
|
|
5
|
+
* Избавляет разработчика от необходимости передавать chatId/userId в каждый метод.
|
|
6
|
+
*/
|
|
7
|
+
export class MessageContext {
|
|
8
|
+
update;
|
|
9
|
+
api;
|
|
10
|
+
/**
|
|
11
|
+
* Результат совпадения RegExp из `bot.hears()`.
|
|
12
|
+
*
|
|
13
|
+
* Доступен только внутри обработчика `hears()` с RegExp-паттерном.
|
|
14
|
+
* Содержит полный `RegExpExecArray`: `ctx.match[0]` — полное совпадение,
|
|
15
|
+
* `ctx.match[1]`, `ctx.match[2]`, ... — группы захвата.
|
|
16
|
+
*
|
|
17
|
+
* `null` если обработчик вызван не через `hears()` или паттерн — строка.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* bot.hears(/(\d+)/, async (ctx) => {
|
|
21
|
+
* if (isMessageContext(ctx)) console.log(ctx.match?.[1]); // первая группа
|
|
22
|
+
* });
|
|
23
|
+
*/
|
|
24
|
+
match = null;
|
|
25
|
+
constructor(
|
|
26
|
+
// MessageUpdate — не общий Update: типизация гарантирует наличие поля message
|
|
27
|
+
update, api) {
|
|
28
|
+
this.update = update;
|
|
29
|
+
this.api = api;
|
|
30
|
+
}
|
|
31
|
+
/** Исходное обновление */
|
|
32
|
+
get raw() {
|
|
33
|
+
return this.update;
|
|
34
|
+
}
|
|
35
|
+
/** Сообщение */
|
|
36
|
+
get message() {
|
|
37
|
+
return this.update.message;
|
|
38
|
+
}
|
|
39
|
+
/** Текст сообщения */
|
|
40
|
+
get text() {
|
|
41
|
+
return this.message.body?.text;
|
|
42
|
+
}
|
|
43
|
+
/** ID сообщения. null если сообщение не содержит body (например, пересланное без текста). */
|
|
44
|
+
get messageId() {
|
|
45
|
+
return this.message.body?.mid ?? null;
|
|
46
|
+
}
|
|
47
|
+
/** ID чата (если сообщение из чата) */
|
|
48
|
+
get chatId() {
|
|
49
|
+
return this.message.recipient.chat_id;
|
|
50
|
+
}
|
|
51
|
+
/** ID отправителя */
|
|
52
|
+
get senderId() {
|
|
53
|
+
return this.message.sender?.user_id;
|
|
54
|
+
}
|
|
55
|
+
/** Имя отправителя */
|
|
56
|
+
get senderName() {
|
|
57
|
+
const sender = this.message.sender;
|
|
58
|
+
if (!sender)
|
|
59
|
+
return undefined;
|
|
60
|
+
if (sender.last_name) {
|
|
61
|
+
return `${sender.first_name} ${sender.last_name}`;
|
|
62
|
+
}
|
|
63
|
+
return sender.first_name;
|
|
64
|
+
}
|
|
65
|
+
/** Username отправителя */
|
|
66
|
+
get senderUsername() {
|
|
67
|
+
return this.message.sender?.username;
|
|
68
|
+
}
|
|
69
|
+
/** Локаль пользователя */
|
|
70
|
+
get locale() {
|
|
71
|
+
return this.update.user_locale ?? null;
|
|
72
|
+
}
|
|
73
|
+
/** Тип чата */
|
|
74
|
+
get chatType() {
|
|
75
|
+
return this.message.recipient.chat_type;
|
|
76
|
+
}
|
|
77
|
+
/** Это личное сообщение? */
|
|
78
|
+
get isPrivate() {
|
|
79
|
+
return this.chatType === "dialog";
|
|
80
|
+
}
|
|
81
|
+
/** Это сообщение в группе? */
|
|
82
|
+
get isGroup() {
|
|
83
|
+
return this.chatType === "chat";
|
|
84
|
+
}
|
|
85
|
+
/** Вложения сообщения */
|
|
86
|
+
get attachments() {
|
|
87
|
+
return this.message.body?.attachments ?? null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Ответить на сообщение.
|
|
91
|
+
*
|
|
92
|
+
* Бросает ошибку, если chat_id недоступен — это защищает от молчаливого падения если message.recipient не содержит chat_id.
|
|
93
|
+
*/
|
|
94
|
+
async reply(text, options) {
|
|
95
|
+
const chatId = this.chatId;
|
|
96
|
+
if (!chatId) {
|
|
97
|
+
throw new Error(`MessageContext.reply: chat_id недоступен для этого обновления`);
|
|
98
|
+
}
|
|
99
|
+
const body = {
|
|
100
|
+
text,
|
|
101
|
+
format: options?.format,
|
|
102
|
+
attachments: options?.attachments,
|
|
103
|
+
notify: options?.notify,
|
|
104
|
+
};
|
|
105
|
+
const response = await this.api.messages.sendMessage({ chat_id: chatId, disable_link_preview: options?.disable_link_preview }, body);
|
|
106
|
+
return response.message;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Ответить с цитированием исходного сообщения.
|
|
110
|
+
*
|
|
111
|
+
* Бросает ошибку, если chat_id или mid недоступны.
|
|
112
|
+
*/
|
|
113
|
+
async replyWithQuote(text, options) {
|
|
114
|
+
const chatId = this.chatId;
|
|
115
|
+
if (!chatId) {
|
|
116
|
+
throw new Error(`MessageContext.replyWithQuote: chat_id недоступен для этого обновления`);
|
|
117
|
+
}
|
|
118
|
+
const mid = this.messageId;
|
|
119
|
+
if (!mid) {
|
|
120
|
+
throw new Error(`MessageContext.replyWithQuote: message_id недоступен — сообщение не содержит body`);
|
|
121
|
+
}
|
|
122
|
+
const body = {
|
|
123
|
+
text,
|
|
124
|
+
format: options?.format,
|
|
125
|
+
attachments: options?.attachments,
|
|
126
|
+
notify: options?.notify,
|
|
127
|
+
link: {
|
|
128
|
+
type: "reply",
|
|
129
|
+
mid,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
const response = await this.api.messages.sendMessage({ chat_id: chatId, disable_link_preview: options?.disable_link_preview }, body);
|
|
133
|
+
return response.message;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Отправить действие "печатает..." в чат.
|
|
137
|
+
*
|
|
138
|
+
* Бросает ошибку, если chat_id недоступен — согласован со стилем reply().
|
|
139
|
+
*/
|
|
140
|
+
async sendTyping() {
|
|
141
|
+
await this.sendAction("typing_on");
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Отправить произвольное действие в чат.
|
|
145
|
+
*
|
|
146
|
+
* Распространённые значения: `"typing_on"`, `"sending_photo"`,
|
|
147
|
+
* `"sending_video"`, `"sending_audio"`, `"sending_file"`, `"mark_seen"`.
|
|
148
|
+
*
|
|
149
|
+
* Бросает ошибку, если chat_id недоступен.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* await ctx.sendAction('sending_photo');
|
|
153
|
+
*/
|
|
154
|
+
async sendAction(action) {
|
|
155
|
+
const chatId = this.chatId;
|
|
156
|
+
if (!chatId) {
|
|
157
|
+
throw new Error(`MessageContext.sendAction: chat_id недоступен для этого обновления`);
|
|
158
|
+
}
|
|
159
|
+
await this.api.chats.sendAction(chatId, action);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Редактировать текущее сообщение.
|
|
163
|
+
*
|
|
164
|
+
* Бросает ошибку, если message_id недоступен.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* await ctx.editMessage('Обновлённый текст');
|
|
168
|
+
*/
|
|
169
|
+
async editMessage(text, options) {
|
|
170
|
+
const mid = this.messageId;
|
|
171
|
+
if (!mid) {
|
|
172
|
+
throw new Error(`MessageContext.editMessage: message_id недоступен — сообщение не содержит body`);
|
|
173
|
+
}
|
|
174
|
+
const body = {
|
|
175
|
+
text,
|
|
176
|
+
format: options?.format,
|
|
177
|
+
attachments: options?.attachments,
|
|
178
|
+
};
|
|
179
|
+
await this.api.messages.editMessage(mid, body);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Удалить текущее сообщение.
|
|
183
|
+
*
|
|
184
|
+
* Бросает ошибку, если message_id недоступен.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* await ctx.deleteMessage();
|
|
188
|
+
*/
|
|
189
|
+
async deleteMessage() {
|
|
190
|
+
const mid = this.messageId;
|
|
191
|
+
if (!mid) {
|
|
192
|
+
throw new Error(`MessageContext.deleteMessage: message_id недоступен — сообщение не содержит body`);
|
|
193
|
+
}
|
|
194
|
+
await this.api.messages.deleteMessage(mid);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Проверить тип контекста с сужением типа (type narrowing).
|
|
198
|
+
*
|
|
199
|
+
* Принимает предикат-фильтр и возвращает `true`, если данный контекст
|
|
200
|
+
* удовлетворяет условию. TypeScript автоматически суживает тип внутри
|
|
201
|
+
* блока `if` до более конкретного.
|
|
202
|
+
*
|
|
203
|
+
* @example С predicate из filters
|
|
204
|
+
* ```ts
|
|
205
|
+
* bot.on('message', async (ctx) => {
|
|
206
|
+
* if (ctx.has(hasText)) {
|
|
207
|
+
* console.log(ctx.text.toUpperCase()); // ctx.text: string (не undefined)
|
|
208
|
+
* }
|
|
209
|
+
* });
|
|
210
|
+
* ```
|
|
211
|
+
*
|
|
212
|
+
* @example Произвольный предикат
|
|
213
|
+
* ```ts
|
|
214
|
+
* const isAdmin = (ctx: Context): ctx is MessageContext =>
|
|
215
|
+
* isMessageContext(ctx) && ctx.senderId === ADMIN_ID;
|
|
216
|
+
*
|
|
217
|
+
* if (ctx.has(isAdmin)) { ... }
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
has(filter) {
|
|
221
|
+
return filter(this);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=MessageContext.js.map
|