Один мой коллега старается всеми силами продвигать популярность стримов своей девушки. В ход уже пошли розыгрыши игровых предметов за лайки в социальной сети. Но тут же вскрылся изъян этого простого и удобного метода: желающие получить кусок виртуальной халявы просили всех друзей, родственников и участвовать в розыгрыше под девизом "вам не сложно, мне приятно".
Против оказался этот самый коллега, так как таким образом стимулировать просмотры оказалось затруднительно. Появилась очевидная мысль: претендент на награду должен соответствовать простым требованиям:
1. Действительно смотрит смотрит.
2. Смотрит регулярно и продолжительное время.
3. Даёт обратную связь.
Развитием этой мысли стала идея завести на канале бота для чата со следующими возможностями:
1. Один раз в час (плюс/минус 10 минут) у пользователей появляется возможность заработать очко, написав "!бум".
2. При неудачной попытке должна выводиться 1 из фраз, указывающих на несвоевременность "подрыва".
3. После несвоевременного "подрыва" следующие попытки от этого же пользователя игнорируются ботом некоторое время (введено чтобы отбить желание у пользователя спамить в робкой надежде заработать очко).
4. Бот должен выдавать список из 3 пользователей с наибольшим количеством очков.
5. Бот должен выдавать статистику на каждого пользователя.
6. Бот должен выдавать заготовленный ответ на заданные команды.
Пункты №4,5 были добавлены мной чтобы избавить коллегу от необходимости пересчёта записей вручную. На этом этапе стало очевидно что лучшим вариантом решения является реляционная база данных. Эта же БД стала хранилищем для фраз пункта №2 и команд из пункта №6.
После недолгих раздумий была разработана схема БД:
Суть такова: если пользователь пишет впервые - его ник записывается в nickname_table с уникальным номером. Если "подрыв" оказался удачным, то в таблице boom_table появляется время "подрыва" и id счастливчика. Если подрыв оказался неудачным, то вставляется или редактируется запись в таблице mute_table.
Visual studio 2017 и c# были выбраны из-за бесплатности, известности, обширным справочникам от Microsoft.
Дальше - самое простое место. В недрах интернета разыскивается класс для работы с IRC, пишется класс для осуществления операций с базой данных на основе System.Data.OleDB.
Объект OleDbCommand фактически предоставляет возможность оперировать с базой данных, к которой подключен открытый OleDbConnection, посредством инструкций SQL.
В результате разработки получился интерактивный способ привлечения и удержания внимания зрителей с чувством юмора от заказчика.