Бот написан Ruby On Rails с учетом best practices и SOLID принципов.
Этот бот принимает от пользователя набор телеграм каналов, которые пользователю интересны. Следит за ними, и выдает пользователю ТОЛЬКО важную информацию из каналов. Без рекламы. Без шелухи.
Полный список функциональных возможностей доступен в документации.
Таким образом:
- Пользователь получает контент без шелухи.
- Создается социальная сеть через которую продвигаются интересные каналы на схожую тематику.
Все переменные окружения имеют префикс NO_FLUFF_.
| Переменная | Описание | Обязательная | Пример |
|---|---|---|---|
NO_FLUFF_TELEGRAM_BOT_TOKEN | API токен Telegram бота от @BotFather | ✅ | 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz |
NO_FLUFF_TELEGRAM_BOT_USERNAME | Username бота (без @) | ✅ | bez_sheluhi_bot |
| Переменная | Описание | Обязательная | Пример |
|---|---|---|---|
NO_FLUFF_OPENAI_API_KEY | API ключ OpenAI | ❌ | sk-... |
NO_FLUFF_DEEPSEEK_API_KEY | API ключ DeepSeek | ❌* | sk-... |
NO_FLUFF_LLM_DEFAULT_MODEL | Модель по умолчанию для LLM | ❌ | deepseek-chat (по умолчанию) |
*Требуется хотя бы один из AI провайдеров (OpenAI или DeepSeek)
Настройки количества процессов для разных типов очередей. Подробнее в документации по фоновым задачам.
| Переменная | Описание | По умолчанию |
|---|---|---|
REALTIME_CONCURRENCY | Количество процессов для срочных задач (realtime очередь) | 2 |
DIGEST_CONCURRENCY | Количество процессов для дайджестов (digest, default очереди) | 3 |
CONTENT_CONCURRENCY | Количество процессов для обработки контента (content, channels очереди) | 2 |
BACKGROUND_CONCURRENCY | Количество процессов для фоновых задач (ai, low_priority очереди) | 1 |
| Переменная | Описание | Обязательная | Пример |
|---|---|---|---|
TELEGRAM_API_ID | API ID приложения от my.telegram.org | ✅ | 12345678 |
TELEGRAM_API_HASH | API Hash приложения от my.telegram.org | ✅ abcdef1234567890abcdef1234567890abcdef12345678 | |
SESSION_ENCRYPTION_KEY | Ключ для шифрования Telegram сессий (32 hex символа) | ✅ | 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2 |
- Зайти на my.telegram.org
- Войти с вашим Telegram аккаунтом
- Создать новое приложение (нажмите "Create new application")
- Выбрать тип "Bot"
- Заполнить форму:
- App title: "Без Шелухи Follower User Bot"
- Short name:
bez_sheluhi_follower - Description: "Follower user for Без Шелухи bot channel monitoring"
- Получить
api_id(цифры) иapi_hash(символы) - Добавить в
.env.localфайл
# Способ 1: OpenSSL (рекомендуется)
openssl rand -hex 32
# Результат: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2# Способ 2: Rails консоль
rails console
irb> require 'securerandom'
irb> SecureRandom.hex(32)
# Результат: 9f8e7d6c5b4a3210fedcba9876543210fedcba9876543210Важно: Используйте уникальный ключ для каждого environment (development, staging, production).
Система позволяет автоматически вступать в Telegram каналы через follower users (пользователей-ботов).
# Через Rails консольfollower_user=FollowerUser.create!(phone_number: "+1234567890")# Через rake taskrailsfollower_users:create[+1234567890]# Инициировать отправку 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..." }# Ввести код из Telegram приложенияresult=follower_user.confirm_authorization!("12345")# => { success: true, user: #<FollowerUser id: 1 auth_status: :authorized> }# После успешной авторизации:# - Статус меняется на :authorized# - Сессия сохраняется в зашифрованном виде# - Пользователь автоматически назначается на доступные каналы# Проверить статус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 |
# Создать нового пользователя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_URL | URL подключения к PostgreSQL | ✅ | postgresql://user:pass@localhost/nofluff |
RAILS_ENV | Окружение Rails | ❌ | production |