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
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2258791
Create KBaseRequest, RequestParameterDelegate & rewrite CreateInvoice…
anfanik Dec 8, 2024
ce459be
Add subscription_period & business_connection_id to CreateInvoiceLink
anfanik Dec 8, 2024
4e09377
Rewrite SuccessfulPayment to Kotlin
anfanik Dec 8, 2024
9095f8c
Add subscriptionExpirationDate, isRecurring and isFirstRecurring fiel…
anfanik Dec 8, 2024
4615f50
Create EditUserStarSubscription
anfanik Dec 8, 2024
3795fbd
Add subscription_period to TransactionPartnerUser
anfanik Dec 8, 2024
6947080
Create SetUserEmojiStatus
anfanik Dec 8, 2024
4bc46db
Create SavePreparedInlineMessage & PreparedInlineMessage
anfanik Dec 8, 2024
72dfc25
Create GetAvailableGifts & Gift
anfanik Dec 8, 2024
e125006
Create SendGift
anfanik Dec 8, 2024
71ae890
Add gift field to TransactionPartnerUser
anfanik Dec 8, 2024
d1d11eb
Fix test & remove @JvmName annotations from CreateInvoiceLink fields
anfanik Dec 8, 2024
1ec5a87
Fix ResponseTest: disable default constructor & toString checks for K…
anfanik Dec 8, 2024
0d098b5
Add Java-style builder methods for optional parameters in SavePrepare…
anfanik Jan 22, 2025
110dff3
Fix parameter names for EditUserStarSubscription, SavePreparedInlineM…
anfanik Jan 22, 2025
2b05eee
Convert field name to snake_case in RequestParameterDelegate & remove…
anfanik Jan 22, 2025
385dbc1
Add nanostar_amount to StarTransaction
anfanik Dec 8, 2024
9ba9048
Rewrite TransactionPartners to Kotlin
anfanik Dec 8, 2024
951b334
Create TransactionPartnerAffiliateProgram
anfanik Dec 8, 2024
03542b8
Add affiliate field to TransactionPartnerUser & create AffiliateInfo
anfanik Dec 8, 2024
c49c39c
Fix user_id parameter in SavePreparedInlineMessage
anfanik Jan 22, 2025
e434e8c
Add TelegramAware interface, add request-specific extensions
anfanik Jan 22, 2025
c9c33c1
Add RequestPreprocessor
anfanik Jan 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ dependencies {
testImplementation 'junit:junit:4.13.1'
testImplementation 'nl.jqno.equalsverifier:equalsverifier:3.1.13'
testImplementation 'org.reflections:reflections:0.9.12'
testImplementation 'org.jetbrains.kotlin:kotlin-reflect'
}

jar {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.pengrad.telegrambot

import com.pengrad.telegrambot.request.BaseRequest
import com.pengrad.telegrambot.response.BaseResponse

@get:JvmName("getEmptyRequestPreprocessor")
val EMPTY_REQUEST_PREPROCESSOR: RequestPreprocessor = object : RequestPreprocessor {
override fun <REQ : BaseRequest<REQ, RES>, RES : BaseResponse> process(request: BaseRequest<REQ, RES>) {
// do nothing
}
}

interface RequestPreprocessor {

fun <REQ : BaseRequest<REQ, RES>, RES : BaseResponse> process(request: BaseRequest<REQ, RES>)

}
10 changes: 10 additions & 0 deletions library/src/main/java/com/pengrad/telegrambot/TelegramAware.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.pengrad.telegrambot

import com.pengrad.telegrambot.request.BaseRequest
import com.pengrad.telegrambot.response.BaseResponse

interface TelegramAware {

fun <REQ : BaseRequest<REQ, RES>, RES : BaseResponse> execute(request: BaseRequest<REQ, RES>): RES

}
19 changes: 17 additions & 2 deletions library/src/main/java/com/pengrad/telegrambot/TelegramBot.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,27 @@
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.TimeUnit;

import static com.pengrad.telegrambot.RequestPreprocessorKt.getEmptyRequestPreprocessor;

/**
* Stas Parshin
* 16 October 2015
*/
public class TelegramBot {
public class TelegramBot implements TelegramAware {

private final String token;
private final TelegramBotClient api;
private final FileApi fileApi;
private final UpdatesHandler updatesHandler;
private final RequestPreprocessor requestPreprocessor;

public TelegramBot(String botToken) {
this(new Builder(botToken));
Expand All @@ -39,13 +43,17 @@ public TelegramBot(String botToken) {
this.api = builder.api;
this.fileApi = builder.fileApi;
this.updatesHandler = builder.updatesHandler;
this.requestPreprocessor = builder.requestPreprocessor;
}

public <T extends BaseRequest<T, R>, R extends BaseResponse> R execute(BaseRequest<T, R> request) {
@NotNull
public <T extends BaseRequest<T, R>, R extends BaseResponse> R execute(@NotNull BaseRequest<T, R> request) {
requestPreprocessor.process(request);
return api.send(request);
}

public <T extends BaseRequest<T, R>, R extends BaseResponse> Cancellable execute(T request, Callback<T, R> callback) {
requestPreprocessor.process(request);
return api.send(request, callback);
}

Expand Down Expand Up @@ -98,6 +106,7 @@ public static final class Builder {
private FileApi fileApi;
private TelegramBotClient api;
private UpdatesHandler updatesHandler;
private RequestPreprocessor requestPreprocessor;

private OkHttpClient okHttpClient;
private String apiUrl;
Expand All @@ -109,6 +118,7 @@ public Builder(String botToken) {
api = new TelegramBotClient(client(null), gson(), apiUrl(API_URL, botToken, useTestServer));
fileApi = new FileApi(botToken);
updatesHandler = new UpdatesHandler(100);
requestPreprocessor = getEmptyRequestPreprocessor();
}

public Builder debug() {
Expand Down Expand Up @@ -141,6 +151,11 @@ public Builder useTestServer(boolean useTestServer) {
return this;
}

public Builder requestPreprocessor(RequestPreprocessor requestPreprocessor) {
this.requestPreprocessor = requestPreprocessor;
return this;
}

public TelegramBot build() {
if (okHttpClient != null || apiUrl != null) {
OkHttpClient client = okHttpClient != null ? okHttpClient : client(null);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.pengrad.telegrambot.model

data class PreparedInlineMessage(
@get:JvmName("id") val id: String,
@get:JvmName("expirationDate") val expirationDate: Int
)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.pengrad.telegrambot.model

data class SuccessfulPayment(
@get:JvmName("currency") val currency: String,
@get:JvmName("totalAmount") val totalAmount: Int,
@get:JvmName("invoicePayload") val invoicePayload: String,
@get:JvmName("subscriptionExpirationDate") val subscriptionExpirationDate: Int? = null,
@get:JvmName("isRecurring") val isRecurring: Boolean? = null,
@get:JvmName("isFirstRecurring") val isFirstRecurring: Boolean? = null,
@get:JvmName("shippingOptionId") val shippingOptionId: String? = null,
@get:JvmName("orderInfo") val orderInfo: OrderInfo? = null,
@get:JvmName("telegramPaymentChargeId") val telegramPaymentChargeId: String,
@get:JvmName("providerPaymentChargeId") val providerPaymentChargeId: String
)
11 changes: 11 additions & 0 deletions library/src/main/java/com/pengrad/telegrambot/model/gift/Gift.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.pengrad.telegrambot.model.gift

import com.pengrad.telegrambot.model.Sticker

data class Gift(
@get:JvmName("id") val id: String,
@get:JvmName("sticker") val sticker: Sticker,
@get:JvmName("starCount") val starCount: Int,
@get:JvmName("totalCount") val totalCount: Int,
@get:JvmName("remainingCount") val remainingCount: Int
)
18 changes: 18 additions & 0 deletions library/src/main/java/com/pengrad/telegrambot/model/gift/Gifts.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.pengrad.telegrambot.model.gift

data class Gifts(
@get:JvmName("gifts") val gifts: Array<Gift>
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Gifts) return false

if (!gifts.contentEquals(other.gifts)) return false

return true
}

override fun hashCode(): Int {
return gifts.contentHashCode()
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.pengrad.telegrambot.model.stars

import com.pengrad.telegrambot.model.stars.partner.TransactionPartner

data class StarTransaction(
@get:JvmName("id") val id: String,
@get:JvmName("amount") val amount: Int,
@get:JvmName("nanostarAmount") val nanostarAmount: Int? = null,
@get:JvmName("date") val date: Int,
@get:JvmName("source") val source: TransactionPartner? = null,
@get:JvmName("receiver") val receiver: TransactionPartner? = null
)

This file was deleted.

Loading
Loading