Иллюстрация парня с телефоном

Игровой Telegram бот на C#

Введение.

Весной 2020 года, Павел Дуров и команда выпустили обновление мессенджера Telegram и открыли для всех пользователей анимированные стикеры со случайным исходом. Право стать первопроходцем выпало на участь всем известного с детства игрового кубика. А дальше понеслось вдогонку: дартс и мяч. Последний, я сам не успел заметить, как тоже оказался внутри программного кода мессенджера.

Первое знакомство

С кубиком, я познакомился сразу при обновлении: глянул официальное сообщение, попробовал, отправил приятелю и оценил огромную перспективу новинки. Приятель отмахнулся, со словами: «Ну да. Пойдёт». Но это, скорее всего от того, что он очень устаёт на работе и времени даже поиграться с анимашкой у него нет.

А в моей голове, впервые пронеслась мысль: «Интересно бы сделать такой турнир, где люди бы просто бросали кубик и выигрывали деньги. Вот только как сделать взносы за участие?». На этом и закончилась наша первая встерча с рандомными стикерами.

Следом за первым обновлением, через месяц, пришло второе. Там были новые стикеры со случайным значением: дартс. Схема была как обычно: увидел, поигрался, скинул приятелю. Но дартс, почему-то зацепил. Наверное от того, что он больше похож на спорт. В голове снова весна чиркнула спичку и вспыхнула мысль о телеграм турнире.

В рамках другого проекта, приложения для промоутеров на Xamarin, я уже думал над тем, чтобы плотно использовать систему телеграма. Решил, что написать бота, который бы вёл такие турниры, для меня будет очень просто. Опыт за C#, какой-никакой уже висит на ушах, с Xamarin вроде уже знаем друг-друга, в интернете тоже с кода бывал. Короче — не сложно. Ну от силы — дело недели. Ошибся во времени, я не сильно. Примерно на три месяца. Начал в мае. Сейчас июль. Полноценно играем мы лишь пару недель.

Турниры в телеграм

Пара предложений перед началом

Подробно описывать ошибки разработки не буду, чтобы не тратить ни ваше время, ни моё. Если будут вопросы — пишите в телеграм, буду рад помочь и постараюсь сделать всё что сейчас в моих силах. В двух абзацах о процессе и перейдём к делу.

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

Потом, неудачно собрал на планшет. Причём настолько неудачно, что из знакомых, никто даже не хотел браться за поддержку. Четвёртый раз, оказалось, что система турнира, которая была в моей голове, никаким образом не способна жить в реальности. А именно: приходить в назначенное время, чтобы сыграть в дартс, пусть и за небольшие деньги — никто не хотел. Опять переписал бота. Теперь уже отправил его наслаждаться жизнью на просторы сервера.

Система турниров

Система телеграм турниров держится на трёх китах:

  • Участие в игре всегда и для всех, бесплатно.
  • Количество участников неограничено.
  • Рекламные предложения принимаются/отклоняются на голосовании игроков.

Для чего это сделано? Для того, чтобы не уходить ещё глубже на дно, чем я есть сейчас. Стать хуже, я могу и без этого проекта, поэтому его задача, сделать как минимум меня — немного лучше. А если получится и ещё кому помочь, то вообще — шик!

Игровой процесс

Игра ведётся по основным правилам:

  1. У каждого участника есть пять бросков.
  2. За один час — один бросок.
  3. В течение часа заявка на приз, в случае победы.

Регистрация происходит при первом броске. Никаких данных, ничего вводить не следует. Бросил и хватит — ты в игре.

Финансовая модель.

Справедливым будет вопрос, который мне задаёт каждый, кому я рассказываю про бота: «Пффф. А где деньги-то? Ты же в минусы играешь! Кошелёк чем набивать будешь? Песочком?».

А деньги здесь, как шепчет мне больной мозг, будут только при хорошей поддержке аудитории. Модель до смешного простая: чем больше аудитория, тем солиднее рекламодатель, чем солиднее рекламодатель, тем жирнее закаказ, чем жирнее заказ, тем больше приз участникам.

Азартные игры.

Я зову этого бота — могильщик для азартной индустрии. Да, пафоса в этой фразе — до облаков, но мне от этого она и нравится. Павел Дуров и Ко, сегодня выступают палачами для казино, игровых автоматов, рулеток и остального мусора прошедшей эпохи. Бота я тут вижу в роли могильщика. Анимированные стикеры со случайным исходом он получил из рук бывшего петербуржца, осталось просто — проводить турниры и закапывать тела азартных проектов.

Три удара по азартной индустрии.

Первый удар:
Азартная индустрия живёт за счёт участников. Телеграм турнир живёт за счёт заказчиков. Где казиношные боссы обирают бедняков, телеграм соревнование — получит капусту из кошельков богатых.

Второй удар:
Где казино-подобные проекты требуют времени, турниру хватает нескольких нажатий в день. Не следует даже вводить имя сайта в браузер: щёлкнул в мессенжере и пошёл дальше.

Нокаутирующий удар:
Как и в системах азартных игр, объяснить участникам о случайности события не составляет труда. Но только где казино за это платит огромные деньги лицензионному провайдеру, мы получаем всё бесплатно.

Телеграм уже давно работает и случайное событие генерируется на серверах. Кто-нибудь ещё сомнивается в честности результатов игового процесса? Если да, то вы, наверное, перепутали меня с Роттенбергом. Я даже по НТВ не видел таких сумм, в которые сегодня оценивается Telegram.

Открытый код

Весь бот написан на языке C#, крутится на линукс сервере Ubuntu. В разработке, я использовал .Net-систему с открытым исходным кодом Mono. Про сам код, говорить, не вижу особого смысла — ничего фантастического, на мой взгляд я там не написал. Даже больше, уверен, что любой из вас — в лёгкую напишет код горадо лучше.

Читать в таких статьях про то, как пишется код, я уже как три года считаю неразумным делом и просто тратой времени. Гораздо понятнее и проще — посмотреть исходный файлы проекта, потому что, зачастую в статье, много маленьких моментов упущены. Но как показывает практика, фраза «дьявол кроется в деталях», имеет место и без этих крошечных моментов — ничего не работает.

Сам код, я с огромным удовольствием приведу по ссылке на GitLab. А так же я хочу верить в то, что кого-то ещё эта тема заинтересует и он укажет мне ошибки в тексте программы, потому что сам я их уже — не заметил. Ну раз оставил. Самостоятельно я могу сделать только хуже, но никак не лучше. Поэтому жду поддержки.

Титры

Бот написан благодаря:

  • Игорь Владимирович Красильников.
  • Дмитрий Александрович Лукъянов.
  • Евгений Викторович Ситников.
  • Алексей Александрович Меняйлов.
  • Михаил Васьильевич попов.

И другие (см. главу «Титры»).

Ссылки.

Сам бот — https://t.me/iamnotstalingames
Исходный код — https://gitlab.com/iamnotstalinlab/telegramapplication
Правила игры — https://tgraph.io/NE-STALIN-PRAVILA-DARTS-IGRY-05-08
Вопросы — https://t.me/iamnotstalindiscuss

Послесловие.

Ещё одна причина разместить в OpenSource проект бота, честно говоря, такая: я боюсь, что однажды может и меня перекрыть. Причём перекрыть так, что я тоже захочу денег и стану требовать за участие монету с игроков. Как обычное казино. От этого становится жутко. Поэтому, если вдруг такое со мной произойдёт, то я хочу чтобы каждый мог моментально развернуть своего бота с бесплатным участием и убить моего, забрав всю аудиторию.

И ещё защита: мне уже два раза предлагали сделать казино из этого турнира. Два раза я отказался. А потом пришёл к выводу, что если эти люди, которые делали мне предложение захотят, то они быстро соберут подобное казино в мессенджере. Единственный шанс отбиться от их капиталов и денежных проектов — открыть код.

Обсуждение закрыто.