Дневник разработки #1. Постановка задачи

Содержание

Данный и последующие посты станут чем-то вроде дневника разработчика. Сразу предупреждаю, что разговоров и постов будет больше, чем дела и коммитов.

Введение

Сподвигла меня на это моя текущая стримерская деятельность. Уже пару месяцев я пользуюсь кастомным ботом для чата Twitch — Phantom Bot. Изначально я взял его только из-за одной единственной функции: удобного управления музыкальными заявками. Бот формирует два плейлиста с музыкой на основе ссылок с YouTube. В первом плейлисте — моя музыка, во втором — заявки зрителей. В отличие от ранее используемого Twitch-DJ’я, данный подход предпочтительнее потому, что по факту исполнения всех заявок на стриме не перестает играть музыка, бот переключается на основной плейлист. Плюс, я могу перенести понравившуюся песню из заявок в свой плейлист одним нажатием кнопки.

Но буквально месяц назад вышла новая версия бота с поддержкой сторонних API. Если коротко, теперь можно создавать команды вида:

И если написать в чате команду !joke, сгенерится запрос по указанному URL, а в качестве $1 будет передано имя пользователя, вызвавшего команду. Передать можно еще до 8 паметров, записывая их через пробел:

Учитывая тот факт, что Phantom Bot реализует в чате канала некий аналог экономики, начисляя переодически каждому зрителю внутренную валюту чата «септимы» (одна монета за пять минут пребывания в чате). Для каждой команды можно установить цену вызова в этих самых септимах. В данный момент в основном используется команда !addsong для заказа музыки (за добавленную песню снимается со счета зрителя 3 септима). Но мне хотелось найти еще какое-то применение этой функции, чтобы дополнительно поощрить зрителей за регулярное посещение стримов.

И тут всплыла в памяти развлекуха с заказом определенного героя DOTA 2 для предстоящей игры. Потом мысля за мыслю, и вот уже есть проект веб-приложения, которое принимает заказы зрителей, формирует список и отображает их на стриме оверлеем.

Параметризация

По сути, необходимо реализовать простейшее приложение типа TODO (список задач) с индикацией выполнения задач. В первом приближении:

  • Saboteira предлагает сыграть на Meepo;
  • Scrolldota заказал катку на Chen;
  • Antoniotomatto хочет Close;

По мере размышлений над проектом пришла идея помимо заказа героев добавить возможность для зрителей вызывать внеочередной клоз — игру стримера со зрителями и против зрителей.

Первым делом, конечно, стоит решить, как будет выглядеть команда, которую зритель должен написать в чат, чтобы выразить свое желание. Одна должна быть максимально простой, чтобы избежать ошибок в синтаксисе. Я смотрел и на русскоязычные варианты, вроде !заказать, и на их англоязычные аналоги — !order. Но в итоге остановился на простом и привычном для дотеров выражении !go.

Далее необходимо определиться с аргументами команды. Сколько их должно быть, нужно ли вводить дополнительные переменные? Первоначальный вариант c раздельной типизацией вида:

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

Сама БД мне представляется сейчас комбинацией всего четырёх полей:

  • ID,
  • name,
  • order,
  • status

Без ID никуда не денешься, первичный ключ всё-таки. Имя мы получим от команды через параметр $1, что заказали — $2. Статус бинарный и по умолчанию «Выполняется».  А по ходу работы над выполнением будет получаться такой список:

  • √ Saboteira предлагает сыграть на Meepo;
  • Scrolldota заказал катку на Chen;
  • Antoniotomatto хочет Close;

Собственно, это всё, что я хотел обозначить для себя на этапе постановки задачи.

+
Поделиться
Отправить
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (нет оценок)
Загрузка...