From 245254628a021afac761c4d3f503fa3940fd6108 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Wed, 15 Mar 2023 20:07:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/consumer/CallbackQueryConvert.java | 2 +- .../main/consumer/MessageChatMailConvert.java | 163 ++++++++++++++++++ .../main/consumer/MessageMailConvert.java | 3 +- .../consumer/EventDistributorService.java | 31 +++- .../core/MailAutoresponderTelegram.java | 4 +- .../core/ChatMailAutoresponderTelegram.java | 22 +++ .../core/MailAutoresponderTelegram.java | 4 +- .../core/service/TelegramServiceImpl.java | 5 +- .../telegram/domain/ClientBotCommand.java | 36 ++-- 9 files changed, 233 insertions(+), 37 deletions(-) create mode 100644 telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java create mode 100644 telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/ChatMailAutoresponderTelegram.java diff --git a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java index 23d3a80..2e8c6b9 100644 --- a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java +++ b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/CallbackQueryConvert.java @@ -24,7 +24,7 @@ public class CallbackQueryConvert { mail.addAttachment(convertToButtonClick(callbackData, callbackQuery.getMessage().getMessageId())); final Long chatId = callbackQuery.getMessage().getChatId(); - mail.setPersonId(chatId != null ? chatId.toString() : null); + mail.setFromPersonId(chatId != null ? chatId.toString() : null); final User user = callbackQuery.getFrom(); mail.setFirstName(user.getFirstName()); diff --git a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java new file mode 100644 index 0000000..c4120bd --- /dev/null +++ b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageChatMailConvert.java @@ -0,0 +1,163 @@ +package dev.struchkov.godfather.telegram.main.consumer; + +import dev.struchkov.godfather.main.domain.content.Attachment; +import dev.struchkov.godfather.main.domain.content.ChatMail; +import dev.struchkov.godfather.telegram.domain.attachment.CommandAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.ContactAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment; +import dev.struchkov.godfather.telegram.domain.attachment.Picture; +import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment; +import dev.struchkov.godfather.telegram.main.context.MailPayload; +import dev.struchkov.haiti.utils.Checker; +import dev.struchkov.haiti.utils.Strings; +import org.telegram.telegrambots.meta.api.objects.Contact; +import org.telegram.telegrambots.meta.api.objects.Document; +import org.telegram.telegrambots.meta.api.objects.Message; +import org.telegram.telegrambots.meta.api.objects.MessageEntity; +import org.telegram.telegrambots.meta.api.objects.PhotoSize; +import org.telegram.telegrambots.meta.api.objects.User; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import static dev.struchkov.haiti.utils.Exceptions.utilityClass; + +/** + * TODO: Добавить описание класса. + * + * @author upagge [18.08.2019] + */ +public final class MessageChatMailConvert { + + private MessageChatMailConvert() { + utilityClass(); + } + + public static ChatMail apply(Message message) { + final ChatMail mail = new ChatMail(); + + final Long chatId = message.getChatId(); + mail.setId(message.getMessageId().toString()); + mail.setChatId(chatId.toString()); + mail.setText(message.getText()); + mail.setCreateDate(LocalDateTime.ofInstant(Instant.ofEpochSecond(message.getDate()), ZoneId.systemDefault())); + + final User fromUser = message.getFrom(); + mail.setFirstName(fromUser.getFirstName()); + mail.setLastName(fromUser.getLastName()); + mail.setPayload(MailPayload.USERNAME, fromUser.getUserName()); + mail.setFromPersonId(fromUser.getId().toString()); + + convertDocument(message.getDocument()).ifPresent(mail::addAttachment); + convertContact(message.getContact()).ifPresent(mail::addAttachment); + convertPhoto(message.getPhoto()).ifPresent(mail::addAttachment); + + final List entities = message.getEntities(); + if (entities != null) { + mail.addAttachments(convertAttachments(message)); + } + + if (message.getReplyToMessage() != null) { + mail.setForwardMail(Collections.singletonList(apply(message.getReplyToMessage()))); + } + + return mail; + } + + private static Optional convertPhoto(List photoSizes) { + if (photoSizes != null && !photoSizes.isEmpty()) { + final PictureGroupAttachment attachment = new PictureGroupAttachment(); + + final List pictures = photoSizes.stream() + .map(photoSize -> { + final Picture picture = new Picture(); + picture.setFileSize(photoSize.getFileSize()); + picture.setFileId(photoSize.getFileId()); + picture.setHeight(photoSize.getHeight()); + picture.setWeight(photoSize.getWidth()); + picture.setFileUniqueId(photoSize.getFileUniqueId()); + return picture; + }).toList(); + + attachment.setPictureSizes(pictures); + + return Optional.of(attachment); + } + return Optional.empty(); + } + + private static Optional convertContact(Contact contact) { + if (contact != null) { + final ContactAttachment attachment = new ContactAttachment(); + attachment.setPhoneNumber(contact.getPhoneNumber()); + attachment.setUserId(contact.getUserId()); + attachment.setFirstName(contact.getFirstName()); + attachment.setLastName(contact.getLastName()); + if (contact.getVCard() != null) { + attachment.setOwner(false); + attachment.setVCard(contact.getVCard()); + } else { + attachment.setOwner(true); + } + return Optional.of(attachment); + } + return Optional.empty(); + } + + private static Optional convertDocument(Document document) { + if (document != null) { + final DocumentAttachment attachment = new DocumentAttachment(); + attachment.setFileId(document.getFileId()); + attachment.setFileSize(document.getFileSize()); + attachment.setFileName(document.getFileName()); + attachment.setMimeType(document.getMimeType()); + return Optional.of(attachment); + } + return Optional.empty(); + } + + private static List convertAttachments(Message message) { + final List entities = message.getEntities(); + if (Checker.checkNotEmpty(entities)) { + return entities.stream() + .map(entity -> convertEntity(message, entity)) + .filter(Optional::isPresent) + .map(Optional::get) + .toList(); + } + return Collections.emptyList(); + } + + private static Optional convertEntity(Message message, MessageEntity entity) { + switch (entity.getType()) { + case "text_link" -> { + return Optional.of(entity.getUrl()) + .map(LinkAttachment::new); + } + case "url" -> { + return Optional.of(entity.getText()) + .map(LinkAttachment::new); + } + case "bot_command" -> { + final String commandValue = entity.getText(); + String commandArg = message.getText().replace(commandValue, ""); + if (Checker.checkNotEmpty(commandArg)) { + commandArg = commandArg.substring(1); + } + final CommandAttachment commandAttachment = new CommandAttachment(); + commandAttachment.setValue(commandValue); + commandAttachment.setCommandType(commandValue.replace("/", "")); + commandAttachment.setArg(Strings.EMPTY.equals(commandArg) ? null : commandArg); + commandAttachment.setRawValue(message.getText()); + return Optional.of(commandAttachment); + } + } + return Optional.empty(); + } + +} diff --git a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java index 35fe655..8649fd8 100644 --- a/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java +++ b/telegram-consumer/telegram-consumer-main/src/main/java/dev/struchkov/godfather/telegram/main/consumer/MessageMailConvert.java @@ -40,9 +40,10 @@ public final class MessageMailConvert { public static Mail apply(Message message) { final Mail mail = new Mail(); + final Long chatId = message.getChatId(); mail.setId(message.getMessageId().toString()); - mail.setPersonId(chatId != null ? chatId.toString() : null); + mail.setFromPersonId(chatId != null ? chatId.toString() : null); mail.setText(message.getText()); mail.setCreateDate(LocalDateTime.ofInstant(Instant.ofEpochSecond(message.getDate()), ZoneId.systemDefault())); diff --git a/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java b/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java index d83eb27..d6f857a 100644 --- a/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java +++ b/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java @@ -1,10 +1,12 @@ package dev.struchkov.godfather.telegram.simple.consumer; +import dev.struchkov.godfather.main.domain.content.ChatMail; import dev.struchkov.godfather.main.domain.content.Mail; import dev.struchkov.godfather.simple.context.service.EventHandler; import dev.struchkov.godfather.telegram.domain.event.Subscribe; import dev.struchkov.godfather.telegram.domain.event.Unsubscribe; import dev.struchkov.godfather.telegram.main.consumer.CallbackQueryConvert; +import dev.struchkov.godfather.telegram.main.consumer.MessageChatMailConvert; import dev.struchkov.godfather.telegram.main.consumer.MessageMailConvert; import dev.struchkov.godfather.telegram.main.consumer.SubscribeConvert; import dev.struchkov.godfather.telegram.main.consumer.UnsubscribeConvert; @@ -42,27 +44,48 @@ public class EventDistributorService implements EventDistributor { final CallbackQuery callbackQuery = update.getCallbackQuery(); if (message != null) { if (!isEvent(message)) { - getHandler(Mail.TYPE).ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(MessageMailConvert.apply(message)))); + processionMessage(message); return; } } if (callbackQuery != null) { - getHandler(Mail.TYPE).ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(CallbackQueryConvert.apply(callbackQuery)))); + processionCallback(callbackQuery); return; } if (update.getMyChatMember() != null) { final ChatMemberUpdated chatMember = update.getMyChatMember(); if ("kicked".equals(chatMember.getNewChatMember().getStatus())) { - getHandler(Unsubscribe.TYPE).ifPresent(providers -> providers.forEach(provider -> provider.handle(UnsubscribeConvert.apply(chatMember)))); + getHandler(Unsubscribe.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(UnsubscribeConvert.apply(chatMember)))); return; } if ("member".equals(chatMember.getNewChatMember().getStatus())) { - getHandler(Subscribe.TYPE).ifPresent(eventProviders -> eventProviders.forEach(eventProvider -> eventProvider.handle(SubscribeConvert.apply(chatMember)))); + getHandler(Subscribe.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(SubscribeConvert.apply(chatMember)))); return; } } } + private void processionCallback(CallbackQuery callbackQuery) { + final Long fromId = callbackQuery.getMessage().getChat().getId(); + if (fromId < 0) { + + } else { + final Mail mail = CallbackQueryConvert.apply(callbackQuery); + getHandler(Mail.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail))); + } + } + + private void processionMessage(Message message) { + final Long fromId = message.getChat().getId(); + if (fromId < 0) { + final ChatMail chatMail = MessageChatMailConvert.apply(message); + getHandler(ChatMail.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(chatMail))); + } else { + final Mail mail = MessageMailConvert.apply(message); + getHandler(Mail.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail))); + } + } + private boolean isEvent(Message message) { return message.getChannelChatCreated() != null || message.getDeleteChatPhoto() != null diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/MailAutoresponderTelegram.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/MailAutoresponderTelegram.java index e997c1e..6259e1e 100644 --- a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/MailAutoresponderTelegram.java +++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/MailAutoresponderTelegram.java @@ -4,7 +4,6 @@ import dev.struchkov.godfather.main.domain.content.Mail; import dev.struchkov.godfather.quarkus.context.service.PersonSettingService; import dev.struchkov.godfather.quarkus.core.GeneralAutoResponder; import dev.struchkov.godfather.quarkus.core.service.StorylineService; -import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramSending; /** * TODO: Добавить описание класса. @@ -14,11 +13,10 @@ import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramSending; public class MailAutoresponderTelegram extends GeneralAutoResponder { public MailAutoresponderTelegram( - TelegramSending sending, PersonSettingService personSettingService, StorylineService storyLineService ) { - super(sending, personSettingService, storyLineService); + super(personSettingService, storyLineService); } } diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/ChatMailAutoresponderTelegram.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/ChatMailAutoresponderTelegram.java new file mode 100644 index 0000000..7c164ad --- /dev/null +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/ChatMailAutoresponderTelegram.java @@ -0,0 +1,22 @@ +package dev.struchkov.godfather.telegram.simple.core; + +import dev.struchkov.godfather.main.domain.content.ChatMail; +import dev.struchkov.godfather.simple.context.service.PersonSettingService; +import dev.struchkov.godfather.simple.core.GeneralAutoResponder; +import dev.struchkov.godfather.simple.core.service.StorylineService; + +/** + * TODO: Добавить описание класса. + * + * @author upagge [18.08.2019] + */ +public class ChatMailAutoresponderTelegram extends GeneralAutoResponder { + + public ChatMailAutoresponderTelegram( + PersonSettingService personSettingService, + StorylineService storyLineService + ) { + super(personSettingService, storyLineService); + } + +} diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/MailAutoresponderTelegram.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/MailAutoresponderTelegram.java index 3141daa..7b843c8 100644 --- a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/MailAutoresponderTelegram.java +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/MailAutoresponderTelegram.java @@ -4,7 +4,6 @@ import dev.struchkov.godfather.main.domain.content.Mail; import dev.struchkov.godfather.simple.context.service.PersonSettingService; import dev.struchkov.godfather.simple.core.GeneralAutoResponder; import dev.struchkov.godfather.simple.core.service.StorylineService; -import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending; /** * TODO: Добавить описание класса. @@ -14,11 +13,10 @@ import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending; public class MailAutoresponderTelegram extends GeneralAutoResponder { public MailAutoresponderTelegram( - TelegramSending sending, PersonSettingService personSettingService, StorylineService storyLineService ) { - super(sending, personSettingService, storyLineService); + super(personSettingService, storyLineService); } } diff --git a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/TelegramServiceImpl.java b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/TelegramServiceImpl.java index 3408a60..ddd94ba 100644 --- a/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/TelegramServiceImpl.java +++ b/telegram-core/telegram-core-simple/src/main/java/dev/struchkov/godfather/telegram/simple/core/service/TelegramServiceImpl.java @@ -94,7 +94,10 @@ public class TelegramServiceImpl implements TelegramService { final List<@NotNull BotCommand> noLangCommands = botCommands.stream() .filter(command -> checkNull(command.getLang())) - .map(clientCommand -> BotCommand.builder().command(clientCommand.getKey()).description(clientCommand.getDescription()).build()) + .map(clientCommand -> BotCommand.builder() + .command(clientCommand.getKey()) + .description(clientCommand.getDescription()) + .build()) .toList(); try { diff --git a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/ClientBotCommand.java b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/ClientBotCommand.java index 0430056..51c54b4 100644 --- a/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/ClientBotCommand.java +++ b/telegram-domain/telegram-domain-main/src/main/java/dev/struchkov/godfather/telegram/domain/ClientBotCommand.java @@ -1,33 +1,21 @@ package dev.struchkov.godfather.telegram.domain; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class ClientBotCommand { private String key; private String description; private String lang; - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getLang() { - return lang; - } - - public void setLang(String lang) { - this.lang = lang; - } - }