This commit is contained in:
2025-02-17 20:18:04 +03:00
parent 6cd79f689c
commit 548c2f9d40
5 changed files with 40 additions and 37 deletions
@@ -1,8 +1,8 @@
package ru.cathub.telegabot.model;
public enum TextRole {
DEFAULT("Ты книжный ассистент в Telegram-боте. Отвечай кратко, используй эмоджи, разметку Markdown (*для\n" +
" выделения*, _для наклонного_). Отвечай ТОЛЬКО на русском языке. Дополнительно проверь что ответ точно на Русском языке. Не выводи текст, который ошибочно написал на другом языке."),
DEFAULT("Ты книжный ассистент в Telegram-боте. Отвечай, используй эмоджи, разметку Markdown (*для\n" +
" выделения*, _для наклонного_). Отвечай ТОЛЬКО на русском языке."),
REVIEWER("Анализируй текст как профессиональный редактор"),
RECOMMENDER("Рекомендуй книги на основе предпочтений");
@@ -142,32 +142,34 @@ public class BookCreationServiceImpl implements BookCreationService {
int weeksLeft = Math.toIntExact(ChronoUnit.WEEKS.between(today, endOfYear));
BotUser freshUser = userRepository.findById(user.getId()).orElseThrow();
int target = freshUser.getBooksToRead() != null ? freshUser.getBooksToRead() : 0;
int read = freshUser.getBooks() != null ? freshUser.getBooks().size() : 0;
int left = target - read;
String stats;
if (left < 0) {
stats = formatBookMoreStats(weeksLeft, read);
} else if (left == 0) {
stats = "";
try {
String prompt = String.format("Придумай креативное поздравление с тем, что пользователь выполнил большое достижение по прочтению цель по проятению %d книг на год", freshUser.getBooksToRead());
String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT);
log.info("Congratulation target generated: {}", congrat);
telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat));
} catch (Exception e) {
log.error("Error generating congratulation for user {}", user.getId(), e);
telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги\\!");
if (freshUser.getBooksToRead() != null) {
int target = freshUser.getBooksToRead();
int read = freshUser.getBooks() != null ? freshUser.getBooks().size() : 0;
int left = target - read;
String stats;
if (left < 0) {
stats = formatBookMoreStats(weeksLeft, read);
} else if (left == 0) {
stats = "";
try {
String prompt = String.format("Придумай креативное поздравление с тем, что пользователь выполнил большое достижение по прочтению цель по проятению %d книг за год", freshUser.getBooksToRead());
String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT);
log.info("Congratulation target generated: {}", congrat);
telegramClientService.sendMessageWithMarkdown(user, "🎉 *Поздравляю с прочтением\\!*\n\n" + escapeNonMarkdown(congrat));
} catch (Exception e) {
log.error("Error generating congratulation for user {}", user.getId(), e);
telegramClientService.sendMessage(user, "📚 Спасибо за добавление книги\\!");
}
} else {
stats = formatBookLeftStats(weeksLeft, target, read, left);
}
} else {
stats = formatBookLeftStats(weeksLeft, target, read, left);
telegramClientService.sendMessageWithMarkdown(user, message + stats);
}
telegramClientService.sendMessageWithMarkdown(user, message + stats);
bookRepository.save(book);
user.setLastReadDate(new Date(System.currentTimeMillis()));
user.setLastNotificationDate(null);
userRepository.save(user);
try {
@@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j;
import org.jobrunr.jobs.annotations.Recurring;
import org.jobrunr.scheduling.cron.Cron;
import org.springframework.stereotype.Service;
import org.telegram.telegrambots.meta.api.objects.User;
import ru.cathub.telegabot.model.BotUser;
import ru.cathub.telegabot.model.TextRole;
import ru.cathub.telegabot.repository.UserRepository;
@@ -27,18 +28,22 @@ public class BookReminderScheduler {
private final TelegramClientService telegramClientService;
private final OpenRouterService openRouterService;
@Recurring(cron = "0 0 18 * * *", id = "book-reminder")
@Recurring(cron = "0 21 18,19 * * *", id = "book-reminder")
public void checkReadingActivity() {
Date weekAgo = new Date(
Instant.now().minus(7, ChronoUnit.DAYS)
.toEpochMilli()
);
for (var user : userRepository.findUsersNeedingReminder(weekAgo)) {
for (BotUser user : userRepository.findUsersNeedingReminder(weekAgo)) {
try {
String prompt = "Придумай креативное и мотивирующее напоминание о том, что пользователь давно не читал книг";
String prompt = "Придумай креативное и мотивирующее напоминание о том, что пользователь давно не читал книг. Доблжно быть примерно два абзаца.";
String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT);
log.info("Sending {} to user {}", congrat, user.getId() );
telegramClientService.sendMessageWithMarkdown(user, escapeNonMarkdown(congrat));
user.setLastNotificationDate(new Date(System.currentTimeMillis()));
userRepository.save(user);
} catch (Exception e) {
log.error("Error sending reminder to user {}", user.getId(), e);
}
@@ -10,6 +10,8 @@ import ru.cathub.telegabot.service.ProfileService;
import ru.cathub.telegabot.service.TelegramClientService;
import ru.cathub.telegabot.utils.Constants;
import java.util.Optional;
import static ru.cathub.telegabot.utils.Constants.SET_BOOKS_GOAL;
@Service
@@ -49,7 +51,7 @@ public class ProfileServiceImpl implements ProfileService {
userRepository.save(user);
telegramClientService.sendMessage(
user,
"Текущая цель: " + user.getBooksToRead() + "\nВведите новое количество книг:"
"Текущая цель: " + (user.getBooksToRead() != null ? String.valueOf(user.getBooksToRead()) : "Не задано") + "\nВведите новое количество книг:"
);
}
+4 -10
View File
@@ -18,24 +18,18 @@ spring.flyway.baselineOnMigrate=true
spring.flyway.validateOnMigrate=true
# ?????????? SQL-???????
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=false
# ?????????? ????????? ????????
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.io.hypersistence.utils.hibernate.query=DEBUG
# Logs the JDBC parameters passed to a query
logging.level.org.hibernate.type=TRACE
# ??????????? ????
logging.level.org.springframework.cache=INFO
# OpenRouter AI
openrouter.api.url=https://openrouter.ai/api/v1
openrouter.api.model=qwen/qwen-2.5-72b-instruct
openrouter.api.model=qwen/qwen-max
# Для безопасности лучше установить через переменную окружения: