Skip to content

BOSSincrypto/news-objectivity-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

News Objectivity Bot

MIT License CI Python 3.12 Telegram Bot

Telegram-бот для анализа объективности новостей с помощью AI. Оценивает правдивость, объективность и конструктивность каждого материала, выявляет пропагандистские техники и присылает ежедневную сводку качественных новостей.

🌐 Лендинг: https://bossincrypto.github.io/news-objectivity-bot/ 📦 Репозиторий: https://github.com/BOSSincrypto/news-objectivity-bot


Возможности

Трёхосевая система рейтингов

Каждая новость анализируется по трём независимым осям (шкала 1-10):

Ось Что измеряет 9-10 5-6 1-2
Truth (Правдивость) Фактическая точность и верифицируемость Безупречно точно, первоисточники Смешанная точность Дезинформация
Objectivity (Объективность) Отделение фактов от мнений, нейтральность Строго факты Мнение без маркировки Пропаганда
Constructiveness (Конструктивность) Ориентация на решения Фокус на решениях Нейтрально Негатив ради негатива

FIMI-классификация источников

Источники классифицируются по системе FIMI (Foreign Information Manipulation and Interference, рамка ЕС):

Классификация Описание В карантине?
🟢 INDEPENDENT_EXILE Независимые СМИ в изгнании (золотой стандарт) Нет
🟢 INDEPENDENT Международные независимые СМИ Нет
🟡 PRIVATE Частные СМИ (могут быть под давлением) Нет
🔴 STATE_CONTROLLED Государственные СМИ Да (исключены из сводки)

Источники класса STATE_CONTROLLED автоматически исключаются из ежедневной сводки, но остаются доступны для ручного анализа.

Обнаружение пропагандистских техник

Бот выявляет 12 техник манипуляции, основанных на таксономии SemEval-2020/2023:

  • loaded_language — эмоционально окрашенная лексика
  • whataboutism — вот-эбаутизм
  • appeal_to_fear — апелляция к страху
  • false_dilemma — ложная дилемма
  • ad_hominem — переход на личности
  • false_balance — ложный баланс
  • delegitimization — делегитимизация
  • victimhood_framing — позиционирование жертвы
  • appeal_to_authority — апелляция к авторитету
  • conspiracy_theory — конспирология
  • cherry_picking — выборочное цитирование
  • straw_man — подмена тезиса

Правило 7/7/7

В ежедневную сводку попадают только новости, набравшие минимум 7 баллов по всем трём осям (Truth >= 7, Objectivity >= 7, Constructiveness >= 7). Это гарантирует высокое качество отобранных материалов и отсеивает пропаганду.


Команды бота

Команда Описание
/start Начать работу с ботом, приветственное сообщение
/help Справка по командам
/digest Получить сводку новостей за последние 24 часа
/sources Список отслеживаемых источников с FIMI-классификацией
/subscribe Подписаться на ежедневную сводку (09:00 UTC)
/unsubscribe Отписаться от ежедневной сводки
/rating_guide Объяснение трёхосевой системы рейтингов
/health Проверить доступность RSS-источников

Также можно отправить боту ссылку на статью, текст новости (от 100 символов) или пересланное сообщение из Telegram-канала для анализа.


Отслеживаемые источники

🟢 Независимые в изгнании (INDEPENDENT_EXILE)

Источник Описание
Meduza Ведущее независимое издание (Латвия)
Новая газета Европа Нобелевская премия мира, расследовательская журналистика
The Moscow Times Независимое англо-русское издание

🟢 Независимые международные (INDEPENDENT)

Источник Описание
BBC Русская служба Международные новости от BBC
DW (Deutsche Welle) Немецкое международное вещание

🟡 Частные СМИ (PRIVATE)

Источник Описание
Коммерсантъ Ведущая частная деловая газета
РБК Крупная бизнес-медиагруппа
Интерфакс Крупнейшее негосударственное информагентство
Ведомости Деловая газета

🔴 Государственные (STATE_CONTROLLED, карантин)

Источник Описание
ТАСС Государственное информационное агентство России
РИА Новости Государственное информационное агентство
Известия Проправительственная ежедневная газета
Российская газета Официальная правительственная газета

Всего отслеживается 14 источников. Источники в карантине доступны для ручного анализа, но автоматически исключены из ежедневной сводки.


Установка

Требования

Установка через Poetry

git clone https://github.com/BOSSincrypto/news-objectivity-bot.git
cd news-objectivity-bot
poetry install
cp .env.example .env

Запуск:

poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000

Установка через Docker

docker build -t news-objectivity-bot .
docker run -p 8000:8000 --env-file .env news-objectivity-bot

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

Переменная Описание Значение по умолчанию
TELEGRAM_BOT_TOKEN Токен Telegram-бота (от @BotFather) (обязательно)
OPENROUTER_API_KEY API-ключ OpenRouter для AI-анализа (обязательно)
OPENROUTER_MODEL Модель OpenRouter для анализа новостей google/gemini-2.5-flash
OPENROUTER_BASE_URL Базовый URL API OpenRouter https://openrouter.ai/api/v1

Пример файла .env:

TELEGRAM_BOT_TOKEN=123456789:your_telegram_bot_token
OPENROUTER_API_KEY=sk-or-your_openrouter_api_key
OPENROUTER_MODEL=google/gemini-2.5-flash

Деплой

GitHub Pages (лендинг)

Статический лендинг находится в папке docs/ и деплоится на GitHub Pages через GitHub Actions (workflow .github/workflows/deploy-pages.yml).

Render (бот)

Бот настроен для деплоя на Render через render.yaml:

  1. Создайте новый Web Service на Render
  2. Подключите репозиторий BOSSincrypto/news-objectivity-bot
  3. Render автоматически обнаружит render.yaml (runtime: Docker)
  4. Добавьте переменные окружения:
    • TELEGRAM_BOT_TOKEN
    • OPENROUTER_API_KEY
  5. Деплой запустится автоматически

Health check endpoint: /healthz.


API

Endpoint Метод Описание
/healthz GET Проверка состояния сервиса
/sources GET Список всех источников с FIMI-классификацией
/feed-health GET Статус доступности RSS-лент

Пример ответа /healthz:

{
  "status": "ok",
  "telegram_configured": true,
  "ai_configured": true,
  "subscribers_count": 42,
  "sources_count": 14
}

Поле ai_configured отражает наличие OPENROUTER_API_KEY.


Архитектура

news-objectivity-bot/
├── app/                        # Бот (FastAPI + Telegram)
│   ├── main.py                 #   FastAPI приложение, Telegram handlers, планировщик
│   ├── config.py               #   Конфигурация, источники, FIMI-классификация, промпты
│   ├── ai_analyzer.py          #   AI-анализ через OpenRouter (openai SDK)
│   └── rss_parser.py           #   Парсинг RSS-лент
├── docs/                       # Статический лендинг (GitHub Pages)
│   ├── index.html              #   Двуязычная страница (RU/EN)
│   ├── styles.css              #   Современная тёмная адаптивная тема
│   └── script.js               #   Интерактивность, переключатель языка
├── .github/workflows/
│   └── deploy-pages.yml        # CI: деплой docs/ на GitHub Pages
├── Dockerfile                  # Docker-образ бота
├── render.yaml                 # Конфигурация деплоя на Render
├── pyproject.toml              # Зависимости Poetry
├── .env.example                # Пример переменных окружения
└── .gitignore

Основные компоненты

main.py — точка входа:

  • FastAPI сервер с CORS middleware
  • Telegram bot handlers для всех команд
  • Планировщик ежедневной сводки через APScheduler (09:00 UTC)
  • Rate limiting (10 запросов/час на пользователя)

ai_analyzer.py — AI-анализ:

  • Интеграция с OpenRouter через openai SDK (AsyncOpenAI)
  • Заголовки HTTP-Referer и X-Title (рекомендация OpenRouter)
  • Трёхосевая система рейтингов + обнаружение пропаганды
  • Fallback-результат при отказе анализа

rss_parser.py — работа с RSS:

  • Асинхронный парсинг всех 14 источников
  • Фильтрация по времени публикации
  • Проверка здоровья лент

config.py — конфигурация:

  • Список источников с FIMI-классификацией
  • Промпты для анализа и генерации сводки
  • Пороговые значения (7/7/7)
  • Таксономия пропагандистских техник

Технологии

Технология Назначение
Python 3.12 Основной язык
FastAPI Веб-фреймворк, REST API
python-telegram-bot Telegram Bot API
OpenRouter AI-провайдер (модель google/gemini-2.5-flash по умолчанию)
openai SDK Клиент для OpenRouter (OpenAI-совместимый API)
feedparser Парсинг RSS-лент
APScheduler Планировщик ежедневной сводки
httpx Асинхронный HTTP-клиент

English

News Objectivity Bot is a Telegram bot that analyzes the objectivity of news articles using AI. It evaluates each article on three independent axes (Truth, Objectivity, Constructiveness), detects propaganda techniques, and sends a daily digest of high-quality news.

Features

  • Three-axis rating system — every news item gets a 1-10 score on Truth (factual accuracy), Objectivity (fact vs opinion separation), and Constructiveness (solution orientation).
  • FIMI source classification — sources are classified as independent exile, independent, private, or state-controlled, following the EU's Foreign Information Manipulation and Interference framework.
  • Propaganda detection — 12 manipulation techniques are detected, including loaded language, whataboutism, ad hominem, and more.
  • 7/7/7 rule — only news scoring at least 7 on all three axes makes it into the daily digest. State-controlled sources are quarantined from the digest.

Commands

Command Description
/start Start the bot
/help Command reference
/digest Get the last 24-hour digest
/sources List tracked sources with FIMI classification
/subscribe Subscribe to the daily digest (09:00 UTC)
/unsubscribe Unsubscribe from the digest
/rating_guide Explain the rating system
/health Check RSS feed availability

Installation

git clone https://github.com/BOSSincrypto/news-objectivity-bot.git
cd news-objectivity-bot
poetry install
cp .env.example .env   # add your tokens
poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000

Or with Docker:

docker build -t news-objectivity-bot .
docker run -p 8000:8000 --env-file .env news-objectivity-bot

Required environment variables: TELEGRAM_BOT_TOKEN, OPENROUTER_API_KEY, OPENROUTER_MODEL (default: google/gemini-2.5-flash).


License

MIT License. See the LICENSE file for details.

Author

@BOSSincrypto

About

Telegram-бот для анализа объективности новостей с использованием AI (OpenRouter). Оценивает по трём осям: фактическая точность, объективность, конструктивность. / Telegram bot for news objectivity analysis using AI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors