forked from Sanders/TelegaBot
48 lines
1.8 KiB
Java
48 lines
1.8 KiB
Java
package ru.cathub.telegabot.service.impl;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.jobrunr.jobs.annotations.Recurring;
|
|
import org.jobrunr.scheduling.cron.Cron;
|
|
import org.springframework.stereotype.Service;
|
|
import ru.cathub.telegabot.model.BotUser;
|
|
import ru.cathub.telegabot.model.TextRole;
|
|
import ru.cathub.telegabot.repository.UserRepository;
|
|
import ru.cathub.telegabot.service.OpenRouterService;
|
|
import ru.cathub.telegabot.service.TelegramClientService;
|
|
import ru.cathub.telegabot.utils.BookFormatUtils;
|
|
|
|
import java.sql.Date;
|
|
import java.time.Instant;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.util.List;
|
|
|
|
import static ru.cathub.telegabot.utils.BookFormatUtils.escapeNonMarkdown;
|
|
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
@Slf4j
|
|
public class BookReminderScheduler {
|
|
private final UserRepository userRepository;
|
|
private final TelegramClientService telegramClientService;
|
|
private final OpenRouterService openRouterService;
|
|
|
|
@Recurring(cron = "0 0 18 * * *", id = "book-reminder")
|
|
public void checkReadingActivity() {
|
|
Date weekAgo = new Date(
|
|
Instant.now().minus(7, ChronoUnit.DAYS)
|
|
.toEpochMilli()
|
|
);
|
|
|
|
for (var user : userRepository.findUsersNeedingReminder(weekAgo)) {
|
|
try {
|
|
String prompt = "Придумай креативное и мотивирующее напоминание о том, что пользователь давно не читал книг";
|
|
String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT);
|
|
telegramClientService.sendMessageWithMarkdown(user, escapeNonMarkdown(congrat));
|
|
} catch (Exception e) {
|
|
log.error("Error sending reminder to user {}", user.getId(), e);
|
|
}
|
|
};
|
|
}
|
|
}
|