Содержание
- Первая часть перед вами;
- Дневник разработки #2. Выбор инструментария
- Дневник разработки #3. Проектирование БД
- Дневник разработки #4. Уход в сторону
- Дневник разработки #5. Неожиданный финал
Данный и последующие посты станут чем-то вроде дневника разработчика. Сразу предупреждаю, что разговоров и постов будет больше, чем дела и коммитов.
Введение
Сподвигла меня на это моя текущая стримерская деятельность. Уже пару месяцев я пользуюсь кастомным ботом для чата Twitch — Phantom Bot. Изначально я взял его только из-за одной единственной функции: удобного управления музыкальными заявками. Бот формирует два плейлиста с музыкой на основе ссылок с YouTube. В первом плейлисте — моя музыка, во втором — заявки зрителей. В отличие от ранее используемого Twitch-DJ’я, данный подход предпочтительнее потому, что по факту исполнения всех заявок на стриме не перестает играть музыка, бот переключается на основной плейлист. Плюс, я могу перенести понравившуюся песню из заявок в свой плейлист одним нажатием кнопки.
Но буквально месяц назад вышла новая версия бота с поддержкой сторонних API. Если коротко, теперь можно создавать команды вида:
!addcom joke (customapi http://not.real.com/joke.php?name=$1)
И если написать в чате команду !joke, сгенерится запрос по указанному URL, а в качестве $1 будет передано имя пользователя, вызвавшего команду. Передать можно еще до 8 паметров, записывая их через пробел:
!joke fuck your mama
Учитывая тот факт, что Phantom Bot реализует в чате канала некий аналог экономики, начисляя переодически каждому зрителю внутренную валюту чата «септимы» (одна монета за пять минут пребывания в чате). Для каждой команды можно установить цену вызова в этих самых септимах. В данный момент в основном используется команда !addsong для заказа музыки (за добавленную песню снимается со счета зрителя 3 септима). Но мне хотелось найти еще какое-то применение этой функции, чтобы дополнительно поощрить зрителей за регулярное посещение стримов.
И тут всплыла в памяти развлекуха с заказом определенного героя DOTA 2 для предстоящей игры. Потом мысля за мыслю, и вот уже есть проект веб-приложения, которое принимает заказы зрителей, формирует список и отображает их на стриме оверлеем.
Параметризация
По сути, необходимо реализовать простейшее приложение типа TODO (список задач) с индикацией выполнения задач. В первом приближении:
- Saboteira предлагает сыграть на Meepo;
- Scrolldota заказал катку на Chen;
- Antoniotomatto хочет Close;
По мере размышлений над проектом пришла идея помимо заказа героев добавить возможность для зрителей вызывать внеочередной клоз — игру стримера со зрителями и против зрителей.
Первым делом, конечно, стоит решить, как будет выглядеть команда, которую зритель должен написать в чат, чтобы выразить свое желание. Одна должна быть максимально простой, чтобы избежать ошибок в синтаксисе. Я смотрел и на русскоязычные варианты, вроде !заказать, и на их англоязычные аналоги — !order. Но в итоге остановился на простом и привычном для дотеров выражении !go.
Далее необходимо определиться с аргументами команды. Сколько их должно быть, нужно ли вводить дополнительные переменные? Первоначальный вариант c раздельной типизацией вида:
!go play Meepo !go run close
я решил отбросить, помня о упомянутом ранее упрощении. Отделить клоз от героя можно при форматировании списка, а отказ от типизации убирает лишнее поле в базе данных. Получается так:
!go close !go IO !go Invoker
Сама БД мне представляется сейчас комбинацией всего четырёх полей:
- ID,
- name,
- order,
- status
Без ID никуда не денешься, первичный ключ всё-таки. Имя мы получим от команды через параметр $1, что заказали — $2. Статус бинарный и по умолчанию «Выполняется». А по ходу работы над выполнением будет получаться такой список:
- √
Saboteira предлагает сыграть на Meepo; - Scrolldota заказал катку на Chen;
- Antoniotomatto хочет Close;
Собственно, это всё, что я хотел обозначить для себя на этапе постановки задачи.