Last active
November 12, 2018 05:41
-
-
Save nickrobson/880a1306ffeacea61c14c7a47153a070 to your computer and use it in GitHub Desktop.
An example of how the DatePicker extension for jTelegramBotAPI can be used.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.jtelegram.api.TelegramBotRegistry; | |
import com.jtelegram.api.chat.id.ChatId; | |
import com.jtelegram.api.commands.filters.MentionFilter; | |
import com.jtelegram.api.commands.filters.TextFilter; | |
import com.jtelegram.api.menu.Menu; | |
import com.jtelegram.api.menu.MenuHandler; | |
import com.jtelegram.api.menu.viewer.RegularMenuViewer; | |
import com.jtelegram.api.requests.message.send.SendText; | |
import com.jtelegram.api.update.PollingUpdateProvider; | |
import com.jtelegram.api.util.TextBuilder; | |
import com.jtelegram.ext.datepicker.DatePickerExtension; | |
import com.jtelegram.ext.datepicker.menu.DatePickerMenu; | |
import com.jtelegram.ext.datepicker.picker.DatePicker; | |
import com.jtelegram.ext.datepicker.picker.DatePickerOptions; | |
import java.time.LocalDate; | |
import java.util.Locale; | |
/** | |
* @author Nick Robson | |
*/ | |
public class MyAwesomeBot { | |
public static void main(String[] args) { | |
TelegramBotRegistry registry = TelegramBotRegistry.builder() | |
.updateProvider(new PollingUpdateProvider()) | |
.build(); | |
registry.registerBot(System.getenv("BOT_TOKEN"), (bot, ex) -> { | |
if (ex != null) { | |
ex.printStackTrace(); | |
System.exit(1); | |
} | |
System.out.format("Started bot: @%s\n", bot.getBotInfo().getUsername()); | |
// when /datepicker@botusername is sent (or /datepicker is PM'd) | |
bot.getCommandRegistry().registerCommand(new MentionFilter( | |
new TextFilter("datepicker", false, (event, command) -> { | |
try { | |
String localeString = command.getArgsAsText(); | |
Locale locale = Locale.forLanguageTag(localeString); | |
if (localeString.isEmpty() || locale == null) { | |
locale = Locale.forLanguageTag(command.getSender().getLanguageCode()); | |
} | |
// get the date picker instance corresponding to their locale | |
DatePicker datePicker = DatePickerExtension.forLocale(locale); | |
Menu menu = DatePickerMenu.builder() | |
.bot(bot) | |
.datePicker(datePicker) | |
.datePickerOptions(DatePickerOptions.builder() | |
// always highlight today's date with a • next to it | |
.dateHighlightedPredicate(LocalDate.now()::isEqual) | |
.build()) | |
// only the command sender can change the month | |
.monthSelectionPredicate((cb, date) -> cb.getQuery().getFrom().getId() == command.getSender().getId()) | |
// only the command sender can change the month | |
.dateSelectionPredicate((cb, date) -> cb.getQuery().getFrom().getId() == command.getSender().getId()) | |
// when the date is clicked... | |
.dateSelectionConsumer((cb, date) -> { | |
System.out.format( | |
"@%s clicked %s\n", | |
cb.getQuery().getFrom().getUsername(), | |
date.toString() | |
); | |
bot.perform(SendText.builder() | |
.chatId(ChatId.of(cb.getQuery().getMessage())) | |
.replyToMessageID(cb.getQuery().getMessage().getMessageId()) | |
.text(TextBuilder.create().escaped("I like ").bold(date.toString()).escaped(" too!")) | |
.errorHandler(Throwable::printStackTrace) | |
.build()); | |
}) | |
// OPTIONAL, to be displayed once the menu has loaded | |
.messageSupplier(() -> TextBuilder.create().escaped("Choose a date")) | |
.build(); | |
bot.perform(SendText.builder() | |
.chatId(ChatId.of(event.getMessage())) | |
.replyToMessageID(event.getMessage().getMessageId()) | |
.text(TextBuilder.create().escaped("Loading...")) | |
.callback(tm -> { | |
menu.addViewer(RegularMenuViewer.builder() | |
.chatId(tm.getChat().getChatId()) | |
.messageId(tm.getMessageId()) | |
.build()); | |
MenuHandler.registerMenu(menu); | |
}) | |
.errorHandler(Throwable::printStackTrace) | |
.build()); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
return true; | |
}))); | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment