#3 session API draft

This commit is contained in:
2021-09-23 14:56:07 +03:00
parent 05af2f05a4
commit c62de38f17
13 changed files with 258 additions and 138 deletions

View File

@@ -1,61 +1,64 @@
package ru.penkrat.stbf.impl.pengrad;
import static lombok.AccessLevel.PROTECTED;
import java.util.Optional;
import com.pengrad.telegrambot.model.CallbackQuery;
import com.pengrad.telegrambot.model.Contact;
import com.pengrad.telegrambot.model.Message;
import com.pengrad.telegrambot.model.Update;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import ru.penkrat.stbf.api.BotRequest;
import ru.penkrat.stbf.api.BotSession;
import java.util.Optional;
import static lombok.AccessLevel.PROTECTED;
@RequiredArgsConstructor
public class BotRequestImpl implements BotRequest {
@Getter(PROTECTED)
private final Update update;
@Getter(PROTECTED)
private final Update update;
@Override
public Optional<String> getMessageText() {
if (update.message() != null) {
return Optional.ofNullable(update.message().text());
}
return Optional.empty();
}
@Getter
private final BotSession session;
@Override
public Optional<String> getPhoneNumber() {
return Optional.of(update)
.map(Update::message)
.map(Message::contact)
.map(Contact::phoneNumber);
}
@Override
public Optional<String> getMessageText() {
if (update.message() != null) {
return Optional.ofNullable(update.message().text());
}
return Optional.empty();
}
@Override
public Optional<String> getCallbackData() {
return Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::data);
}
@Override
public Optional<String> getPhoneNumber() {
return Optional.of(update)
.map(Update::message)
.map(Message::contact)
.map(Contact::phoneNumber);
}
@Override
public Optional<String> getCallbackMessageText() {
return Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::message)
.map(Message::text);
}
@Override
public Optional<String> getCallbackData() {
return Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::data);
}
@Override
public Long getChatId() {
return Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::message)
.orElseGet(() -> update.message()).chat().id();
}
@Override
public Optional<String> getCallbackMessageText() {
return Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::message)
.map(Message::text);
}
@Override
public Long getChatId() {
return Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::message)
.orElseGet(() -> update.message()).chat().id();
}
}

View File

@@ -2,34 +2,48 @@ package ru.penkrat.stbf.impl.pengrad;
import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.UpdatesListener;
import com.pengrad.telegrambot.model.CallbackQuery;
import com.pengrad.telegrambot.model.Update;
import lombok.extern.slf4j.Slf4j;
import ru.penkrat.stbf.api.CommandChain;
import ru.penkrat.stbf.api.SessionProvider;
import java.util.Optional;
@Slf4j
public class PengradTelegramBot extends TelegramBot implements AutoCloseable {
public PengradTelegramBot(String botToken, CommandChain commandChain) {
super(botToken);
this.setUpdatesListener(updates -> {
for (Update update : updates) {
try {
commandChain.processCommand(
new BotRequestImpl(update),
new BotResponseImpl(update, this));
} catch (Exception e) {
log.error("Bot Error:", e);
}
}
return UpdatesListener.CONFIRMED_UPDATES_ALL;
});
}
public PengradTelegramBot(String botToken, CommandChain commandChain) {
this(botToken, commandChain, (id) -> {
throw new IllegalArgumentException("'SessionProvider' is not defined");
});
}
@Override
public void close() throws Exception {
removeGetUpdatesListener();
log.debug("Bot closed.");
}
public PengradTelegramBot(String botToken, CommandChain commandChain, SessionProvider sessionProvider) {
super(botToken);
this.setUpdatesListener(updates -> {
for (Update update : updates) {
try {
final Long chatId = Optional.of(update)
.map(Update::callbackQuery)
.map(CallbackQuery::message)
.orElseGet(() -> update.message()).chat().id();
commandChain.processCommand(
new BotRequestImpl(update, sessionProvider.get(chatId)),
new BotResponseImpl(update, this));
} catch (Exception e) {
log.error("Bot Error:", e);
}
}
return UpdatesListener.CONFIRMED_UPDATES_ALL;
});
}
@Override
public void close() throws Exception {
removeGetUpdatesListener();
log.debug("Bot closed.");
}
}