Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Интеграция с Twitch #2

Open
Stepan5024 opened this issue Nov 11, 2024 · 0 comments
Open

Интеграция с Twitch #2

Stepan5024 opened this issue Nov 11, 2024 · 0 comments
Assignees
Labels
фича Фича новой фоункциональности

Comments

@Stepan5024
Copy link
Owner

Исполнитель @rColeJnr Рикардо

Суть

Интеграция с Twitch, позволяющая боту получать доступ к чатам стримеров, отправлять и получать сообщения, а также сохранять и анализировать метрики аудитории в БД

Описание

Интеграция с Twitch состоит из нескольких шагов, включая получение API-ключей и настройку OAuth, авторизацию бота, подключение к чатам Twitch, а также сохранение аналитик в базе данных.

Функция 1: Получение необходимых ключей API и настройка OAuth

  • Прислать команде общий Google Account
  • Настроить приложение на Twitch Developer Portal для генерации Client ID и Client Secret.
  • Настроить OAuth для авторизации бота и получения токена доступа к каналам стримера.

Функция 2: Реализация механизма авторизации бота и подключения к чатам Twitch

  • Реализовать авторизацию бота с сохранением OAuth токена для дальнейших подключений.
  • Настроить подключение к чатам Twitch, включая отправку и получение сообщений, и обработку событий чата.

Функция 3: Сохранение аналитик в базе данных

  • Разработать структуру таблиц для сохранения сообщений и аналитических данных.
  • Хранить данные о комментариях, их тональности, и ключевых метриках (средний тон, количество токсичных сообщений и т.д.).

Пример для тестирования

Входные данные:

  • Подключение к каналу стримера, получение сообщений чата:
    • Channel ID: 12345
    • User Name: User1
    • Message: "Отличный стрим!"
    • Timestamp: 2024-11-11 12:05:00

Структура базы данных для проекта "Пульс своей аудитории"

Таблица: streamer_channels

Хранит информацию о каналах стримеров, к которым подключается бот.

  • channel_id (PK) — уникальный идентификатор канала.
  • streamer_name — имя стримера.
  • oauth_token — токен доступа для взаимодействия с каналом.
  • last_accessed — дата и время последнего подключения бота к каналу.

Пример данных:

channel_id streamer_name oauth_token last_accessed
1 StreamerA token123 2024-11-11 12:00:00

Таблица: messages

Содержит информацию о каждом сообщении, полученном ботом из чатов стримеров.

  • message_id (PK) — уникальный идентификатор сообщения.
  • channel_id (FK) — идентификатор канала, в котором было отправлено сообщение.
  • user_name — имя пользователя, отправившего сообщение.
  • message_text — текст сообщения.
  • timestamp — дата и время отправки сообщения.
  • sentiment — тональность сообщения (например, "позитивная", "негативная", "нейтральная").
  • is_flagged — флаг для токсичных или нежелательных сообщений (true/false).

Пример данных:

message_id channel_id user_name message_text timestamp sentiment is_flagged
1 1 User1 "Отличный стрим!" 2024-11-11 12:05:00 позитивная false
2 1 User2 "Это просто ужас..." 2024-11-11 12:06:00 негативная true

Таблица: analytics

Содержит информацию о рассчитанных аналитических метриках для каждого канала.

  • analytics_id (PK) — уникальный идентификатор записи аналитики.
  • channel_id (FK) — идентификатор канала.
  • metric_name — название метрики (например, "средний тон комментариев").
  • metric_value — значение метрики.
  • calculated_at — дата и время расчета метрики.

Пример данных:

analytics_id channel_id metric_name metric_value calculated_at
1 1 средний тон комментариев 0.75 2024-11-11 13:00:00
2 1 количество токсичных сообщений 5 2024-11-11 13:00:00

Таблица: sentiment_summary

Хранит обобщенные данные по тональности сообщений в чате за определенный период времени.

  • summary_id (PK) — уникальный идентификатор записи.
  • channel_id (FK) — идентификатор канала.
  • positive_count — количество позитивных сообщений.
  • neutral_count — количество нейтральных сообщений.
  • negative_count — количество негативных сообщений.
  • total_messages — общее количество сообщений.
  • period_start — начало периода.
  • period_end — конец периода.

Пример данных:

summary_id channel_id positive_count neutral_count negative_count total_messages period_start period_end
1 1 150 200 50 400 2024-11-01 00:00:00 2024-11-07 23:59:59

Таблица: flagged_messages

Сохраняет информацию о сообщениях, отмеченных как токсичные.

  • flagged_id (PK) — уникальный идентификатор записи.
  • message_id (FK) — идентификатор сообщения.
  • channel_id (FK) — идентификатор канала.
  • flagged_reason — причина флага (например, "токсичность").
  • flagged_at — дата и время отметки сообщения.

Пример данных:

flagged_id message_id channel_id flagged_reason flagged_at
1 2 1 токсичность 2024-11-11 12:06:05

Описание аналитик

  1. Средний тон комментариев: Рассчитывается по всем сообщениям в канале, основываясь на тональности (например, 1 для позитивных, 0 для нейтральных, -1 для негативных) и усредняется.

  2. Процент токсичных сообщений: Определяется как доля сообщений с is_flagged = true от общего количества сообщений в канале.

  3. Распределение тональности сообщений: Хранится в sentiment_summary и представляет собой количество позитивных, нейтральных и негативных сообщений за указанный период.

  4. Тренд тональности: Метрика, показывающая изменение тональности во времени (например, изменение среднего тона за неделю).

Описание классов и функций для реализации

Ниже приведены классы и функции, спроектированные с учетом принципов SOLID для обработки авторизации, подключения к чатам Twitch, и сохранения аналитики в базе данных.


Класс BotAuthenticator

Ответственность: Один класс для авторизации бота с сохранением OAuth токена.

  • Методы:
    • authenticate(): Инициализирует процесс авторизации и получает токен.
    • save_token(token: str): Сохраняет токен в базе данных для последующих подключений.
    • refresh_token(): Обновляет токен при истечении его срока действия.

Класс ChatConnector

Ответственность: Один класс для настройки подключения к чатам Twitch, отправки и получения сообщений.

  • Методы:
    • connect(channel_id: str): Устанавливает соединение с заданным каналом на Twitch.
    • send_message(channel_id: str, message: str): Отправляет сообщение в чат канала.
    • receive_messages(channel_id: str) -> List[Message]: Получает сообщения из чата.
    • disconnect(channel_id: str): Закрывает соединение с каналом.

Класс EventProcessor

Ответственность: Один класс для обработки событий из чатов (например, получения комментариев, анализа команд, флагов токсичных сообщений).

  • Методы:
    • process_event(event: Event): Обрабатывает событие (сообщение или команда) и вызывает соответствующую логику.
    • flag_toxic_message(message: str) -> bool: Проверяет сообщение на токсичность и возвращает флаг (true/false).
    • analyze_sentiment(message: str) -> str: Анализирует тональность сообщения (позитивная, негативная, нейтральная).

Класс AnalyticsRepository

Ответственность: Один класс для управления сохранением аналитических данных в базе данных.

  • Методы:
    • save_message_analytics(channel_id: str, user_name: str, message: str, sentiment: str, is_flagged: bool): Сохраняет данные сообщения и его аналитические параметры.
    • save_channel_metric(channel_id: str, metric_name: str, metric_value: float): Сохраняет агрегированные метрики для канала (например, средний тон, количество токсичных сообщений).
    • get_channel_metrics(channel_id: str) -> Dict[str, Any]: Получает сохраненные метрики для заданного канала.

Класс TwitchIntegrationFacade

Ответственность: Фасад для объединения всех классов и обеспечения удобного доступа к функционалу интеграции.

  • Методы:
    • authorize_bot(): Обращается к BotAuthenticator для авторизации бота.
    • connect_to_channel(channel_id: str): Подключает бот к каналу через ChatConnector.
    • send_channel_message(channel_id: str, message: str): Отправляет сообщение через ChatConnector.
    • process_channel_events(channel_id: str): Получает события через ChatConnector, передает их в EventProcessor для анализа, и сохраняет данные через AnalyticsRepository.
    • disconnect_from_channel(channel_id: str): Закрывает соединение с каналом.

Пример использования

facade = TwitchIntegrationFacade()
facade.authorize_bot()
facade.connect_to_channel("streamer_channel_id")
facade.send_channel_message("streamer_channel_id", "Привет, чат!")
facade.process_channel_events("streamer_channel_id")
facade.disconnect_from_channel("streamer_channel_id")
@Stepan5024 Stepan5024 added the фича Фича новой фоункциональности label Nov 11, 2024
@Stepan5024 Stepan5024 added this to the Спринт 1 milestone Nov 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
фича Фича новой фоункциональности
Projects
None yet
Development

No branches or pull requests

2 participants