Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

208 Commits

Repository files navigation

Телеграм бот "Без шелухи" @bez_sheluhi_bot

Бот написан Ruby On Rails с учетом best practices и SOLID принципов.

Этот бот принимает от пользователя набор телеграм каналов, которые пользователю интересны. Следит за ними, и выдает пользователю ТОЛЬКО важную информацию из каналов. Без рекламы. Без шелухи.

Полный список функциональных возможностей доступен в документации.

Таким образом:

  1. Пользователь получает контент без шелухи.
  2. Создается социальная сеть через которую продвигаются интересные каналы на схожую тематику.

Переменные окружения

Все переменные окружения имеют префикс NO_FLUFF_.

Telegram Bot

ПеременнаяОписаниеОбязательнаяПример
NO_FLUFF_TELEGRAM_BOT_TOKENAPI токен Telegram бота от @BotFather1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
NO_FLUFF_TELEGRAM_BOT_USERNAMEUsername бота (без @)bez_sheluhi_bot

AI / LLM

ПеременнаяОписаниеОбязательнаяПример
NO_FLUFF_OPENAI_API_KEYAPI ключ OpenAIsk-...
NO_FLUFF_DEEPSEEK_API_KEYAPI ключ DeepSeek❌*sk-...
NO_FLUFF_LLM_DEFAULT_MODELМодель по умолчанию для LLMdeepseek-chat (по умолчанию)

*Требуется хотя бы один из AI провайдеров (OpenAI или DeepSeek)

Background Jobs (Solid Queue)

Настройки количества процессов для разных типов очередей. Подробнее в документации по фоновым задачам.

ПеременнаяОписаниеПо умолчанию
REALTIME_CONCURRENCYКоличество процессов для срочных задач (realtime очередь)2
DIGEST_CONCURRENCYКоличество процессов для дайджестов (digest, default очереди)3
CONTENT_CONCURRENCYКоличество процессов для обработки контента (content, channels очереди)2
BACKGROUND_CONCURRENCYКоличество процессов для фоновых задач (ai, low_priority очереди)1

Telegram Follower Users (для Spec 046)

ПеременнаяОписаниеОбязательнаяПример
TELEGRAM_API_IDAPI ID приложения от my.telegram.org12345678
TELEGRAM_API_HASHAPI Hash приложения от my.telegram.orgabcdef1234567890abcdef1234567890abcdef12345678
SESSION_ENCRYPTION_KEYКлюч для шифрования Telegram сессий (32 hex символа)1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2

Как получить TELEGRAM_API_ID и TELEGRAM_API_HASH:

  1. Зайти на my.telegram.org
  2. Войти с вашим Telegram аккаунтом
  3. Создать новое приложение (нажмите "Create new application")
  4. Выбрать тип "Bot"
  5. Заполнить форму:
    • App title: "Без Шелухи Follower User Bot"
    • Short name: bez_sheluhi_follower
    • Description: "Follower user for Без Шелухи bot channel monitoring"
  6. Получить api_id (цифры) и api_hash (символы)
  7. Добавить в .env.local файл

Как сгенерировать SESSION_ENCRYPTION_KEY:

# Способ 1: OpenSSL (рекомендуется)
openssl rand -hex 32
# Результат: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2# Способ 2: Rails консоль
rails console
irb> require 'securerandom'
irb> SecureRandom.hex(32)
# Результат: 9f8e7d6c5b4a3210fedcba9876543210fedcba9876543210

Важно: Используйте уникальный ключ для каждого environment (development, staging, production).


🚀 Follower Users - Автоматические пользователи

Система позволяет автоматически вступать в Telegram каналы через follower users (пользователей-ботов).

📋 Процесс авторизации FollowerUser

1. Создание FollowerUser

# Через Rails консольfollower_user=FollowerUser.create!(phone_number: "+1234567890")# Через rake taskrailsfollower_users:create[+1234567890]

2. Запуск авторизации

# Инициировать отправку verification coderesult=follower_user.start_authorization!# => { success: true, phone_code_hash: "abc123..." }# Статус авторизацииstatus=follower_user.authorization_status# => { in_progress: true, expires_at: 2025-01-31 12:30:00, phone_code_hash: "abc123..." }

3. Подтверждение кодом

# Ввести код из Telegram приложенияresult=follower_user.confirm_authorization!("12345")# => { success: true, user: #<FollowerUser id: 1 auth_status: :authorized> }# После успешной авторизации:# - Статус меняется на :authorized# - Сессия сохраняется в зашифрованном виде# - Пользователь автоматически назначается на доступные каналы

4. Управление пользователями

# Проверить статусfollower_user.authorized?# => truefollower_user.can_join_channel?# => true# Отозвать авторизациюfollower_user.revoke_authorization!# => true (удаляет сессию и назначение с каналов)# Получить статистикуFollowerUser.authorized.count# => 1FollowerUser.next_available# => #<FollowerUser ...>

🔐 Безопасность и шифрование

  • API credentials шифруются через Rails encrypts
  • Session данные хранятся в зашифрованном виде
  • Phone numbers уникальны и индексированы
  • Rate limiting через ApplicationConfig

📊 Мониторинг и лимиты

ПараметрОписаниеПо умолчанию
daily_joins_limitМаксимум вступлений в день50
max_channelsМаксимум каналов на пользователя400
health_scoreОценка состояния пользователя100.0
workload_scoreЗагруженность пользователя0.0

🛠️ Управление через Rails консоль

# Создать нового пользователяuser=FollowerUser.create!(phone_number: "+1234567890")# Начать авторизациюauth_result=user.start_authorization!puts"Enter code: #{auth_result[:phone_code_hash]}"# Подтвердить (для демо)user.confirm_authorization!("12345")# Проверить каналы пользователяuser.channels.count# => 0 (назначаются автоматически)# Создать тестовый канал и назначитьchannel=Channel.create!(telegram_id: 12345,username: "test_channel")channel.assign_to_follower_user(user)

Примечание: Для демонстрации можно использовать код 12345 или любой 6-значный номер.

Другое

ПеременнаяОписаниеОбязательнаяПример
DATABASE_URLURL подключения к PostgreSQLpostgresql://user:pass@localhost/nofluff
RAILS_ENVОкружение Railsproduction

Документация

About

Выжимка из твоих телеграмм каналов. Без рекламы. Без шелухи

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages