Рефакторинг
This commit is contained in:
parent
c379904d26
commit
245254628a
@ -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());
|
||||
|
@ -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<MessageEntity> 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<Attachment> convertPhoto(List<PhotoSize> photoSizes) {
|
||||
if (photoSizes != null && !photoSizes.isEmpty()) {
|
||||
final PictureGroupAttachment attachment = new PictureGroupAttachment();
|
||||
|
||||
final List<Picture> 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<ContactAttachment> 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<DocumentAttachment> 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<Attachment> convertAttachments(Message message) {
|
||||
final List<MessageEntity> 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<Attachment> 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();
|
||||
}
|
||||
|
||||
}
|
@ -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()));
|
||||
|
||||
|
@ -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
|
||||
|
@ -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<Mail> {
|
||||
|
||||
public MailAutoresponderTelegram(
|
||||
TelegramSending sending,
|
||||
PersonSettingService personSettingService,
|
||||
StorylineService<Mail> storyLineService
|
||||
) {
|
||||
super(sending, personSettingService, storyLineService);
|
||||
super(personSettingService, storyLineService);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<ChatMail> {
|
||||
|
||||
public ChatMailAutoresponderTelegram(
|
||||
PersonSettingService personSettingService,
|
||||
StorylineService<ChatMail> storyLineService
|
||||
) {
|
||||
super(personSettingService, storyLineService);
|
||||
}
|
||||
|
||||
}
|
@ -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<Mail> {
|
||||
|
||||
public MailAutoresponderTelegram(
|
||||
TelegramSending sending,
|
||||
PersonSettingService personSettingService,
|
||||
StorylineService<Mail> storyLineService
|
||||
) {
|
||||
super(sending, personSettingService, storyLineService);
|
||||
super(personSettingService, storyLineService);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user