Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add API method-specific extension functions #412

Merged
merged 23 commits into from
Jan 26, 2025
Merged

Conversation

anfanik
Copy link
Collaborator

@anfanik anfanik commented Jan 22, 2025

This pull request adds method-specific functions. (originally from sktb-spring-boot-starter)
It's my vision of a Kotlin-way API usage.

It based on #409 and #408 and there are only two diffs: 5a994fa, 25ade71

It looks similar to #331, but without breaking changes and moving client-specific logic to request classes

Added:

  • TelegramAware interface
    All extensions are made for this interface.

    Use case:
    sktb-spring-boot-starter has a TelegramBot wrapper – TelegramService.kt

    This interface allows to implement it and use all extensions even in wrapper.

  • Extension for API methods (what I use most often in my projects, todo: add extensions for every method in furture releases)

    Example:

    You can use:

    telegram.sendMessage(chatId = "anfanik", text = "Hello world!") {
        parseMode(ParseMode.HTML)
    }

    or general execute function for not-implemented API methods:

    telegram.execute(SendMessage("anfanik", "Hello world!")) {
        parseMode(ParseMode.HTML)
    }

    instead of more complex or Java-style usages:

    telegram.execute(SendMessage("anfanik", "Hello world!").apply {
        parseMode(ParseMode.HTML)
    })
    
    telegram.execute(SendMessage("anfanik", "Hello world!").parseMode(ParseMode.HTML))

    With the Request Property Delegates (Bot API v8.0 #408), it will allow to build requests by setting properties, for example:

    telegram.sendMessage(chatId = "anfanik", text = "Hello world!") {
        parseMode = ParseMode.HTML
        replyMarkup = InlineKeyboardMarkup()
        ...
    }
  • RequestPreprocessor interface
    A functional interface. It should be called before any request execution.
    By default, it does nothing, but it can be used to modify request before execution.

    Use case:
    sktb-spring-boot-starter has a FormatUtility with default formatting options – FormatUtility.kt

    This formatting settings are applied in extension functions by default in TelegramAwareExtension.kt

    RequestPreprocessor makes possible to apply sktb-default formatting options and still use buildin extensions

Copy link
Owner

@pengrad pengrad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great!
Seems enough to merge only this one as it contains both v8 and v8.1

@pengrad pengrad merged commit 0a73c2c into master Jan 26, 2025
1 check passed
@anfanik anfanik deleted the request_extension branch January 31, 2025 06:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants