Skip to content

Commit 49056d5

Browse files
committed
Added the field reply_markup to the Message object, containing the inline keyboard attached to the message
1 parent abbb3e6 commit 49056d5

File tree

5 files changed

+146
-5
lines changed

5 files changed

+146
-5
lines changed

library/src/main/java/com/pengrad/telegrambot/model/Message.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.pengrad.telegrambot.model;
22

3+
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
34
import com.pengrad.telegrambot.passport.PassportData;
45

56
import java.io.Serializable;
@@ -58,6 +59,7 @@ public class Message implements Serializable {
5859
private SuccessfulPayment successful_payment;
5960
private String connected_website;
6061
private PassportData passport_data;
62+
private InlineKeyboardMarkup reply_markup;
6163

6264
public Integer messageId() {
6365
return message_id;
@@ -243,6 +245,10 @@ public PassportData passportData() {
243245
return passport_data;
244246
}
245247

248+
public InlineKeyboardMarkup replyMarkup() {
249+
return reply_markup;
250+
}
251+
246252
@Override
247253
public boolean equals(Object o) {
248254
if (this == o) return true;
@@ -318,7 +324,8 @@ public boolean equals(Object o) {
318324
return false;
319325
if (connected_website != null ? !connected_website.equals(message.connected_website) : message.connected_website != null)
320326
return false;
321-
return passport_data != null ? passport_data.equals(message.passport_data) : message.passport_data == null;
327+
if (passport_data != null ? !passport_data.equals(message.passport_data) : message.passport_data != null) return false;
328+
return reply_markup != null ? reply_markup.equals(message.reply_markup) : message.reply_markup == null;
322329
}
323330

324331
@Override
@@ -375,6 +382,7 @@ public String toString() {
375382
", successful_payment=" + successful_payment +
376383
", connected_website='" + connected_website + '\'' +
377384
", passport_data=" + passport_data +
385+
", reply_markup=" + reply_markup +
378386
'}';
379387
}
380388
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.pengrad.telegrambot.model.request;
2+
3+
import java.io.Serializable;
4+
5+
/**
6+
* Stas Parshin
7+
* 04 June 2019
8+
*/
9+
public class CallbackGame implements Serializable {
10+
private final static long serialVersionUID = 0L;
11+
}

library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.java

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class InlineKeyboardButton implements Serializable {
1515
private String callback_data;
1616
private String switch_inline_query;
1717
private String switch_inline_query_current_chat;
18-
private String callback_game;
18+
private CallbackGame callback_game;
1919
private Boolean pay;
2020

2121
//todo can use only one optional field, make different constructors or static methods
@@ -50,12 +50,86 @@ public InlineKeyboardButton switchInlineQueryCurrentChat(String switchInlineQuer
5050
}
5151

5252
public InlineKeyboardButton callbackGame(String callbackGame) {
53-
callback_game = callbackGame;
53+
callback_game = new CallbackGame();
5454
return this;
5555
}
5656

5757
public InlineKeyboardButton pay() {
5858
this.pay = true;
5959
return this;
6060
}
61+
62+
public String text() {
63+
return text;
64+
}
65+
66+
public String url() {
67+
return url;
68+
}
69+
70+
public String callbackData() {
71+
return callback_data;
72+
}
73+
74+
public String switchInlineQuery() {
75+
return switch_inline_query;
76+
}
77+
78+
public String switchInlineQueryCurrentChat() {
79+
return switch_inline_query_current_chat;
80+
}
81+
82+
public CallbackGame callbackGame() {
83+
return callback_game;
84+
}
85+
86+
public boolean isPay() {
87+
return pay != null && pay;
88+
}
89+
90+
@Override
91+
public boolean equals(Object o) {
92+
if (this == o) return true;
93+
if (o == null || getClass() != o.getClass()) return false;
94+
95+
InlineKeyboardButton that = (InlineKeyboardButton) o;
96+
97+
if (text != null ? !text.equals(that.text) : that.text != null) return false;
98+
if (url != null ? !url.equals(that.url) : that.url != null) return false;
99+
if (login_url != null ? !login_url.equals(that.login_url) : that.login_url != null) return false;
100+
if (callback_data != null ? !callback_data.equals(that.callback_data) : that.callback_data != null) return false;
101+
if (switch_inline_query != null ? !switch_inline_query.equals(that.switch_inline_query) : that.switch_inline_query != null)
102+
return false;
103+
if (switch_inline_query_current_chat != null ? !switch_inline_query_current_chat.equals(that.switch_inline_query_current_chat) : that.switch_inline_query_current_chat != null)
104+
return false;
105+
if (callback_game != null ? !callback_game.equals(that.callback_game) : that.callback_game != null) return false;
106+
return pay != null ? pay.equals(that.pay) : that.pay == null;
107+
}
108+
109+
@Override
110+
public int hashCode() {
111+
int result = text != null ? text.hashCode() : 0;
112+
result = 31 * result + (url != null ? url.hashCode() : 0);
113+
result = 31 * result + (login_url != null ? login_url.hashCode() : 0);
114+
result = 31 * result + (callback_data != null ? callback_data.hashCode() : 0);
115+
result = 31 * result + (switch_inline_query != null ? switch_inline_query.hashCode() : 0);
116+
result = 31 * result + (switch_inline_query_current_chat != null ? switch_inline_query_current_chat.hashCode() : 0);
117+
result = 31 * result + (callback_game != null ? callback_game.hashCode() : 0);
118+
result = 31 * result + (pay != null ? pay.hashCode() : 0);
119+
return result;
120+
}
121+
122+
@Override
123+
public String toString() {
124+
return "InlineKeyboardButton{" +
125+
"text='" + text + '\'' +
126+
", url='" + url + '\'' +
127+
", login_url=" + login_url +
128+
", callback_data='" + callback_data + '\'' +
129+
", switch_inline_query='" + switch_inline_query + '\'' +
130+
", switch_inline_query_current_chat='" + switch_inline_query_current_chat + '\'' +
131+
", callback_game=" + callback_game +
132+
", pay=" + pay +
133+
'}';
134+
}
61135
}

library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.pengrad.telegrambot.model.request;
22

33
import java.io.Serializable;
4+
import java.util.Arrays;
45

56
/**
67
* stas
@@ -14,4 +15,23 @@ public class InlineKeyboardMarkup extends Keyboard implements Serializable {
1415
public InlineKeyboardMarkup(InlineKeyboardButton[]... keyboard) {
1516
this.inline_keyboard = keyboard;
1617
}
18+
19+
public InlineKeyboardButton[][] inlineKeyboard() {
20+
return inline_keyboard;
21+
}
22+
23+
@Override
24+
public boolean equals(Object o) {
25+
if (this == o) return true;
26+
if (o == null || getClass() != o.getClass()) return false;
27+
28+
InlineKeyboardMarkup that = (InlineKeyboardMarkup) o;
29+
30+
return Arrays.deepEquals(inline_keyboard, that.inline_keyboard);
31+
}
32+
33+
@Override
34+
public int hashCode() {
35+
return Arrays.deepHashCode(inline_keyboard);
36+
}
1737
}

library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class TelegramBotTest {
5757
File videoNoteFile = resourcePath.resolve("video_note.mp4").toFile();
5858
byte[] videoNoteBytes = Files.readAllBytes(videoNoteFile.toPath());
5959
String certificateFile = resourcePath.resolve("cert.pem").toString();
60-
String someUrl = "http://google.com";
60+
String someUrl = "http://google.com/";
6161
String audioFileId = "CQADAgADXAADgNqgSevw7NljQE4lAg";
6262
String docFileId = "BQADAgADuwADgNqYSaVAUsHMq6hqAg";
6363
String voiceFileId = "AwADAgADYwADuYNZSZww_hkrzCIpAg";
@@ -711,12 +711,37 @@ public void deleteWebhook() {
711711

712712
@Test
713713
public void sendGame() {
714+
InlineKeyboardButton[] buttons = {
715+
new InlineKeyboardButton("inline game").callbackGame("pengrad test game description"),
716+
new InlineKeyboardButton("inline ok").callbackData("callback ok"),
717+
new InlineKeyboardButton("cancel").callbackData("callback cancel"),
718+
new InlineKeyboardButton("url").url(someUrl),
719+
new InlineKeyboardButton("switch inline").switchInlineQuery("query"),
720+
new InlineKeyboardButton("switch inline current").switchInlineQueryCurrentChat("query"),
721+
};
722+
723+
InlineKeyboardButton[][] inlineKeyboard = new InlineKeyboardButton[1][];
724+
inlineKeyboard[0] = buttons;
725+
InlineKeyboardMarkup keyboardMarkup = new InlineKeyboardMarkup(inlineKeyboard);
726+
714727
String desc = "pengrad_test_game";
715-
Message message = bot.execute(new SendGame(chatId, desc)).message();
728+
Message message = bot.execute(new SendGame(chatId, desc).replyMarkup(keyboardMarkup)).message();
716729
MessageTest.checkMessage(message);
717730
Game game = message.game();
718731
GameTest.check(game);
719732
assertEquals(desc, game.description());
733+
734+
InlineKeyboardButton[] actualButtons = message.replyMarkup().inlineKeyboard()[0];
735+
assertEquals(buttons.length, actualButtons.length);
736+
assertNotNull(actualButtons[0].callbackGame());
737+
for (int i = 1; i < buttons.length; i++) {
738+
assertEquals(buttons[i].text(), actualButtons[i].text());
739+
}
740+
assertEquals(buttons[1].callbackData(), actualButtons[1].callbackData());
741+
assertEquals(buttons[2].callbackData(), actualButtons[2].callbackData());
742+
assertEquals(buttons[3].url(), actualButtons[3].url());
743+
assertEquals(buttons[4].switchInlineQuery(), actualButtons[4].switchInlineQuery());
744+
assertEquals(buttons[5].switchInlineQueryCurrentChat(), actualButtons[5].switchInlineQueryCurrentChat());
720745
}
721746

722747
@Test
@@ -828,6 +853,9 @@ public void sendInvoice() {
828853
}))
829854
);
830855
InvoiceCheck.check(response.message().invoice());
856+
InlineKeyboardButton payButton = response.message().replyMarkup().inlineKeyboard()[0][0];
857+
assertTrue(payButton.isPay());
858+
assertEquals("just pay", payButton.text());
831859
}
832860

833861
@Test

0 commit comments

Comments
 (0)