diff --git a/CHANGELOG.md b/CHANGELOG.md index 53b5f82..08fdf33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 1.23.1 + +- Exposed couple of more properties in Context +- Added `Bot.additionalInfo` +- Documentation website is up. + # 1.23.0 - 🤖 Bot API 7.8 @@ -71,7 +77,7 @@ - 🥳 Support for Custom Context - Added detailed - [usage documentation for custom context here](https://televerse.web.app/doc/custom-context). + [usage documentation for custom context here](https://televerse.xooniverse.com/advanced/custom-context.html). - The custom context feature allows you to extend the base functionality of your bot by using your own custom context classes. - Added `Bot.contextBuilder` method diff --git a/README.md b/README.md index 25b5cfc..ef3f7c4 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ With the new `Bot.contextBuilder` method, you can define specialized context constructors to create context objects with personalized behaviors and capabilities. This update allows you to tailor your bot's responses, handle complex workflows, and integrate additional features seamlessly. -[Read more here.](https://televerse.xooniverse.com/doc/custom-context) +[Read more here.](https://televerse.xooniverse.com/advanced/custom-context.html)
diff --git a/lib/src/televerse/bot/bot.dart b/lib/src/televerse/bot/bot.dart index 1df4f69..bb69b13 100644 --- a/lib/src/televerse/bot/bot.dart +++ b/lib/src/televerse/bot/bot.dart @@ -31,6 +31,7 @@ class Bot { /// Options to configure the logger. final LoggerOptions? _loggerOptions; + /// Acts as the dfault error handler void _defaultErrorHandler(BotError err) { print("‼️ An error occurred while processing the update."); if (err.sourceIsMiddleware) { @@ -48,6 +49,7 @@ class Bot { _report(); } + /// Prints the issue reporting statement static void _report() { print("---------------------"); print( @@ -162,7 +164,7 @@ class Bot { } /// Handles the error in initial `getMe` call - Future _thenHandleGetMeError(Object err, StackTrace st) async { + Future _handleTheGetMeError(Object err, StackTrace st) async { if (err is DioException) { if (err.type == DioExceptionType.connectionTimeout || err.type == DioExceptionType.receiveTimeout || @@ -244,7 +246,7 @@ class Bot { try { await getMe(); } catch (err, st) { - _thenHandleGetMeError(err, st); + _handleTheGetMeError(err, st); } // Set instance variable _instance = this; @@ -403,6 +405,11 @@ class Bot { } } + /// Additional infomration on the bot + /// + /// This space can be used for plugins or any other utilities to improve user experience + final Map additionalInfo = {}; + /// List of Handler Scopes final List> _handlerScopes = []; @@ -485,7 +492,7 @@ class Bot { /// bot.contextBuilder(MyCustomContext.new); /// ``` /// - /// For detailed usage instructions and examples, visit the [Custom Context Documentation](https://televerse.web.app/doc/custom-context). + /// For detailed usage instructions and examples, visit the [Custom Context Documentation](https://televerse.xooniverse.com/advanced/custom-context.html). void contextBuilder(ContextConstructor constructor) { _usingCustomContext = true; _contextConstructor = constructor; @@ -550,7 +557,7 @@ class Bot { "If you still encounter issues, make sure that your custom context class extends `Context` " "and its constructor matches the required parameters:\n\n" " MyContext({required super.api, required super.me, required super.update});\n" - "📖 Check out the complete usage documentation here: https://televerse.web.app/doc/custom-context\n", + "📖 Check out the complete usage documentation here: https://televerse.xooniverse.com/advanced/custom-context.html \n", ); } @@ -578,7 +585,9 @@ class Bot { /// This method simply initalizes the bot - performs the initial getMe request /// to fill the `bot.me` property. Future init() async { - await _initializeBot(); + if (!initialized) { + await _initializeBot(); + } } /// Start polling or webhook listener for fetching updates. diff --git a/lib/src/televerse/context/context.dart b/lib/src/televerse/context/context.dart index 881e49a..3dc16c7 100644 --- a/lib/src/televerse/context/context.dart +++ b/lib/src/televerse/context/context.dart @@ -96,6 +96,11 @@ class Context { msg?.sticker?.fileId; } + /// The File ID if the incoming message contains a File of any kind. + /// + /// This includes Photo, Animation, Audio, Document, Video, Video Note, Voice, or Sticker + String? get fileId => _fileId; + /// The Chat ID for internal use int? get _chatId { return chat?.id; @@ -109,12 +114,20 @@ class Context { callbackQuery?.message?.messageId; } + /// The Message ID of the incoming message. + int? get messageId => _msgId; + /// Internal getter for inline message id String? get _inlineMsgId { return callbackQuery?.inlineMessageId ?? chosenInlineResult?.inlineMessageId; } + /// Inline Message ID from the incoming update. + /// + /// This can be Inline Message ID from a Callback Query generated from an inline message or Chosen Inline Result. + String? get inlineMessageId => _inlineMsgId; + /// Executes the middleware on the current context Future use(MiddlewareBase middleware) async { if (middleware is Middleware) { diff --git a/lib/src/televerse/models/telegram_exception.dart b/lib/src/televerse/models/telegram_exception.dart index 0bc6197..775c3a2 100644 --- a/lib/src/televerse/models/telegram_exception.dart +++ b/lib/src/televerse/models/telegram_exception.dart @@ -67,4 +67,13 @@ class TelegramException implements Exception { stackTrace: stackTrace, ); } + + /// Returns the JSON encodable Map + Map toJson() { + return { + "error_code": code, + "description": description, + "parameters": parameters?.toJson(), + }..removeWhere((_, v) => v != null); + } } diff --git a/lib/televerse.dart b/lib/televerse.dart index c635868..ba46267 100644 --- a/lib/televerse.dart +++ b/lib/televerse.dart @@ -35,25 +35,35 @@ export 'src/televerse/links/links.dart'; export 'src/televerse/models/models.dart'; export 'src/types/types.dart'; +// Bot & API part 'src/televerse/api/raw_api.dart'; part 'src/televerse/bot/bot.dart'; + +// Context part 'src/televerse/context/constructor.dart'; part 'src/televerse/context/context.dart'; part 'src/televerse/context/methods.dart'; part 'src/televerse/context/properties.dart'; + +// The On Method part 'src/televerse/filters/filters.dart'; part 'src/televerse/filters/on.dart'; + +// Keyboards & Menus part 'src/televerse/markups/inline_keyboard.dart'; part 'src/televerse/markups/inline_menu.dart'; part 'src/televerse/markups/keyboard.dart'; part 'src/televerse/markups/keyboard_menu.dart'; part 'src/televerse/markups/menu.dart'; + +// Other utilities part 'src/televerse/models/logger_options.dart'; part 'src/televerse/models/multipart_helper.dart'; part 'src/utils/date.dart'; part 'src/utils/http.dart'; part 'src/utils/utils.dart'; +// Fetchers part 'src/televerse/fetch/fetch.dart'; part 'src/televerse/fetch/long_polling.dart'; part 'src/televerse/fetch/webhook.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 0d53331..df9e513 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: televerse description: Televerse lets you create your own efficient Telegram bots with ease in Dart. Supports latest Telegram Bot API - 7.8! -version: 1.23.0 +version: 1.23.1 homepage: https://televerse.xooniverse.com repository: https://github.com/xooniverse/televerse topics: