这些是我实施的方法:
- 接收更新和处理消息的方法
@Override
public void execute(Update update) {
log.info("Обработка сообщения от администратора началась!");
Message message = update.getMessage();
long chatId = message.getChatId();
Integer messageId = message.getMessageId();
List<User> allUsers = userRepository.findAll();
for (User user : allUsers) {
long chatIdUser = user.getChatId();
if (message.getMediaGroupId() == null) {
log.info("не является медиагруппой");
sendBotMessageService.sendCopyMessageFromAdmin(chatIdUser, message);
} else {
log.info("является медиагруппой");
messageIdsForMediaGroup.computeIfAbsent(chatId, k -> new LinkedHashSet<>()).add(messageId);
Set<Integer> messageIds = messageIdsForMediaGroup.get(chatId);
List<Integer> msgIds = new ArrayList<>(messageIds);
log.info("idsList: " + msgIds);
sendBotMessageService.sendCopyMediaGroupFromAdmin(chatIdUser, chatId, msgIds);
}
}
}
- 复制单条消息发送方法:
@Override
public void sendCopyMessageFromAdmin(long chatId, Message message) {
CopyMessage copyMessage = new CopyMessage();
copyMessage.setChatId(chatId);
copyMessage.setFromChatId(message.getChatId());
copyMessage.setMessageId(message.getMessageId());
copyMessage.enableHtml(true);
try {
telegramBot.execute(copyMessage);
log.info("Сообщение от администратора отправилось");
} catch (TelegramApiException e) {
log.error("Сообщение от администратора НЕ отправилось! " + e.getMessage());
}
}
- 复制媒体组发送方法:
@Override
public void sendCopyMediaGroupFromAdmin(long chatId, long chatIdAdmin, List<Integer> messageIds) {
CopyMessages copyMessages = new CopyMessages();
copyMessages.setChatId(chatId);
copyMessages.setFromChatId(chatIdAdmin);
copyMessages.setMessageIds(messageIds);
try {
telegramBot.execute(copyMessages);
log.info("Медиагруппа от администратора отправлена!");
} catch (TelegramApiException e) {
log.error("Медиагруппа от администратора НЕ отправилась!: " + e.getMessage());
}
}
单条消息被正确复制,一切正常。
但是对于媒体组来说,事情就没那么简单了,因为媒体组是一组消息,因此update
它的出现次数与管理员发送照片/视频相册的次数一样多。
因此,方案如下:->更新->保存id
第一个文件->发送一个文件的副本->更新->保存id
第二个文件->将 2 个文件作为相册发送...等等。
问题本身:
为了等待所有接收到的媒体组,可以为发送方法的执行设置什么条件update
,或者我是否在思考错误的方向,需要不同的实现?
或者,是否有可能以某种方式找出哪条消息是最后一条?
附言:我们不知道收到的照片/视频的数量,因此计数器无效。