Добавил поддержку получения и отправки видео
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
455a8e1316
commit
266aa852e2
@ -8,6 +8,7 @@ import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|||||||
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.attachment.VideoAttachment;
|
||||||
import dev.struchkov.godfather.telegram.main.context.MailPayload;
|
import dev.struchkov.godfather.telegram.main.context.MailPayload;
|
||||||
import dev.struchkov.haiti.utils.Checker;
|
import dev.struchkov.haiti.utils.Checker;
|
||||||
import dev.struchkov.haiti.utils.Strings;
|
import dev.struchkov.haiti.utils.Strings;
|
||||||
@ -17,6 +18,7 @@ import org.telegram.telegrambots.meta.api.objects.Message;
|
|||||||
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
|
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
|
||||||
import org.telegram.telegrambots.meta.api.objects.PhotoSize;
|
import org.telegram.telegrambots.meta.api.objects.PhotoSize;
|
||||||
import org.telegram.telegrambots.meta.api.objects.User;
|
import org.telegram.telegrambots.meta.api.objects.User;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Video;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -56,6 +58,7 @@ public final class MessageChatMailConvert {
|
|||||||
convertDocument(message.getDocument()).ifPresent(mail::addAttachment);
|
convertDocument(message.getDocument()).ifPresent(mail::addAttachment);
|
||||||
convertContact(message.getContact()).ifPresent(mail::addAttachment);
|
convertContact(message.getContact()).ifPresent(mail::addAttachment);
|
||||||
convertPhoto(message.getPhoto()).ifPresent(mail::addAttachment);
|
convertPhoto(message.getPhoto()).ifPresent(mail::addAttachment);
|
||||||
|
convertVideo(message.getVideo()).ifPresent(mail::addAttachment);
|
||||||
|
|
||||||
final List<MessageEntity> entities = message.getEntities();
|
final List<MessageEntity> entities = message.getEntities();
|
||||||
if (entities != null) {
|
if (entities != null) {
|
||||||
@ -121,6 +124,17 @@ public final class MessageChatMailConvert {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Optional<VideoAttachment> convertVideo(Video video) {
|
||||||
|
if (video != null) {
|
||||||
|
final VideoAttachment attachment = new VideoAttachment();
|
||||||
|
attachment.setFileId(video.getFileId());
|
||||||
|
attachment.setFileSize(video.getFileSize());
|
||||||
|
attachment.setFileName(video.getFileName());
|
||||||
|
return Optional.of(attachment);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
private static List<Attachment> convertAttachments(Message message) {
|
private static List<Attachment> convertAttachments(Message message) {
|
||||||
final List<MessageEntity> entities = message.getEntities();
|
final List<MessageEntity> entities = message.getEntities();
|
||||||
if (Checker.checkNotEmpty(entities)) {
|
if (Checker.checkNotEmpty(entities)) {
|
||||||
|
@ -8,6 +8,7 @@ import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|||||||
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.attachment.VideoAttachment;
|
||||||
import dev.struchkov.godfather.telegram.main.context.MailPayload;
|
import dev.struchkov.godfather.telegram.main.context.MailPayload;
|
||||||
import dev.struchkov.haiti.utils.Checker;
|
import dev.struchkov.haiti.utils.Checker;
|
||||||
import dev.struchkov.haiti.utils.Strings;
|
import dev.struchkov.haiti.utils.Strings;
|
||||||
@ -17,6 +18,7 @@ import org.telegram.telegrambots.meta.api.objects.Document;
|
|||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
|
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
|
||||||
import org.telegram.telegrambots.meta.api.objects.PhotoSize;
|
import org.telegram.telegrambots.meta.api.objects.PhotoSize;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.Video;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -55,6 +57,7 @@ public final class MessageMailConvert {
|
|||||||
convertDocument(message.getDocument()).ifPresent(mail::addAttachment);
|
convertDocument(message.getDocument()).ifPresent(mail::addAttachment);
|
||||||
convertContact(message.getContact()).ifPresent(mail::addAttachment);
|
convertContact(message.getContact()).ifPresent(mail::addAttachment);
|
||||||
convertPhoto(message.getPhoto()).ifPresent(mail::addAttachment);
|
convertPhoto(message.getPhoto()).ifPresent(mail::addAttachment);
|
||||||
|
convertVideo(message.getVideo()).ifPresent(mail::addAttachment);
|
||||||
|
|
||||||
final List<MessageEntity> entities = message.getEntities();
|
final List<MessageEntity> entities = message.getEntities();
|
||||||
if (entities != null) {
|
if (entities != null) {
|
||||||
@ -120,6 +123,17 @@ public final class MessageMailConvert {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Optional<VideoAttachment> convertVideo(Video video) {
|
||||||
|
if (video != null) {
|
||||||
|
final VideoAttachment attachment = new VideoAttachment();
|
||||||
|
attachment.setFileId(video.getFileId());
|
||||||
|
attachment.setFileSize(video.getFileSize());
|
||||||
|
attachment.setFileName(video.getFileName());
|
||||||
|
return Optional.of(attachment);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
private static List<Attachment> convertAttachments(Message message) {
|
private static List<Attachment> convertAttachments(Message message) {
|
||||||
final List<MessageEntity> entities = message.getEntities();
|
final List<MessageEntity> entities = message.getEntities();
|
||||||
if (Checker.checkNotEmpty(entities)) {
|
if (Checker.checkNotEmpty(entities)) {
|
||||||
|
@ -9,6 +9,7 @@ import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
|||||||
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
import dev.struchkov.godfather.telegram.domain.attachment.Picture;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.TelegramAttachmentType;
|
import dev.struchkov.godfather.telegram.domain.attachment.TelegramAttachmentType;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.attachment.VideoAttachment;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -57,6 +58,17 @@ public final class Attachments {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Optional<VideoAttachment> findFirstVideo(Collection<Attachment> attachments) {
|
||||||
|
if (checkNotEmpty(attachments)) {
|
||||||
|
for (Attachment attachment : attachments) {
|
||||||
|
if (isVideo(attachment)) {
|
||||||
|
return Optional.of((VideoAttachment) attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public static Optional<PictureGroupAttachment> findFirstPictureGroup(Collection<Attachment> attachments) {
|
public static Optional<PictureGroupAttachment> findFirstPictureGroup(Collection<Attachment> attachments) {
|
||||||
if (checkNotEmpty(attachments)) {
|
if (checkNotEmpty(attachments)) {
|
||||||
for (Attachment attachment : attachments) {
|
for (Attachment attachment : attachments) {
|
||||||
@ -153,4 +165,9 @@ public final class Attachments {
|
|||||||
return TelegramAttachmentType.BUTTON_CLICK.name().equals(attachment.getType());
|
return TelegramAttachmentType.BUTTON_CLICK.name().equals(attachment.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isVideo(Attachment attachment) {
|
||||||
|
isNotNull(attachment);
|
||||||
|
return TelegramAttachmentType.VIDEO.name().equals(attachment.getType());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ public enum TelegramAttachmentType {
|
|||||||
PICTURE,
|
PICTURE,
|
||||||
LINK,
|
LINK,
|
||||||
COMMAND,
|
COMMAND,
|
||||||
BUTTON_CLICK
|
BUTTON_CLICK,
|
||||||
|
VIDEO
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.domain.attachment;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.main.domain.content.Attachment;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class VideoAttachment extends Attachment {
|
||||||
|
|
||||||
|
private String fileId;
|
||||||
|
private Long fileSize;
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
public VideoAttachment() {
|
||||||
|
super(TelegramAttachmentType.VIDEO.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -12,6 +12,7 @@ import dev.struchkov.godfather.telegram.domain.attachment.DocumentAttachment;
|
|||||||
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.LinkAttachment;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
import dev.struchkov.godfather.telegram.domain.attachment.PictureGroupAttachment;
|
||||||
import dev.struchkov.godfather.telegram.domain.attachment.TelegramAttachmentType;
|
import dev.struchkov.godfather.telegram.domain.attachment.TelegramAttachmentType;
|
||||||
|
import dev.struchkov.godfather.telegram.domain.attachment.VideoAttachment;
|
||||||
import dev.struchkov.haiti.utils.ObjectUtils;
|
import dev.struchkov.haiti.utils.ObjectUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -39,6 +40,7 @@ public class TelegramAttachmentDeserializer extends StdDeserializer<Attachment>
|
|||||||
case PICTURE -> parser.getCodec().treeToValue(node, PictureGroupAttachment.class);
|
case PICTURE -> parser.getCodec().treeToValue(node, PictureGroupAttachment.class);
|
||||||
case LINK -> parser.getCodec().treeToValue(node, LinkAttachment.class);
|
case LINK -> parser.getCodec().treeToValue(node, LinkAttachment.class);
|
||||||
case COMMAND -> parser.getCodec().treeToValue(node, CommandAttachment.class);
|
case COMMAND -> parser.getCodec().treeToValue(node, CommandAttachment.class);
|
||||||
|
case VIDEO -> parser.getCodec().treeToValue(node, VideoAttachment.class);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package dev.struchkov.godfather.telegram.simple.domain.attachment.send;
|
||||||
|
|
||||||
|
import dev.struchkov.godfather.simple.domain.content.send.SendAttachment;
|
||||||
|
import dev.struchkov.godfather.simple.domain.content.send.SendFile;
|
||||||
|
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 VideoSendAttachment implements SendAttachment {
|
||||||
|
|
||||||
|
public static final String TYPE = "VIDEO";
|
||||||
|
|
||||||
|
private SendFile sendFile;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,6 +14,7 @@ import dev.struchkov.godfather.telegram.simple.context.repository.SenderReposito
|
|||||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramConnect;
|
import dev.struchkov.godfather.telegram.simple.context.service.TelegramConnect;
|
||||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending;
|
import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending;
|
||||||
import dev.struchkov.godfather.telegram.simple.domain.attachment.send.PhotoSendAttachment;
|
import dev.struchkov.godfather.telegram.simple.domain.attachment.send.PhotoSendAttachment;
|
||||||
|
import dev.struchkov.godfather.telegram.simple.domain.attachment.send.VideoSendAttachment;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -22,6 +23,7 @@ import org.telegram.telegrambots.meta.api.methods.invoices.SendInvoice;
|
|||||||
import org.telegram.telegrambots.meta.api.methods.send.SendDocument;
|
import org.telegram.telegrambots.meta.api.methods.send.SendDocument;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendPhoto;
|
import org.telegram.telegrambots.meta.api.methods.send.SendPhoto;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendVideo;
|
||||||
import org.telegram.telegrambots.meta.api.methods.updatingmessages.DeleteMessage;
|
import org.telegram.telegrambots.meta.api.methods.updatingmessages.DeleteMessage;
|
||||||
import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
|
import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText;
|
||||||
import org.telegram.telegrambots.meta.api.objects.InputFile;
|
import org.telegram.telegrambots.meta.api.objects.InputFile;
|
||||||
@ -163,6 +165,8 @@ public class TelegramSender implements TelegramSending {
|
|||||||
return sendPhoto(boxAnswer, preparedAnswer);
|
return sendPhoto(boxAnswer, preparedAnswer);
|
||||||
case "DOCUMENT":
|
case "DOCUMENT":
|
||||||
return sendDocument(boxAnswer, preparedAnswer);
|
return sendDocument(boxAnswer, preparedAnswer);
|
||||||
|
case "VIDEO":
|
||||||
|
return sendVideo(boxAnswer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId);
|
return sendMessage(recipientTelegramId, boxAnswer, preparedAnswer, saveMessageId);
|
||||||
@ -277,6 +281,51 @@ public class TelegramSender implements TelegramSending {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Optional<SentBox> sendVideo(BoxAnswer boxAnswer) {
|
||||||
|
final VideoSendAttachment video = (VideoSendAttachment) boxAnswer.getAttachment();
|
||||||
|
final SendFile sendFile = video.getSendFile();
|
||||||
|
|
||||||
|
final SendVideo sendVideo = new SendVideo();
|
||||||
|
sendVideo.setCaption(boxAnswer.getMessage());
|
||||||
|
sendVideo.setChatId(boxAnswer.getRecipientPersonId());
|
||||||
|
sendVideo.setVideo(convertInputFile(sendFile));
|
||||||
|
sendVideo.setReplyMarkup(convertKeyBoard(boxAnswer.getKeyBoard()));
|
||||||
|
|
||||||
|
boxAnswer.getPayLoad(DISABLE_NOTIFICATION).ifPresent(isDisable -> {
|
||||||
|
if (TRUE.equals(isDisable)) sendVideo.disableNotification();
|
||||||
|
});
|
||||||
|
boxAnswer.getPayLoad(ENABLE_MARKDOWN).ifPresent(isEnable -> {
|
||||||
|
if (TRUE.equals(isEnable)) sendVideo.setParseMode(ParseMode.MARKDOWN);
|
||||||
|
});
|
||||||
|
boxAnswer.getPayLoad(ENABLE_HTML).ifPresent(isEnable -> {
|
||||||
|
if (TRUE.equals(isEnable)) sendVideo.setParseMode(ParseMode.HTML);
|
||||||
|
});
|
||||||
|
|
||||||
|
Message execute = null;
|
||||||
|
try {
|
||||||
|
execute = absSender.execute(sendVideo);
|
||||||
|
} catch (TelegramApiRequestException e) {
|
||||||
|
throw new TelegramSenderException(e.getApiResponse(), e);
|
||||||
|
} catch (TelegramApiException e) {
|
||||||
|
throw new TelegramSenderException(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
if (checkNotNull(execute)) {
|
||||||
|
if (checkNotNull(senderRepository)) {
|
||||||
|
senderRepository.saveLastSendMessage(boxAnswer.getRecipientPersonId(), execute.getMessageId().toString());
|
||||||
|
}
|
||||||
|
return Optional.of(
|
||||||
|
SentBox.builder()
|
||||||
|
.personId(boxAnswer.getRecipientPersonId())
|
||||||
|
.messageId(execute.getMessageId().toString())
|
||||||
|
.sentAnswer(boxAnswer)
|
||||||
|
.originalAnswer(boxAnswer)
|
||||||
|
.sentMail(MessageMailConvert.apply(execute))
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
private Optional<SentBox> sendDocument(BoxAnswer boxAnswer, BoxAnswer preparedAnswer) {
|
private Optional<SentBox> sendDocument(BoxAnswer boxAnswer, BoxAnswer preparedAnswer) {
|
||||||
final SendDocument sendDocument = new SendDocument();
|
final SendDocument sendDocument = new SendDocument();
|
||||||
sendDocument.setCaption(boxAnswer.getMessage());
|
sendDocument.setCaption(boxAnswer.getMessage());
|
||||||
|
Loading…
Reference in New Issue
Block a user