11package ru .untitled_devs .core .client ;
22
33
4+ import org .apache .logging .log4j .Logger ;
45import org .telegram .telegrambots .bots .TelegramLongPollingBot ;
6+ import org .telegram .telegrambots .meta .api .methods .AnswerCallbackQuery ;
57import org .telegram .telegrambots .meta .api .methods .groupadministration .BanChatMember ;
68import org .telegram .telegrambots .meta .api .methods .send .SendMessage ;
79import org .telegram .telegrambots .meta .api .methods .send .SendPhoto ;
810import org .telegram .telegrambots .meta .api .methods .updatingmessages .DeleteMessage ;
11+ import org .telegram .telegrambots .meta .api .methods .updatingmessages .EditMessageReplyMarkup ;
912import org .telegram .telegrambots .meta .api .methods .updatingmessages .EditMessageText ;
1013import org .telegram .telegrambots .meta .api .objects .InputFile ;
1114import org .telegram .telegrambots .meta .api .objects .Update ;
15+ import org .telegram .telegrambots .meta .api .objects .replykeyboard .InlineKeyboardMarkup ;
16+ import org .telegram .telegrambots .meta .api .objects .replykeyboard .ReplyKeyboard ;
1217import org .telegram .telegrambots .meta .exceptions .TelegramApiException ;
1318import ru .untitled_devs .core .context .UpdateContext ;
1419import ru .untitled_devs .core .fsm .storage .StorageKey ;
2126import java .util .ArrayList ;
2227import java .util .List ;
2328
29+
2430import static ru .untitled_devs .core .utils .FileUtils .getImageFileNameWithExtension ;
2531
2632public class Bot extends TelegramLongPollingBot implements BotClient {
2733 private final String botUsername ;
2834 private final List <Router > routers = new ArrayList <>();
2935 private final Storage storage ;
3036 private final List <Middleware > middlewares = new ArrayList <>();
37+ private final Logger logger ;
3138
32- public Bot (String botToken , String botUsername , Storage storage ) {
39+ public Bot (String botToken , String botUsername , Storage storage , Logger logger ) {
3340 super (botToken );
3441 this .botUsername = botUsername ;
3542 this .storage = storage ;
43+ this .logger = logger ;
3644 }
3745
3846 @ Override
@@ -56,26 +64,21 @@ public void sendMessage(long chatId, String text) {
5664 try {
5765 execute (message );
5866 } catch (TelegramApiException e ) {
59- System . err . println (e .getMessage ());
67+ this . logger . error (e .getMessage ());
6068 }
6169 }
6270
63- public void banChatMember (long chatId , long userId , int duration ) {
64- BanChatMember banChatMember = new BanChatMember ();
65- banChatMember .setChatId (chatId );
66- banChatMember .setUserId (userId );
67-
68- if (duration > 0 ) {
69- long untilDate = Instant .now ().getEpochSecond () + duration ;
70- banChatMember .setUntilDate ((int ) untilDate );
71- }
71+ public void sendMessage (long chatId , String text , ReplyKeyboard replyKeyboard ) {
72+ SendMessage message = new SendMessage ();
73+ message .setChatId (chatId );
74+ message .setText (text );
75+ message .setReplyMarkup (replyKeyboard );
7276
7377 try {
74- execute (banChatMember );
78+ execute (message );
7579 } catch (TelegramApiException e ) {
76- System . err . println (e .getMessage ());
80+ this . logger . error (e .getMessage ());
7781 }
78-
7982 }
8083
8184 @ Override
@@ -88,11 +91,19 @@ public void editMessageText(long chatId, int messageId, String newText) {
8891 try {
8992 execute (messageText );
9093 } catch (TelegramApiException e ) {
91- throw new RuntimeException ( e );
94+ this . logger . error ( e . getMessage () );
9295 }
9396
9497 }
9598
99+ @ Override
100+ public void editMessageReplyMarkup (long chatId , int messageId , InlineKeyboardMarkup replyKeyboard ) {
101+ EditMessageReplyMarkup editMessageReplyMarkup = new EditMessageReplyMarkup ();
102+ editMessageReplyMarkup .setChatId (chatId );
103+ editMessageReplyMarkup .setMessageId (messageId );
104+ editMessageReplyMarkup .setReplyMarkup (replyKeyboard );
105+ }
106+
96107 @ Override
97108 public void deleteMessage (long chatId , int messageId ) {
98109 DeleteMessage deleteMessage = new DeleteMessage ();
@@ -102,15 +113,10 @@ public void deleteMessage(long chatId, int messageId) {
102113 try {
103114 execute (deleteMessage );
104115 } catch (TelegramApiException e ) {
105- throw new RuntimeException ( e );
116+ this . logger . error ( e . getMessage () );
106117 }
107118 }
108119
109- @ Override
110- public void sendTypingAction (long chatId ) {
111-
112- }
113-
114120 @ Override
115121 public void sendPhoto (long chatId , String caption , byte [] photo ) {
116122 SendPhoto sendPhoto = new SendPhoto ();
@@ -123,6 +129,27 @@ public void sendPhoto(long chatId, String caption, byte[] photo) {
123129
124130 @ Override
125131 public void answerCallbackQuery (String callbackQueryId , String text , boolean showAlert ) {
132+ AnswerCallbackQuery answerCallbackQuery = new AnswerCallbackQuery ();
133+ answerCallbackQuery .setCallbackQueryId (callbackQueryId );
134+ answerCallbackQuery .setText (text );
135+ answerCallbackQuery .setShowAlert (showAlert );
136+ }
137+
138+ public void banChatMember (long chatId , long userId , int duration ) {
139+ BanChatMember banChatMember = new BanChatMember ();
140+ banChatMember .setChatId (chatId );
141+ banChatMember .setUserId (userId );
142+
143+ if (duration > 0 ) {
144+ long untilDate = Instant .now ().getEpochSecond () + duration ;
145+ banChatMember .setUntilDate ((int ) untilDate );
146+ }
147+
148+ try {
149+ execute (banChatMember );
150+ } catch (TelegramApiException e ) {
151+ System .err .println (e .getMessage ());
152+ }
126153
127154 }
128155
@@ -135,13 +162,23 @@ public void onUpdateReceived(Update update) {
135162 StorageKey key = new StorageKey (updateContext .getChatId (), updateContext .getUserId ());
136163
137164 for (Middleware middleware : this .middlewares ) {
138- if (!middleware .preHandle (update )){
165+ try {
166+ if (!middleware .preHandle (update )) {
167+ logger .debug ("Middleware prevented handling update: {}" , update );
168+ return ;
169+ }
170+ } catch (Exception e ) {
171+ logger .error ("Exception in middleware: " , e );
139172 return ;
140173 }
141174 }
142175
143176 for (Router router : this .routers ) {
144- router .routeUpdate (update , this .storage .getOrCreateContext (key ));
177+ try {
178+ router .routeUpdate (update , this .storage .getOrCreateContext (key ));
179+ } catch (Exception e ) {
180+ logger .error ("Exception in router {} while handling update: {}" , router .getClass ().getSimpleName (), update , e );
181+ }
145182 }
146183 }
147184
0 commit comments