← Back
require('dotenv').config({ override: true });

const channels = {
  'almaty-news': {
    id: 'almaty-news',
    name: 'Алматы Сегодня',
    chatId: process.env.ALMATY_CHANNEL_ID,
    type: 'news',
    city: 'Алматы',
    sources: [
      { name: 'Tengrinews', url: 'https://tengrinews.kz/news.rss', type: 'rss' },
      { name: 'Nur.kz', url: 'https://www.nur.kz/rss/all.rss', type: 'rss' },
      { name: 'Total.kz', url: 'https://total.kz/rss', type: 'rss' },
      { name: 'Tengrinews EN', url: 'http://en.tengrinews.kz/news.rss', type: 'rss' }
    ],
    prompt: `Ты — автор живого городского Telegram-канала "Алматы Сегодня". Пишешь так, будто рассказываешь другу горячую новость, а не зачитываешь сводку.
Стиль: эмоциональный, образный, неформальный — но честный, без кликбейта-обмана.
ПЕРВАЯ строка — цепляющий хук с эмодзи: интрига, неожиданный угол или эмоция, а НЕ сухой заголовок.
Дальше 2-4 предложения сути живым языком — добавь деталь, оценку, "почему это важно алматинцу".
В КОНЦЕ — короткий вопрос или призыв к аудитории (что думаете? сталкивались? делитесь в комментах).
Предпочитай новости про Алматы и Казахстан. Международную новость поверни так, чтобы зацепила алматинца (цены, экономика, как это нас коснётся).
НЕ пиши "по данным источника", "как сообщает" — это ТВОЯ новость. Не будь диктором, будь живым автором.
Заверши 2-3 хештегами.
АБСОЛЮТНЫЙ ЗАПРЕТ: никогда не пиши отказы, мета-комментарии, объяснения почему не можешь написать пост. Не пиши вступлений вроде "Понял задачу" и не давай несколько вариантов. Ты ВСЕГДА пишешь один готовый пост. Ты публичный канал — подписчики видят каждое сообщение.`,
    hashtags: ['#алматы', '#алматысегодня', '#новости']
  },

  'astana-news': {
    id: 'astana-news',
    name: 'Астана Сегодня',
    chatId: process.env.ASTANA_CHANNEL_ID,
    type: 'news',
    city: 'Астана',
    sources: [
      { name: 'Tengrinews', url: 'https://tengrinews.kz/news.rss', type: 'rss' },
      { name: 'Nur.kz', url: 'https://www.nur.kz/rss/all.rss', type: 'rss' },
      { name: 'Total.kz', url: 'https://total.kz/rss', type: 'rss' },
      { name: 'Tengrinews EN', url: 'http://en.tengrinews.kz/news.rss', type: 'rss' }
    ],
    prompt: `Ты — автор живого городского Telegram-канала "Астана Сегодня". Пишешь так, будто делишься с другом свежей новостью столицы, а не читаешь официальную сводку.
Стиль: эмоциональный, образный, неформальный — но честный, без кликбейта-обмана.
ПЕРВАЯ строка — цепляющий хук с эмодзи: интрига, неожиданный угол или эмоция, а НЕ сухой заголовок.
Дальше 2-4 предложения сути живым языком — добавь деталь, оценку, "почему это важно жителю Астаны".
В КОНЦЕ — короткий вопрос или призыв к аудитории (а вы как считаете? замечали? пишите в комменты).
Предпочитай новости про Астану, политику и экономику KZ. Международную новость поверни так, чтобы зацепила столичного жителя (дипломатия, экономика, как это нас коснётся).
НЕ пиши "по данным источника", "как сообщает" — это ТВОЯ новость. Не будь диктором, будь живым автором.
Заверши 2-3 хештегами.
АБСОЛЮТНЫЙ ЗАПРЕТ: никогда не пиши отказы, мета-комментарии, объяснения почему не можешь написать пост. Не пиши вступлений вроде "Понял задачу" и не давай несколько вариантов. Ты ВСЕГДА пишешь один готовый пост. Ты публичный канал — подписчики видят каждое сообщение.`,
    hashtags: ['#астана', '#астанасегодня', '#новости']
  },

  'typical-kz': {
    id: 'typical-kz',
    name: 'Типичный Казахстан',
    enabled: false, // остановлен 2026-06-13 по запросу Rick
    chatId: process.env.TYPICAL_KZ_CHANNEL_ID,
    type: 'humor',
    sources: [], // AI-генерация + парсинг мемов
    prompt: `Ты — автор юмористического Telegram-канала "Типичный Казахстан".
Пиши на русском с казахскими словечками (бала, ага, апай, жок, бар).
Стиль: самоирония, бытовой юмор, ситуации понятные каждому казахстанцу.
Темы: бешбармак, той, калым, тёщи, базары, пробки Алматы, ветер Астаны, понты, понедельник.
Формат: короткий текст 2-4 предложения ИЛИ формат "когда... а ты...".
Эмодзи обязательно. Без политики.
АБСОЛЮТНЫЙ ЗАПРЕТ: никогда не пиши отказы, мета-комментарии, объяснения почему не можешь написать пост. Ты ВСЕГДА пишешь пост. Ты публичный канал — подписчики видят каждое сообщение.`,
    hashtags: ['#типичныйказахстан', '#kz', '#юмор']
  },

  'dengi-kz': {
    id: 'dengi-kz',
    name: 'Деньги KZ',
    chatId: process.env.DENGI_KZ_CHANNEL_ID,
    type: 'earnings',
    // Гибрид: ~50% слотов — реальные финновости из этих RSS, ~50% — AI-идеи заработка (см. scheduler.js)
    sources: [
      { name: 'Kursiv', url: 'https://kz.kursiv.media/feed/', type: 'rss' },
      { name: 'Nur.kz Бизнес', url: 'https://www.nur.kz/rss/business.rss', type: 'rss' },
      { name: 'Inbusiness.kz', url: 'https://inbusiness.kz/ru/rss', type: 'rss' },
      { name: 'Banker.kz', url: 'https://www.banker.kz/news/rss/', type: 'rss' }
    ],
    prompt: `Ты — автор Telegram-канала "Деньги KZ" о заработке в Казахстане. Пишешь как старший товарищ, который реально шарит и делится фишкой, а не как инфо-гуру.
Аудитория: 18-35 лет, хотят подработать или начать бизнес.
Темы: подработки, фриланс, бизнес-идеи, финансовая грамотность, скидки, кешбэк, бонусы.
ПЕРВАЯ строка — цепляющий хук с эмодзи: конкретная цифра, неожиданный факт или интрига ("Знал, что банк должен платить тебе?"), а НЕ общий заголовок.
Дальше суть в 3-5 предложений живым языком: конкретика, пример, реальная польза — без воды и "успешного успеха".
В КОНЦЕ — призыв (сохрани пост, поставь реакцию, поделись с тем кому надо денег).
Тон: дружелюбный, мотивирующий, без менторства и пафоса.
АБСОЛЮТНЫЙ ЗАПРЕТ: никогда не пиши отказы, мета-комментарии, объяснения почему не можешь написать пост. Не пиши вступлений вроде "Понял задачу" и не давай несколько вариантов. Ты ВСЕГДА пишешь один готовый пост. Ты публичный канал — подписчики видят каждое сообщение.`,
    hashtags: ['#заработок', '#деньги', '#казахстан', '#подработка']
  },

  'kz-champions': {
    id: 'kz-champions',
    name: 'KZ Champions',
    chatId: process.env.KZ_CHAMPIONS_CHANNEL_ID,
    type: 'sports',
    sources: [
      { name: 'Sports.kz', url: 'https://sports.kz/rss', type: 'rss' },
      { name: 'Nur.kz Спорт', url: 'https://www.nur.kz/rss/sport.rss', type: 'rss' }
    ],
    prompt: `Ты — автор спортивного Telegram-канала "KZ Champions". Пишешь горячо, как настоящий болельщик на трибуне, с гордостью за казахстанских атлетов.
Темы: бокс (Головкин, Елеусинов), UFC (Рахмонов), футбол (КПЛ, сборная), хоккей (Барыс), борьба, тяжёлая атлетика.
ПЕРВАЯ строка — эмоциональный хук с эмодзи: эмоция, интрига или громкий факт ("Шавкат снова доказал!"), а НЕ сухой заголовок.
Дальше 2-4 предложения: суть, результат/статы, твоя оценка момента живым языком.
В КОНЦЕ — прогноз и вопрос к болельщикам ("Возьмёт ли Шавкат пояс? Пишите!").
Если новость НЕ про казахстанский спорт — найди казахстанский угол (сравнение, контекст для KZ) или подай как мировую новость, интересную болельщикам KZ.
АБСОЛЮТНЫЙ ЗАПРЕТ: никогда не пиши отказы, мета-комментарии, объяснения почему не можешь написать пост. Не пиши вступлений вроде "Понял задачу" и не давай несколько вариантов. Ты ВСЕГДА пишешь один готовый пост. Ты публичный канал — подписчики видят каждое сообщение.`,
    hashtags: ['#спорт', '#казахстан', '#kzchampions']
  }
};

// Расписание постинга (время Астана/Алматы UTC+5)
const schedule = {
  morning:    { hour: 8,  minute: 15, type: 'digest' },
  mid1:       { hour: 10, minute: 30, type: 'content' },
  lunch:      { hour: 12, minute: 15, type: 'content' },
  afternoon:  { hour: 14, minute: 30, type: 'content' },
  evening_ad: { hour: 16, minute: 0,  type: 'content_or_ad' },
  evening:    { hour: 18, minute: 30, type: 'content_or_ad' },
  night:      { hour: 21, minute: 15, type: 'interactive' }
};

// Cron выражения в Алматы/Астана времени (UTC+5)
// node-cron timezone опция в bot.js делает конвертацию
const cronSchedule = {
  morning:    '15 8 * * *',   // 08:15 Астана
  mid1:       '30 10 * * *',  // 10:30 Астана
  lunch:      '15 12 * * *',  // 12:15 Астана
  afternoon:  '30 14 * * *',  // 14:30 Астана
  evening_ad: '0 16 * * *',   // 16:00 Астана
  evening:    '30 18 * * *',  // 18:30 Астана
  night:      '15 21 * * *'   // 21:15 Астана
};

const adConfig = {
  // 1 рекламный пост на каждые N контентных
  adFrequency: 6,
  // Слоты для рекламы (индексы в расписании)
  adSlots: ['evening_ad', 'evening'],
  // Чередование: ad slot меняется каждый день
  rotateDaily: true
};

const aiConfig = {
  baseUrl: 'https://openrouter.ai/api/v1',
  model: 'deepseek/deepseek-v4-pro',
  maxTokens: 800,
  temperature: 0.8
};

module.exports = { channels, schedule, cronSchedule, adConfig, aiConfig };

📜 Git History

28ca823feat: гибридный роутинг dengi-kz (финновости RSS + AI-идеи)3 weeks ago
08548e3feat: живые промпты каналов + ротация источников (B1+B2)3 weeks ago
ef1a257feat: расширить RSS-источники новостных каналов (Nur.kz, Total.kz)3 weeks ago
afebbfafeat: остановить канал typical-kz (enabled:false + cron guard)3 weeks ago
e76f7eefix: runtime-фильтр мета-отказов AI + усиление промптов7 weeks ago
cec0551fix: cron timezone — сервер UTC, крон был для PDT → 7ч сдвиг7 weeks ago
1d04825fix: промпты — запрет мета-комментариев + maxTokens 500→8007 weeks ago
19761cafix: dotenv override + deepseek v4 pro + save post titles7 weeks ago
2757087init: KZ Channels bot — 5 Telegram channels for Kazakhstan7 weeks ago
Show last diff
Loading...