move command bot functionality to own bot base class, to avoid api change for future releases
This commit is contained in:
parent
2bff35b8b9
commit
3dd0b87ca0
@ -1,85 +1,11 @@
|
||||
package org.telegram.telegrambots.bots;
|
||||
|
||||
import org.telegram.telegrambots.BotLogger;
|
||||
import org.telegram.telegrambots.TelegramApiException;
|
||||
import org.telegram.telegrambots.api.commands.BotCommand;
|
||||
import org.telegram.telegrambots.api.commands.CommandRegistry;
|
||||
import org.telegram.telegrambots.api.commands.ICommandRegistry;
|
||||
import org.telegram.telegrambots.api.methods.send.SendMessage;
|
||||
import org.telegram.telegrambots.api.objects.Message;
|
||||
import org.telegram.telegrambots.api.objects.Update;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Ruben Bermudez
|
||||
* @version 1.0
|
||||
* @brief TODO
|
||||
* @date 14 of January of 2016
|
||||
*/
|
||||
public abstract class TelegramLongPollingBot extends AbsSender implements ITelegramLongPollingBot, ICommandRegistry {
|
||||
public abstract class TelegramLongPollingBot extends AbsSender implements ITelegramLongPollingBot {
|
||||
|
||||
public static final String LOGTAG = "TelegramLongPollingBot";
|
||||
private final CommandRegistry commandRegistry;
|
||||
|
||||
public TelegramLongPollingBot() {
|
||||
this.commandRegistry = new CommandRegistry(getBotToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onUpdateReceived(Update update) {
|
||||
if (update.hasMessage()) {
|
||||
Message message = update.getMessage();
|
||||
if (message.isCommand()) {
|
||||
if (!commandRegistry.executeCommand(message)) {
|
||||
SendMessage sendMessage = new SendMessage();
|
||||
sendMessage.setChatId(message.getChatId().toString());
|
||||
sendMessage.setText("The command you provided is not registered for this bot");
|
||||
try {
|
||||
sendMessage(sendMessage);
|
||||
} catch (TelegramApiException e) {
|
||||
BotLogger.error("Cannot send message", LOGTAG, e);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
processNonCommandUpdate(update);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean register(BotCommand botCommand) {
|
||||
botCommand.setAbsSender(this);
|
||||
return commandRegistry.register(botCommand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Map<BotCommand, Boolean> registerAll(BotCommand... botCommands) {
|
||||
for (BotCommand botCommand : botCommands) {
|
||||
botCommand.setAbsSender(this);
|
||||
}
|
||||
return commandRegistry.registerAll(botCommands);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean deregister(BotCommand botCommand) {
|
||||
botCommand.setAbsSender(null);
|
||||
return commandRegistry.deregister(botCommand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Map<BotCommand, Boolean> deregisterAll(BotCommand... botCommands) {
|
||||
for (BotCommand botCommand : botCommands) {
|
||||
botCommand.setAbsSender(null);
|
||||
}
|
||||
return commandRegistry.deregisterAll(botCommands);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Collection<BotCommand> getRegisteredCommands() {
|
||||
return commandRegistry.getRegisteredCommands();
|
||||
}
|
||||
|
||||
public abstract void processNonCommandUpdate(Update update);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,95 @@
|
||||
package org.telegram.telegrambots.bots;
|
||||
|
||||
import org.telegram.telegrambots.BotLogger;
|
||||
import org.telegram.telegrambots.TelegramApiException;
|
||||
import org.telegram.telegrambots.api.commands.BotCommand;
|
||||
import org.telegram.telegrambots.api.commands.CommandRegistry;
|
||||
import org.telegram.telegrambots.api.commands.ICommandRegistry;
|
||||
import org.telegram.telegrambots.api.methods.send.SendMessage;
|
||||
import org.telegram.telegrambots.api.objects.Message;
|
||||
import org.telegram.telegrambots.api.objects.Update;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* This class adds command functionality to the TelegramLongPollingBot
|
||||
*
|
||||
* @author tschulz
|
||||
*/
|
||||
public abstract class TelegramLongPollingCommandBot extends AbsSender implements ITelegramLongPollingBot, ICommandRegistry{
|
||||
|
||||
public static final String LOGTAG = "TelegramLongPollingCommandBot";
|
||||
private final CommandRegistry commandRegistry;
|
||||
|
||||
/**
|
||||
* construct creates CommandRegistry for this bot.
|
||||
* Use ICommandRegistry's methods on this bot to register commands
|
||||
*/
|
||||
public TelegramLongPollingCommandBot() {
|
||||
this.commandRegistry = new CommandRegistry(getBotToken());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onUpdateReceived(Update update) {
|
||||
if (update.hasMessage()) {
|
||||
Message message = update.getMessage();
|
||||
if (message.isCommand()) {
|
||||
if (!commandRegistry.executeCommand(message)) {
|
||||
SendMessage sendMessage = new SendMessage();
|
||||
sendMessage.setChatId(message.getChatId().toString());
|
||||
sendMessage.setText("The command you provided is not registered for this bot");
|
||||
try {
|
||||
sendMessage(sendMessage);
|
||||
} catch (TelegramApiException e) {
|
||||
BotLogger.error("Cannot send message", LOGTAG, e);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
processNonCommandUpdate(update);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean register(BotCommand botCommand) {
|
||||
botCommand.setAbsSender(this);
|
||||
return commandRegistry.register(botCommand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Map<BotCommand, Boolean> registerAll(BotCommand... botCommands) {
|
||||
for (BotCommand botCommand : botCommands) {
|
||||
botCommand.setAbsSender(this);
|
||||
}
|
||||
return commandRegistry.registerAll(botCommands);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean deregister(BotCommand botCommand) {
|
||||
botCommand.setAbsSender(null);
|
||||
return commandRegistry.deregister(botCommand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Map<BotCommand, Boolean> deregisterAll(BotCommand... botCommands) {
|
||||
for (BotCommand botCommand : botCommands) {
|
||||
botCommand.setAbsSender(null);
|
||||
}
|
||||
return commandRegistry.deregisterAll(botCommands);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Collection<BotCommand> getRegisteredCommands() {
|
||||
return commandRegistry.getRegisteredCommands();
|
||||
}
|
||||
|
||||
/**
|
||||
* Process all updates, that are not commands.
|
||||
* Attention: commands, that have valid syntax but are not registered on this bot,
|
||||
* won't be forwarded to this method!
|
||||
*
|
||||
* @param update the update
|
||||
*/
|
||||
public abstract void processNonCommandUpdate(Update update);
|
||||
}
|
Loading…
Reference in New Issue
Block a user