Skip to content

Commit 5a994fa

Browse files
committed
Add TelegramAware interface, add request-specific extensions
1 parent efe42f6 commit 5a994fa

17 files changed

+289
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.pengrad.telegrambot
2+
3+
import com.pengrad.telegrambot.request.BaseRequest
4+
import com.pengrad.telegrambot.response.BaseResponse
5+
6+
interface TelegramAware {
7+
8+
fun <REQ : BaseRequest<REQ, RES>, RES : BaseResponse> execute(request: BaseRequest<REQ, RES>): RES
9+
10+
}

library/src/main/java/com/pengrad/telegrambot/TelegramBot.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import okhttp3.Interceptor;
1313
import okhttp3.OkHttpClient;
1414
import okhttp3.logging.HttpLoggingInterceptor;
15+
import org.jetbrains.annotations.NotNull;
1516

1617
import java.io.IOException;
1718
import java.io.InputStream;
@@ -23,7 +24,7 @@
2324
* Stas Parshin
2425
* 16 October 2015
2526
*/
26-
public class TelegramBot {
27+
public class TelegramBot implements TelegramAware {
2728

2829
private final String token;
2930
private final TelegramBotClient api;
@@ -41,7 +42,8 @@ public TelegramBot(String botToken) {
4142
this.updatesHandler = builder.updatesHandler;
4243
}
4344

44-
public <T extends BaseRequest<T, R>, R extends BaseResponse> R execute(BaseRequest<T, R> request) {
45+
@NotNull
46+
public <T extends BaseRequest<T, R>, R extends BaseResponse> R execute(@NotNull BaseRequest<T, R> request) {
4547
return api.send(request);
4648
}
4749

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.BaseRequest
5+
import com.pengrad.telegrambot.response.BaseResponse
6+
7+
inline fun <T : BaseRequest<T, R>, R : BaseResponse> TelegramAware.execute(
8+
request: T,
9+
modifier: T.() -> Unit = {}
10+
): R = execute(request.apply(modifier))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.AnswerCallbackQuery
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.answerCallbackQuery(
8+
callbackQueryId: String,
9+
modifier: AnswerCallbackQuery.() -> Unit = {}
10+
) = this.execute(AnswerCallbackQuery(callbackQueryId), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.AnswerPreCheckoutQuery
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.answerPreCheckoutQuery(
8+
preCheckoutId: String,
9+
modifier: AnswerPreCheckoutQuery.() -> Unit = {}
10+
) = this.execute(AnswerPreCheckoutQuery(preCheckoutId), modifier)
11+
12+
inline fun TelegramAware.answerPreCheckoutQuery(
13+
preCheckoutId: String,
14+
errorMessage: String,
15+
modifier: AnswerPreCheckoutQuery.() -> Unit = {}
16+
) = this.execute(AnswerPreCheckoutQuery(preCheckoutId, errorMessage), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.DeleteMessage
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.deleteMessage(
8+
chatId: Long,
9+
messageId: Int,
10+
modifier: DeleteMessage.() -> Unit = {}
11+
) = this.execute(DeleteMessage(chatId, messageId), modifier)
12+
13+
inline fun TelegramAware.deleteMessage(
14+
chatId: String,
15+
messageId: Int,
16+
modifier: DeleteMessage.() -> Unit = {}
17+
) = this.execute(DeleteMessage(chatId, messageId), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.EditMessageCaption
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.editMessageCaption(
8+
chatId: Long,
9+
messageId: Int,
10+
caption: String,
11+
modifier: EditMessageCaption.() -> Unit = {}
12+
) = this.execute(EditMessageCaption(chatId, messageId)) {
13+
caption(caption)
14+
modifier()
15+
}
16+
17+
inline fun TelegramAware.editMessageCaption(
18+
chatId: String,
19+
messageId: Int,
20+
caption: String,
21+
modifier: EditMessageCaption.() -> Unit = {}
22+
) = this.execute(EditMessageCaption(chatId, messageId)) {
23+
caption(caption)
24+
modifier()
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.model.request.InputMedia
5+
import com.pengrad.telegrambot.request.EditMessageMedia
6+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
7+
8+
inline fun TelegramAware.editMessageMedia(
9+
chatId: Long,
10+
messageId: Int,
11+
media: InputMedia<*>,
12+
modifier: EditMessageMedia.() -> Unit = {}
13+
) = this.execute(EditMessageMedia(chatId, messageId, media), modifier)
14+
15+
inline fun TelegramAware.editMessageMedia(
16+
chatId: String,
17+
messageId: Int,
18+
media: InputMedia<*>,
19+
modifier: EditMessageMedia.() -> Unit = {}
20+
) = this.execute(EditMessageMedia(chatId, messageId, media), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup
5+
import com.pengrad.telegrambot.request.EditMessageReplyMarkup
6+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
7+
8+
inline fun TelegramAware.editMessageReplyMarkup(
9+
chatId: Long,
10+
messageId: Int,
11+
modifier: EditMessageReplyMarkup.() -> Unit = {}
12+
) = this.execute(EditMessageReplyMarkup(chatId, messageId), modifier)
13+
14+
inline fun TelegramAware.editMessageReplyMarkup(
15+
chatId: String,
16+
messageId: Int,
17+
modifier: EditMessageReplyMarkup.() -> Unit = {}
18+
) = this.execute(EditMessageReplyMarkup(chatId, messageId), modifier)
19+
20+
inline fun TelegramAware.removeInlineKeyboard(
21+
chatId: Long,
22+
messageId: Int,
23+
modifier: EditMessageReplyMarkup.() -> Unit = {}
24+
) = this.editMessageReplyMarkup(chatId, messageId) {
25+
replyMarkup(InlineKeyboardMarkup())
26+
modifier()
27+
}
28+
29+
inline fun TelegramAware.removeInlineKeyboard(
30+
chatId: String,
31+
messageId: Int,
32+
modifier: EditMessageReplyMarkup.() -> Unit = {}
33+
) = this.editMessageReplyMarkup(chatId, messageId) {
34+
replyMarkup(InlineKeyboardMarkup())
35+
modifier()
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.EditMessageText
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
fun TelegramAware.editMessageText(
8+
chatId: Long,
9+
messageId: Int,
10+
text: String,
11+
modifier: EditMessageText.() -> Unit = {}
12+
) = this.execute(EditMessageText(chatId, messageId, text), modifier)
13+
14+
fun TelegramAware.editMessageText(
15+
chatId: String,
16+
messageId: Int,
17+
text: String,
18+
modifier: EditMessageText.() -> Unit = {}
19+
) = this.execute(EditMessageText(chatId, messageId, text), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.ForwardMessage
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.forwardMessage(
8+
chatId: Long,
9+
fromChatId: Long,
10+
messageId: Int,
11+
modifier: ForwardMessage.() -> Unit = {}
12+
) = this.execute(ForwardMessage(chatId, fromChatId, messageId), modifier)
13+
14+
inline fun TelegramAware.forwardMessage(
15+
chatId: String,
16+
fromChatId: Long,
17+
messageId: Int,
18+
modifier: ForwardMessage.() -> Unit = {}
19+
) = this.execute(ForwardMessage(chatId, fromChatId, messageId), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.GetChat
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.getChat(
8+
chatId: Long,
9+
modifier: GetChat.() -> Unit = {}
10+
) = this.execute(GetChat(chatId), modifier)
11+
12+
inline fun TelegramAware.getChat(
13+
chatId: String,
14+
modifier: GetChat.() -> Unit = {}
15+
) = this.execute(GetChat(chatId), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.GetFile
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
fun TelegramAware.getFile(
8+
fileId: String,
9+
modifier: GetFile.() -> Unit = {}
10+
) = this.execute(GetFile(fileId), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.GetMe
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.getMe(
8+
modifier: GetMe.() -> Unit = {}
9+
) = this.execute(GetMe(), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.model.request.LabeledPrice
5+
import com.pengrad.telegrambot.request.SendInvoice
6+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
7+
8+
fun TelegramAware.sendInvoice(
9+
chatId: Long,
10+
title: String,
11+
description: String,
12+
payload: String,
13+
currency: String,
14+
items: List<LabeledPrice>,
15+
modifier: SendInvoice.() -> Unit = {}
16+
) = this.execute(SendInvoice(chatId, title, description, payload, currency, *items.toTypedArray()), modifier)
17+
18+
fun TelegramAware.sendInvoice(
19+
chatId: Long,
20+
title: String,
21+
description: String,
22+
payload: String,
23+
currency: String,
24+
item: LabeledPrice,
25+
modifier: SendInvoice.() -> Unit = {}
26+
) = this.sendInvoice(
27+
chatId = chatId,
28+
title = title,
29+
description = description,
30+
payload = payload,
31+
currency = currency,
32+
items = listOf(item),
33+
modifier = modifier
34+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.model.request.InputMedia
5+
import com.pengrad.telegrambot.request.SendMediaGroup
6+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
7+
8+
inline fun TelegramAware.sendMediaGroup(
9+
chatId: Long,
10+
media: List<InputMedia<*>>,
11+
modifier: SendMediaGroup.() -> Unit = {}
12+
) = this.execute(SendMediaGroup(chatId, *media.toTypedArray()), modifier)
13+
14+
inline fun TelegramAware.sendMediaGroup(
15+
chatId: String,
16+
media: List<InputMedia<*>>,
17+
modifier: SendMediaGroup.() -> Unit = {}
18+
) = this.execute(SendMediaGroup(chatId, *media.toTypedArray()), modifier)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.pengrad.telegrambot.utility.kotlin.extension.request
2+
3+
import com.pengrad.telegrambot.TelegramAware
4+
import com.pengrad.telegrambot.request.SendMessage
5+
import com.pengrad.telegrambot.utility.kotlin.extension.execute
6+
7+
inline fun TelegramAware.sendMessage(
8+
chatId: Long,
9+
text: String,
10+
modifier: SendMessage.() -> Unit = {}
11+
) = this.execute(SendMessage(chatId, text), modifier)
12+
13+
inline fun TelegramAware.sendMessage(
14+
chatId: String,
15+
text: String,
16+
modifier: SendMessage.() -> Unit = {}
17+
) = this.execute(SendMessage(chatId, text), modifier)

0 commit comments

Comments
 (0)