godcrm/backend/routes/v3/telegram/shared.js
GOD CRM Release f89e074dd1
Some checks failed
CI / Lint / Typecheck / Test / Build (push) Has been cancelled
CI / PostgreSQL Integration Tests (push) Has been cancelled
GOD CRM — public scrubbed snapshot
Governed substrate for autonomous agents: scoped identity (passports),
audited actions, MCP workspace. Infra IPs and secrets redacted for public release.
2026-08-10 04:01:45 +03:00

63 lines
4.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// backend/routes/v3/telegram/shared.js
// Shared utilities, constants, and imports for Telegram bot modules
import { apiLogger } from '../../../utils/logger.js';
import { sendMessage, sendToTopic, parseAgentCommand, getFileUrl, sendChannelPost, sendChannelPhoto, getChannelMemberCount } from '../../../services/TelegramService.js';
import { dbRun, dbGet, dbAll, isPostgres, safeJsonParse } from '../../../database/connection.js';
import ChainHandoffService from '../../../services/ChainHandoffService.js';
// ===== FORTUNE WHEEL — BREAK ACTIVITIES =====
// Hardcoded list of break activities for the Fortune Wheel.
// Each has emoji, name, duration (min), and description.
// In the future this can be moved to a break_activities DB table.
const BREAK_ACTIVITIES = [
{ emoji: '🧘', name: 'Медитация', duration: 5, description: 'Закрой глаза, сфокусируйся на дыхании. Вдох 4 сек — задержка 4 сек — выдох 6 сек.' },
{ emoji: '🚶', name: 'Прогулка', duration: 10, description: 'Выйди на свежий воздух и пройдись. Не бери телефон!' },
{ emoji: '💪', name: 'Отжимания', duration: 3, description: 'Сделай 3 подхода отжиманий. Между подходами — 30 сек отдыха.' },
{ emoji: '☕', name: 'Чай/Кофе пауза', duration: 7, description: 'Завари чай или кофе. Пей медленно, наслаждаясь вкусом.' },
{ emoji: '👀', name: 'Гимнастика для глаз', duration: 3, description: 'Посмотри вдаль 20 сек, потом на близкий предмет 20 сек. Повтори 5 раз. Поморгай.' },
{ emoji: '🎵', name: 'Музыкальная пауза', duration: 5, description: 'Включи любимый трек и просто послушай. Можно потанцевать!' },
{ emoji: '🧊', name: 'Холодное умывание', duration: 2, description: 'Умойся холодной водой. Бодрит и перезагружает мозг.' },
{ emoji: '📖', name: 'Чтение', duration: 10, description: 'Почитай что-нибудь не по работе. Книга, статья, комикс — что угодно.' },
{ emoji: '🤸', name: 'Растяжка', duration: 5, description: 'Потянись, разомни шею, плечи, спину. Наклоны, повороты.' },
{ emoji: '🎨', name: 'Дудлинг', duration: 5, description: 'Возьми ручку и рисуй что попало. Узоры, каракули, лица — не думай.' },
{ emoji: '💧', name: 'Водный перерыв', duration: 2, description: 'Выпей стакан воды. Медленно, маленькими глотками.' },
{ emoji: '🌬️', name: 'Дыхательная практика', duration: 4, description: 'Техника 4-7-8: вдох 4 сек, задержка 7 сек, выдох 8 сек. 4 цикла.' },
{ emoji: '🐾', name: 'Погладь кота/собаку', duration: 5, description: 'Если рядом есть питомец — удели ему внимание. Нет питомца? Посмотри смешные видео с животными.' },
{ emoji: '🧹', name: 'Мини-уборка', duration: 5, description: 'Протри стол, разложи вещи, выброси мусор. Чистое пространство = чистый ум.' },
{ emoji: '🎮', name: 'Мини-игра', duration: 5, description: 'Сыграй в быструю мобильную игру или головоломку. Только 5 минут!' },
];
/**
* Select a random break activity and format a Fortune Wheel message.
* @returns {{ activity: Object, message: string }}
*/
function spinFortuneWheel() {
const activity = BREAK_ACTIVITIES[Math.floor(Math.random() * BREAK_ACTIVITIES.length)];
const message =
`🎡 *КОЛЕСО ФОРТУНЫ!*\n\n` +
`Выпало: ${activity.emoji} *${activity.name}*\n` +
`⏱ Время: ${activity.duration} мин\n\n` +
`${activity.description}\n\n` +
`_Следующий перерыв через 40 минут!_`;
return { activity, message };
}
export {
apiLogger,
sendMessage,
sendToTopic,
parseAgentCommand,
getFileUrl,
sendChannelPost,
sendChannelPhoto,
getChannelMemberCount,
dbRun,
dbGet,
dbAll,
isPostgres,
safeJsonParse,
ChainHandoffService,
BREAK_ACTIVITIES,
spinFortuneWheel,
};