3 changed files with 231 additions and 0 deletions
@ -0,0 +1,226 @@ |
|||
package org.telegram.updateshandlers; |
|||
|
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import org.telegram.BotConfig; |
|||
import org.telegram.telegrambots.api.methods.AnswerCallbackQuery; |
|||
import org.telegram.telegrambots.api.methods.send.SendMessage; |
|||
import org.telegram.telegrambots.api.methods.updatingmessages.EditMessageText; |
|||
import org.telegram.telegrambots.api.objects.CallbackQuery; |
|||
import org.telegram.telegrambots.api.objects.Message; |
|||
import org.telegram.telegrambots.api.objects.Update; |
|||
import org.telegram.telegrambots.api.objects.replykeyboard.InlineKeyboardMarkup; |
|||
import org.telegram.telegrambots.api.objects.replykeyboard.buttons.InlineKeyboardButton; |
|||
import org.telegram.telegrambots.bots.TelegramLongPollingBot; |
|||
import org.telegram.telegrambots.exceptions.TelegramApiException; |
|||
|
|||
|
|||
/** |
|||
* @author Clevero |
|||
* @version 1.0 |
|||
* @brief Handler for updates to ElektrollArtFanBot |
|||
* This bot is an example for using inline buttons, here to make a gallery. |
|||
* Bot contains some images from ElektrollArt that are all licensed under creative commons |
|||
* @date 28 of October of 2016 |
|||
*/ |
|||
public class ElektrollArtFanHandler extends TelegramLongPollingBot { |
|||
|
|||
private ArrayList<String[]> urls; |
|||
final private String BACK = "⬅️ Back"; |
|||
final private String NEXT = "Next ➡️"; |
|||
final private String INDEX_OUT_OF_RANGE = "Requested index is out of range!"; |
|||
|
|||
public ElektrollArtFanHandler() { |
|||
this.urls = new ArrayList<>(); |
|||
this.addUrls(); |
|||
} |
|||
|
|||
@Override |
|||
public String getBotUsername() { |
|||
return BotConfig.ELEKTROLLART_USER; |
|||
} |
|||
|
|||
private void addUrls(){ |
|||
|
|||
/* |
|||
* Just some sample links of my fav images from elektrollart.de |
|||
*/ |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=2964", "http://www.elektrollart.de/wp-content/uploads/deer-724x1024.png", "Deer Nature (cc-by)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=2960", "http://www.elektrollart.de/wp-content/uploads/butterfly_wallpaper_by_elektroll-d424m9d-1024x576.png", "Butterfly Wallpaper (cc-by)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=2897", "http://www.elektrollart.de/wp-content/uploads/ilovefs_wallpaper-1024x576.png", "I Love Free Software – Wallpaper (CC0)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=3953", "http://www.elektrollart.de/wp-content/uploads/diaspora_wallpaper_by_elektroll-d4anyj4-1024x576.png", "diaspora Wallpaper (CC-BY-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=549", "http://www.elektrollart.de/wp-content/uploads/diaspora_flower-1024x576.png", "Diaspora Digital Wallpaper (CC-BY-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=534", "http://www.elektrollart.de/wp-content/uploads/debian-butterfly-1024x576.png", "Debian-Butterfly Wallpaper (CC-BY-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=531", "http://www.elektrollart.de/wp-content/uploads/cc-white-1920x1080-1024x576.png", "CC-Wallpaper (CC-BY-NC-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=526", "http://www.elektrollart.de/wp-content/uploads/debian-gal-1920x1080-1024x576.png", "Debian Wallpaper (CC-BY-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=523", "http://www.elektrollart.de/wp-content/uploads/Ubuntusplash-1920x1080-1024x576.png", "Ubuntu Wallpaper (CC-BY-NC-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=559", "http://www.elektrollart.de/wp-content/uploads/skullgirll_a-1024x576.png", "Skullgirl Wallpapers (CC-BY-NC-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=559", "http://www.elektrollart.de/wp-content/uploads/skullgirll_b-1024x576.png", "Skullgirl Wallpapers (CC-BY-NC-SA)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=847", "http://www.elektrollart.de/wp-content/uploads/archlinux_wallpaper-1024x576.png", "ArchLinux (CC0)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=1381", "http://www.elektrollart.de/wp-content/uploads/tuxxi-small-724x1024.png", "Piep (CC-BY)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=4264", "http://www.elektrollart.de/wp-content/uploads/Thngs_left_unsaid-724x1024.jpg", "Things Left Unsaid (CC-BY)"}); |
|||
this.urls.add(new String[]{"http://www.elektrollart.de/?p=2334", "http://www.elektrollart.de/wp-content/uploads/redpanda-1024x826.png", "<3 mozilla (CC0)"}); |
|||
} |
|||
|
|||
@Override |
|||
public void onUpdateReceived(Update update) { |
|||
|
|||
//check if the update has a message
|
|||
if(update.hasMessage()){ |
|||
Message message = update.getMessage(); |
|||
|
|||
//check if the message contains a text
|
|||
if(message.hasText()){ |
|||
String input = message.getText(); |
|||
|
|||
if(input.equals("/start")){ |
|||
SendMessage sendMessagerequest = new SendMessage(); |
|||
sendMessagerequest.setChatId(message.getChatId().toString()); |
|||
/* |
|||
* we just add the first link from our array |
|||
* |
|||
* We use markdown to embedd the image |
|||
*/ |
|||
sendMessagerequest.setText("[](" + this.urls.get(0)[1] + ")"); |
|||
sendMessagerequest.enableMarkdown(true); |
|||
|
|||
sendMessagerequest.setReplyMarkup(this.getGalleryView(0, -1)); |
|||
|
|||
|
|||
try { |
|||
sendMessage(sendMessagerequest); |
|||
} catch (TelegramApiException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
else if(update.hasCallbackQuery()){ |
|||
CallbackQuery callbackquery = update.getCallbackQuery(); |
|||
String[] data = callbackquery.getData().split(":"); |
|||
int index = Integer.parseInt(data[2]); |
|||
|
|||
if(data[0].equals("gallery")){ |
|||
|
|||
InlineKeyboardMarkup markup = null; |
|||
|
|||
if(data[1].equals("back")){ |
|||
markup = this.getGalleryView(Integer.parseInt(data[2]), 1); |
|||
if(index > 0){ |
|||
index--; |
|||
} |
|||
}else if(data[1].equals("next")){ |
|||
markup = this.getGalleryView(Integer.parseInt(data[2]), 2); |
|||
if(index < this.urls.size()-1){ |
|||
index++; |
|||
} |
|||
}else if(data[1].equals("text")){ |
|||
try { |
|||
this.sendAnswerCallbackQuery("Please use one of the given actions below, instead.", false, callbackquery); |
|||
} catch (TelegramApiException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
if(markup == null){ |
|||
try { |
|||
this.sendAnswerCallbackQuery(INDEX_OUT_OF_RANGE, false, callbackquery); |
|||
} catch (TelegramApiException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
}else{ |
|||
|
|||
EditMessageText editMarkup = new EditMessageText(); |
|||
editMarkup.setChatId(callbackquery.getMessage().getChatId().toString()); |
|||
editMarkup.setInlineMessageId(callbackquery.getInlineMessageId()); |
|||
editMarkup.setText("[](" + this.urls.get(index)[1] + ")"); |
|||
editMarkup.enableMarkdown(true); |
|||
editMarkup.setMessageId(callbackquery.getMessage().getMessageId()); |
|||
editMarkup.setReplyMarkup(markup); |
|||
try { |
|||
editMessageText(editMarkup); |
|||
} catch (TelegramApiException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
} |
|||
} |
|||
} |
|||
/** |
|||
* |
|||
* @param text The text that should be shown |
|||
* @param alert If the text should be shown as a alert or not |
|||
* @param callbackquery |
|||
* @throws TelegramApiException |
|||
*/ |
|||
private void sendAnswerCallbackQuery(String text, boolean alert, CallbackQuery callbackquery) throws TelegramApiException{ |
|||
AnswerCallbackQuery answerCallbackQuery = new AnswerCallbackQuery(); |
|||
answerCallbackQuery.setCallbackQueryId(callbackquery.getId()); |
|||
answerCallbackQuery.setShowAlert(alert); |
|||
answerCallbackQuery.setText(text); |
|||
answerCallbackQuery(answerCallbackQuery); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* @param index Index of the current image |
|||
* @param action What button was clicked |
|||
* @return |
|||
*/ |
|||
private InlineKeyboardMarkup getGalleryView(int index, int action){ |
|||
/* |
|||
* action = 1 -> back |
|||
* action = 2 -> next |
|||
* action = -1 -> nothing |
|||
*/ |
|||
|
|||
if(action == 1 && index > 0){ |
|||
index--; |
|||
} |
|||
else if((action == 1 && index == 0)){ |
|||
return null; |
|||
} |
|||
else if(action == 2 && index >= this.urls.size()-1){ |
|||
return null; |
|||
} |
|||
else if(action == 2){ |
|||
index++; |
|||
} |
|||
|
|||
InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup(); |
|||
|
|||
List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>(); |
|||
|
|||
List<InlineKeyboardButton> rowInline = new ArrayList<>(); |
|||
rowInline.add(new InlineKeyboardButton().setText(this.urls.get(index)[2]).setCallbackData("gallery:text:" + index)); |
|||
|
|||
|
|||
List<InlineKeyboardButton> rowInline2 = new ArrayList<>(); |
|||
rowInline2.add(new InlineKeyboardButton().setText(BACK).setCallbackData("gallery:back:" + index)); |
|||
rowInline2.add(new InlineKeyboardButton().setText(NEXT).setCallbackData("gallery:next:" + index)); |
|||
|
|||
List<InlineKeyboardButton> rowInline3 = new ArrayList<>(); |
|||
rowInline3.add(new InlineKeyboardButton().setText("Link").setUrl(this.urls.get(index)[0])); |
|||
|
|||
|
|||
rowsInline.add(rowInline); |
|||
rowsInline.add(rowInline3); |
|||
rowsInline.add(rowInline2); |
|||
|
|||
markupInline.setKeyboard(rowsInline); |
|||
|
|||
return markupInline; |
|||
} |
|||
|
|||
@Override |
|||
public String getBotToken() { |
|||
return BotConfig.ELEKTROLLART_TOKEN; |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue