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