forked from Sanders/TelegaBot
Fix AI
This commit is contained in:
@@ -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Введите новое количество книг:"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
# Для безопасности лучше установить через переменную окружения:
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user