undo
This commit is contained in:
parent
a856c8e01c
commit
038b0b76c9
@ -75,7 +75,7 @@ public class TelegramService {
|
||||
.stream()
|
||||
.filter(m -> m.getChat().getId() == chat.getId())
|
||||
.findFirst()
|
||||
.ifPresentOrElse(this::update, () -> send(offer, chat));
|
||||
.ifPresentOrElse(message -> update(message, false), () -> send(offer, chat));
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ public class TelegramService {
|
||||
log.info("Telegram bot stopped");
|
||||
}
|
||||
|
||||
private void onUpdateReceived(final Update update) {
|
||||
private void onUpdateReceived(@NonNull final Update update) {
|
||||
try {
|
||||
if (update.hasMessage() && update.getMessage().hasText()) {
|
||||
handleMessage(update.getMessage());
|
||||
@ -103,11 +103,19 @@ public class TelegramService {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleMessage(final Message tlgMessage) throws AccessDenied {
|
||||
chatService.setEnabled(tlgMessage.getChatId(), !tlgMessage.getText().equals("/stop"), tlgMessage.getFrom().getUserName());
|
||||
private void handleMessage(@NonNull final Message tlgMessage) throws AccessDenied {
|
||||
switch (tlgMessage.getText()) {
|
||||
case "/stop" -> chatService.setEnabled(tlgMessage.getChatId(), false, tlgMessage.getFrom().getUserName());
|
||||
case "undo" -> undo(tlgMessage);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleCallback(final CallbackQuery callback) throws AccessDenied {
|
||||
private void undo(@NonNull final Message tlgMessage) {
|
||||
messageService.undo(tlgMessage.getChatId()).ifPresent(message -> update(message, true));
|
||||
remove(tlgMessage);
|
||||
}
|
||||
|
||||
private void handleCallback(@NonNull final CallbackQuery callback) throws AccessDenied {
|
||||
final MaybeInaccessibleMessage tlgMessage = callback.getMessage();
|
||||
chatService.setEnabled(tlgMessage.getChatId(), true, callback.getFrom().getUserName());
|
||||
try {
|
||||
@ -123,19 +131,19 @@ public class TelegramService {
|
||||
}
|
||||
}
|
||||
|
||||
private void hide(final MaybeInaccessibleMessage tlgMessage) {
|
||||
messageService.setHide(tlgMessage, true).ifPresentOrElse(this::update, () -> remove(tlgMessage));
|
||||
private void hide(@NonNull final MaybeInaccessibleMessage tlgMessage) {
|
||||
messageService.setHide(tlgMessage, true).ifPresentOrElse(message -> update(message, false), () -> remove(tlgMessage));
|
||||
}
|
||||
|
||||
private void remember(final MaybeInaccessibleMessage tlgMessage, final boolean remember) {
|
||||
messageService.setRemember(tlgMessage, remember).ifPresentOrElse(this::update, () -> remove(tlgMessage));
|
||||
private void remember(@NonNull final MaybeInaccessibleMessage tlgMessage, final boolean remember) {
|
||||
messageService.setRemember(tlgMessage, remember).ifPresentOrElse(message -> update(message, false), () -> remove(tlgMessage));
|
||||
}
|
||||
|
||||
private void update(final MaybeInaccessibleMessage tlgMessage) {
|
||||
messageService.findDtoByTelegramMessage(tlgMessage).ifPresentOrElse(this::update, () -> remove(tlgMessage));
|
||||
private void update(@NonNull final MaybeInaccessibleMessage tlgMessage) {
|
||||
messageService.findDtoByTelegramMessage(tlgMessage).ifPresentOrElse(message -> update(message, false), () -> remove(tlgMessage));
|
||||
}
|
||||
|
||||
private void send(final OfferDto offerDto, final ChatDto chatDto) {
|
||||
private void send(@NonNull final OfferDto offerDto, @NonNull final ChatDto chatDto) {
|
||||
try {
|
||||
final InputFile inputFile = offerDto.getImageURL() == null ? new InputFile(new ByteArrayInputStream(NO_IMAGE), "[Kein Bild]") : new InputFile(offerDto.getImageURL());
|
||||
final SendPhoto send = new SendPhoto(chatDto.getId() + "", inputFile);
|
||||
@ -151,28 +159,41 @@ public class TelegramService {
|
||||
}
|
||||
}
|
||||
|
||||
private void update(@NonNull final MessageDto message) {
|
||||
// resendOnPriceChange
|
||||
if (message.getOffer().isResendOnPriceChange() && message.getOffer().getPriceChanged() != null && message.getHide() != null && !message.getOffer().getPriceChanged().isBefore(message.getHide())) {
|
||||
private void update(@NonNull final MessageDto message, final boolean forceResend) {
|
||||
if (resend(message, forceResend)) {
|
||||
return;
|
||||
}
|
||||
if (deleteFromTelegram(message)) {
|
||||
return;
|
||||
}
|
||||
if (message.getTelegramMessageId() == null) {
|
||||
return;
|
||||
}
|
||||
_update(message);
|
||||
}
|
||||
|
||||
private boolean resend(final MessageDto message, final boolean forceResend) {
|
||||
final boolean resendOnPriceChange = message.getOffer().isResendOnPriceChange() && message.getOffer().getPriceChanged() != null && message.getHide() != null && !message.getOffer().getPriceChanged().isBefore(message.getHide());
|
||||
if (forceResend || resendOnPriceChange) {
|
||||
messageService.setHide(message, false);
|
||||
if (message.getTelegramMessageId() == null) {
|
||||
send(message.getOffer(), message.getChat());
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// hide: delete message from telegram
|
||||
private boolean deleteFromTelegram(final MessageDto message) {
|
||||
if (message.getHide() != null && message.getTelegramMessageId() != null) {
|
||||
remove(message.getChat().getId(), message.getTelegramMessageId());
|
||||
messageService.clearTelegramMessageId(message);
|
||||
return;
|
||||
}
|
||||
|
||||
// message
|
||||
if (message.getTelegramMessageId() == null) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void _update(final MessageDto message) {
|
||||
try {
|
||||
final EditMessageCaption edit = new EditMessageCaption(
|
||||
message.getChat().getId() + "",
|
||||
|
||||
@ -15,4 +15,6 @@ public interface MessageRepository extends ListCrudRepository<Message, Long> {
|
||||
|
||||
Optional<Message> findByChatAndOffer(Chat chat, Offer offer);
|
||||
|
||||
Optional<Message> findFirstByChat_IdAndHideNotNullOrderByHideDesc(long chatId);
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import de.ph87.kleinanzeigen.kleinanzeigen.offer.OfferService;
|
||||
import de.ph87.kleinanzeigen.telegram.chat.Chat;
|
||||
import de.ph87.kleinanzeigen.telegram.chat.ChatDto;
|
||||
import de.ph87.kleinanzeigen.telegram.chat.ChatService;
|
||||
import lombok.NonNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
@ -80,4 +81,9 @@ public class MessageService {
|
||||
return new MessageDto(message, chatDto, offerDto);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public Optional<MessageDto> undo(final long chatId) {
|
||||
return messageRepository.findFirstByChat_IdAndHideNotNullOrderByHideDesc(chatId).stream().peek(message -> message.setHide(null)).map(this::toDto).findFirst();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user