Как написать бота для мафии

Read this in English.

Ведущий Мафии

Этот репозиторий содержит исходный код для Телеграм-бота @mafia_host_bot.
Ведущий Мафии может проводить коллективные игры в мафию и крокодила в группах и супергруппах.

Использование

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

Доступные команды

  • /create — создать заявку для игры в мафию
  • /cancel — удалить заявку для игры в мафию
  • /start — начать игру в существующей заявке
  • /skip — создать голосование за пропуск дневного обсуждения
  • /end — создать голосование за окончание игры в мафию
  • /croco — начать игру в крокодила
  • /gallows — начать игру в виселицу
  • /stats — вывести статистику
  • /rating — вывести рейтинг
  • /help — вывести текст помощи

Правила мафии

В этой версии Ведущего Мафии четыре роли:

  • Мирный житель — игрок, который не обладает особыми способностями;
  • Мафия — игрок, который может убить одного мирного жителя каждую ночь;
  • Дон мафии — мафиози, который каждую ночь может узнать об одном игроке, является он шерифом или нет;
  • Шериф — мирный житель, который может узнать команду одного игрока каждую ночь.

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

Для ходов мафии используется стрельба. В первую очередь, в начале игры, дон отдаёт приказ другим членам своей команды о порядке, в котором мафия должна стрелять в игроков. Каждую ночь есть фаза стрельбы, когда все члены мафии должны нажать на Inline кнопку в одно и то же время в тот момент, когда сообщение бота содержит в себе имя игрока, которого они должны убить. Если им это удаётся, этот игрок умрёт следующим утром. Сам приказ не влияет на успех выстрела мафии, так что вы можете использовать это для создания своей тактики.

Настоятельно рекомендуется использовать функцию, позволяющую Ведущему Мафии удалять любое сообщение, отправленное не умирающим игроком во время его последних слов или не во время общего обсуждения. Чтобы включить её, сделайте его администратором с правом на удаление сообщений.

Правила крокодила

Правила крокодила в этой версии Ведущего Мафии схожи с правилами настольной игры «Alias». Игроку необходимо за 2 минуты объяснить случайное существительное, не используя однокоренные или производные. Для того, чтобы назвать слово, следует просто написать его в чат.

Правила виселицы

Игрокам необходимо угадать случайное существительное за 6 попыток по буквам, из которого оно состоит. Для того, чтобы назвать букву или слово, следует просто написать соответствующую букву или слово в чат.

Рейтинг

Каждая игра влияет на статистику игроков, из которой складывается рейтинг чата: 5 игроков в мафию и 3 игрока в крокодила. По умолчанию каждый игрок победившей команды в мафии получает 1 очко и каждый игрок проигравшей команды в мафии теряет 1 очко; после угаданного слова в крокодиле игрок, объяснявший слово, получает 0.12 очков, а игрок, угадавший слово, получает 0.04 очка.

Инструкция по установке и запуску на сервере GNU/Linux

  • Установить Python версии не менее 3.6.0
  • Клонировать репозиторий:
    $ git clone https://gitlab.com/r4rdsn/mafia_host_bot
  • Установить зависимости:
    # pip install -r mafia_host_bot/requirements.txt
  • Скопировать файл config.py.sample в локальном репозитории:
    $ cp config.py.sample config.py
  • Персонализировать файл config.py:
    $ $EDITOR config.py (заменяя $EDITOR на предпочтительный текстовый редактор)
  • Установить и запустить сервер MongoDB.
  • Запустить бота:
    $ python mafia_host_bot

Лицензия

Ведущий Мафии опубликован в соответствии с условиями GNU General Public License v3.

Время на прочтение
4 мин

Количество просмотров 10K

Речь пойдет о web-реализации популярной карточной игры «Мафия». Она писалась для развлечения и получения опыта в разработке игр. Первая версия была написана за две недели свободного от работы времени и за такое же время переписана до второй версии. Плюс такой игры – отсутствие ведущего.

Отталкиваясь от целей разработки, я принял решения о реализации/нереализации фич.
Что точно нужно было сделать:

  • Работающая по минимому игра, повторяющая правила классической игры
  • Озвучка команд ведущего на клиентских устройствах
  • Продолжение игры даже после перезагрузки вкладки браузера

Что делать не планировалось или можно было отложить:

  • Регистрация в игре
  • Интерфейс для администрирования
  • Постоянное хранение данных об игре в базе данных
  • Синхронизация времени между устройствами

Backend

https://github.com/mrsuh/mafia-backend
Написан на Go. Хранит в себе состояние игры и отвечает за её логику.

Во время игры можно обратиться к серверу, чтобы узнать полную информацию:

curl 'http://127.0.0.1:8000/info?game=23' | python -m json.tool

Вывод информации об игре

{
"event": "greet_mafia",
"event_status": 2,
"id": 23,
"is_over": false,
"iter": 1,
"players": [
{
"addr": "172.18.0.1:51438",
"createdAt": "2018-09-23T14:39:29.631475779Z",
"id": 33309,
"name": "Anton",
"role": 4
},
{
"addr": "172.18.0.1:51440",
"createdAt": "2018-09-23T14:39:32.867080927Z",
"id": 5457,
"name": "username:0",
"role": 2
},
{
"addr": "172.18.0.1:51442",
"createdAt": "2018-09-23T14:39:32.882463945Z",
"id": 14214,
"name": "username:2",
"role": 1
},
{
"addr": "172.18.0.1:51444",
"createdAt": "2018-09-23T14:39:32.895209072Z",
"id": 63759,
"name": "username:1",
"role": 3
}
],
"win": 0
}

Или узнать состояние сервера:

curl 'http://127.0.0.1:8000/health' | python -m json.tool

Вывод информации о состоянии сервера

{
"runtime.MemStats.Alloc": 764752,
"runtime.MemStats.NumGC": 0,
"runtime.MemStats.Sys": 4165632,
"runtime.MemStats.TotalAlloc": 764752,
"runtime.NumGoroutine": 14
}

Для определения активен ли еще игрок backend посылает heartbeat. Если игрок не ответил после определенного интервала, то он выбывает из игры. В то же время, если игрок переподключился до окончания интервала(пропала сеть), то он может продолжить игру.

Для стабильной работы backend был покрыт Unit тестами со стандартной библиотекой Go, где проверяются основные сценарии работы.


go test mafia-backend/src -cover
ok      mafia-backend/src       1.315s  coverage: 70.7% of statements

Frontend

https://github.com/mrsuh/mafia-frontend
Написан на чистом JS и собран с помощью Grunt.
Не несет в себе никакой логики.

При возникновении события с backend рендерит нужную страницу, отображает данные, которые ему прислали и проигрывает звук нового события.

Frontend хранит ID игры и игрока в LocalStorage или строке запроса браузера (если необходимо запустить в одном браузере несколько вкладок для разных игроков). Полное отсутствие логики, а также хранение основных параметров игры дают возможность даже после перезагрузки страницы восстановить состояние игры.

Браузер запрещает автовоспроизведение звуков без участия пользователя (например, нажатия на кнопку). Чтобы воспроизводить звуки на каждое событие, которе приходит с backend был сделан всего 1 JavaScript объект Audio. Каждый игрок должен нажать кнопку для начала игры и в этот момент объект Audio становится активным (доступным для воспроизведения), и впоследствии у него можно менять параметр src для воспроизведения разных звуков без участия пользователя.

Также для тестирования работы игры был написан «бот», который может играть сам с собой.
Достаточно открыть вкладку браузера, где в параметрах указано, что нужно запустить тест

http://127.0.0.1?master=1&test=1&sound=0&testUsersCount=5

и разрешить открывать новые вкладки из JavaScript для этого домена.
После начала игры откроются еще 5 вкладок с игроками и они начнут играть между собой.

Протокол взаимодействия

Протокол WebSocket был выбран по причине необходимости постоянного двухстороннего обмена данными между backend и frontend и его поддержки обоими языками.

События игры

Вся игра разделена на события:

События

  • game
    • create
    • join
    • start
    • over
    • reconnect

  • day
    • start

  • night
    • start

  • citizens-greeting
    • start
    • role
    • end

  • mafia-greeting
    • start
    • players
    • end

  • court
    • start
    • players
    • end

  • mafia
    • start
    • players
    • end

  • doctor
    • start
    • players
    • end

  • girl
    • start
    • players
    • end

  • sherif
    • start
    • players
    • end

События имеют начало, конец и содержательную часть.
В начале и конце события всем активным игрокам рассылается уведомление, которое нужно подтвердить. Игра продолжается только после подтверждения этого события всеми активными игроками (например, только после того, как будет воспроизведен звуковой файл).

Docker

Всю игру можно поднять с помощью Docker:
docker-compose.yml

version: '3'

services:
    mafia-frontend:
        image: mrsuh/mafia-frontend:latest
        container_name: mafia_frontend
        ports:
            - 9080:80

    mafia-backend:
        image: mrsuh/mafia-backend:latest
        container_name: mafia_backend
        ports:
            - 8000:8000

Достаточно установить Docker (если вы этого еще не сделали), скопировать к себе текст docker-compose.yml и выполнить команду:

docker-compose up

После этого можно открывать вкладку с игрой в браузере:

http://127.0.0.1:9080

Заключение

Вот тут можно посмотреть что итоге получилось (скорость воспроизведения увеличена в 1.5 раза).

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

P.S.: Спасибо Лере за озвучку игры.

TimurkaBeats


  • #1

Привет АнонимЧитец!

Сегодня я солью один популярный скрипт телеграмм бота мафию🕵️

Бот прикольный я тестил все функции работают

!!ВНИМАНИЕ!!

ЕСЛИ У ВАС СЛУЧИЛАСЬ ОШИБКА НАПИШИТЕ В КОММЕНТЫ ЭТУ ОШИБКУ!!!

Скачать скрипт можно ниже:

Всем спасибо! Ещё увидимся

Кто

Исследователь


  • #3

Привет АнонимЧитец!

Сегодня я солью один популярный скрипт телеграмм бота мафию🕵️

Бот прикольный я тестил все функции работают

!!ВНИМАНИЕ!!

ЕСЛИ У ВАС СЛУЧИЛАСЬ ОШИБКА НАПИШИТЕ В КОММЕНТЫ ЭТУ ОШИБКУ!!!

Скачать скрипт можно ниже:

*** Скрытый текст не может быть процитирован. ***

Всем спасибо! Ещё увидимся

Так то норм

MafiaBot

A bot that plays the card game Mafia (also known as Werewolf) on Discord.

Invite the bot to your server

Commands to play Mafia

The default prefix the bot uses in a server is !, this can be changed using the settings command.

  • !mafia — starts a new game of Mafia
  • !destroy — kills a current running game of Mafia
  • !why — find out what the bot is currently waiting for
  • !who — find out who’s in the current game

The bot will prompt with other commands during the game:

  • !join — join a game (before it’s started)
  • !start — start the game (once enough players are in)
  • !leave — leave the current game (can be done at any point in the game)
  • !choose number — used by some of the roles to choose the player they wish to action
  • !accuse @user — used by villagers to accuse others of being in the Mafia
  • !skip — used by villagers to stay quiet

Administering the bot in your server

Control Commands

These can initially only be run by the server owner or members with the Administrator or Manage Server permissions granted. You can give other members or roles the ability to control the bot using the settings command.

  • !here — to mark the channel(s) MafiaBot can use to start games in
  • !use #channel — works like !here, but can be run from outside the channel you want games in
  • !remove — stops MafiaBot from running in the current channel
  • !settings — see the raw saved settings
  • !settings prefix prefix — changes the prefix to prefix
  • !settings adduser @user — allows the user user to adminster the bot
  • !settings removeuser @user — removes user from list
  • !settings addrole @role — allows any user with the role role to adminster the bot
  • !settings removerole @role — removes role from list

If you want the bot to leave your server at any point, just kick it.

Required Permissions

In order to run correctly the bot needs the following permissions set for it, or it won’t run:

  • Manage Channel — on the channel category the bot is in, this is so it can add/remove the extra channels used to communicate with the Mafia during the game
  • Read Messages — in the channels being used to run the game, and any other channels you wish to be able to send control commands from
  • Send Messages — as above
  • Embed Links — on the channel category the bot is in, used to send messages with rich embeds

Running the bot yourself

You can run the bot yourself by cloning this repo, renaming credentials.example.py to credentials.py and adding a bot token and your user ID, then running main.py.

There are a few additional commands bot owners can run, the default prefix is %%:

  • %%stats — gives some info on how many servers and active games the bot is currently running
  • %%leave — removes the bot from the server the command is run on
  • %%logset — mark the current channel as the place to output any internal Python exceptions
  • %%exception — forces an exception (to test the above)
  • %%permissions — for debug, tells you which of the required permissions are missing from the current channel (can be called by a server manager)
  • %%settings — see the raw saved settings
  • %%settings prefix prefix — changes the bot control prefix to prefix
  • %%settings adduser @user — adds user to the list of people allowed to manage the bot
  • %%settings removeuser @user — removes user from the list

MafiaBot

A bot that plays the card game Mafia (also known as Werewolf) on Discord.

Invite the bot to your server

Commands to play Mafia

The default prefix the bot uses in a server is !, this can be changed using the settings command.

  • !mafia — starts a new game of Mafia
  • !destroy — kills a current running game of Mafia
  • !why — find out what the bot is currently waiting for
  • !who — find out who’s in the current game

The bot will prompt with other commands during the game:

  • !join — join a game (before it’s started)
  • !start — start the game (once enough players are in)
  • !leave — leave the current game (can be done at any point in the game)
  • !choose number — used by some of the roles to choose the player they wish to action
  • !accuse @user — used by villagers to accuse others of being in the Mafia
  • !skip — used by villagers to stay quiet

Administering the bot in your server

Control Commands

These can initially only be run by the server owner or members with the Administrator or Manage Server permissions granted. You can give other members or roles the ability to control the bot using the settings command.

  • !here — to mark the channel(s) MafiaBot can use to start games in
  • !use #channel — works like !here, but can be run from outside the channel you want games in
  • !remove — stops MafiaBot from running in the current channel
  • !settings — see the raw saved settings
  • !settings prefix prefix — changes the prefix to prefix
  • !settings adduser @user — allows the user user to adminster the bot
  • !settings removeuser @user — removes user from list
  • !settings addrole @role — allows any user with the role role to adminster the bot
  • !settings removerole @role — removes role from list

If you want the bot to leave your server at any point, just kick it.

Required Permissions

In order to run correctly the bot needs the following permissions set for it, or it won’t run:

  • Manage Channel — on the channel category the bot is in, this is so it can add/remove the extra channels used to communicate with the Mafia during the game
  • Read Messages — in the channels being used to run the game, and any other channels you wish to be able to send control commands from
  • Send Messages — as above
  • Embed Links — on the channel category the bot is in, used to send messages with rich embeds

Running the bot yourself

You can run the bot yourself by cloning this repo, renaming credentials.example.py to credentials.py and adding a bot token and your user ID, then running main.py.

There are a few additional commands bot owners can run, the default prefix is %%:

  • %%stats — gives some info on how many servers and active games the bot is currently running
  • %%leave — removes the bot from the server the command is run on
  • %%logset — mark the current channel as the place to output any internal Python exceptions
  • %%exception — forces an exception (to test the above)
  • %%permissions — for debug, tells you which of the required permissions are missing from the current channel (can be called by a server manager)
  • %%settings — see the raw saved settings
  • %%settings prefix prefix — changes the bot control prefix to prefix
  • %%settings adduser @user — adds user to the list of people allowed to manage the bot
  • %%settings removeuser @user — removes user from the list

Описание бота для игры в Мафию на русском, как скачать и установить в Дискорд

Описание бота для игры в Мафию на русском, как скачать и установить в Дискорд

Mafia bot, как можно понять из названия, – это бот для игры в «Мафию» в Дискорде. Расширение позволяет буквально с помощью пары команд настроить все необходимое для старта ролевой игры. В bot уже заложены все необходимые функции. Пользователям не требуется настраивать что-либо самостоятельно. Им достаточно ввести несколько простых команд и начать игру.

Описание Discord бота

Карточная ролевая игра «Мафия» известна на весь мир. Ее принцип основан на общении участников и их интуиции. В начале игрового дня (название стадии игры) игрокам случайным образом раздаются карточки, по которым определяются их роли. Задача мафии заключается в устранении всех оппонентов. Задача города в лице полицейского, врача и граждан – выявить членов мафии.

screenshot_1

Карточная версия игры стала настолько популярной, что момент ее появления в сетевом пространстве являлся лишь вопросом времени. Первыми появились версии в виде мини-игр, затем – приложения для социальных сетей. Мессенджер Discord не стал исключением. Для него были разработаны боты. Одним из таких является Mafia bot.

В отличие от других расширений с аналогичным функционалом, для игры через Mafia bot пользователям не нужно искать ведущего. Его роль замещается автоматическим алгоритмом. Функционал расширения отличается следующими особенностями:

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

screenshot_2

Команды Mafia bot

Управление функционалом бота осуществляется с помощью простых команд. Разработчики разделили их на три раздела.

Игровые:

  • «series» – начало серии с приглашенными друзьями;
  • «game» – запуск игрового процесса;
  • «vote» – запуск этапа голосования;
  • «score» – отображение счета текущей серии;
  • «end» – завершение серии;
  • «end» при повторном вводе – отображение финального счета прошедшей серии.

screenshot_3

Настойки и справка:

  • «help» – открытие сайта разработчиков бота на странице команд и их описаний;
  • «stats» – отображение статистики пользователя (той учетной записи, с которой вводится команда);
  • «prefix» – запрос текущего префикса, использующегося для ввода команд;
  • «role» – запрос роли, необходимый для игры в Mafia;
  • «channel» – запрос списка каналов, где можно использовать бота;
  • «donate» – открытие страницы для отправки добровольного пожертвования разработчикам.

screenshot_3

Команды администратора:

  • «chamgePrefix (словосочетание, слово или набор цифр и символов) » – смена базового префикса бота;
  • «changeRole» – смена текущей роли на выбранную;
  • «changeChannel #название канала» – перевод бота в другую комнату.

Все команды вводятся с префиксом. По умолчанию – это «!». При желании пользователь, владеющий правами администратора сервера, может менять его на любое другое слово, символы или набор символов. Бот не распознает команды, введенные без префикса.

screenshot_4

Где можно скачать и как установить

Для установки bot Mafia на русском пользователю нужно:

  • Авторизоваться в аккаунте мессенджера.
  • Получить права администратора сервера (если отсутствуют).
  • Перейти на официальный сайт разработчиков бота https://mafia-bot.info/misc/prefix.

screenshot_5

  • Нажать кнопку приглашения.

screenshot_6

  • Подтвердить присоединение бота на сервер.
  • Предоставить расширению разрешения на выдачу ролей, на чтение и отправку сообщений.
  • Начать игру.

Mafia bot распространяется полностью на бесплатной основе. Также у дополнения отсутствуют платные подписки. Пользователи по собственному желанию на добровольной основе могут финансово поддержать разработчиков. Однако выполнение этой операции, равно как и невыполнение, никоим образом не повлияет на функционал и возможность использования игры.



Информационный портал IT Техник

Вам помогло? Поделитесь с друзьями — помогите и нам!

Skip to content

GitLab

    • GitLab: the DevOps platform
    • Explore GitLab
    • Install GitLab
    • How GitLab compares
    • Get started
    • GitLab docs
    • GitLab Learn
  • Pricing
  • Talk to an expert

  • /


  • Help

    • Help
    • Support
    • Community forum

    • Submit feedback
    • Contribute to GitLab

    • Switch to GitLab Next
    Projects
    Groups
    Snippets

  • Register

  • Sign in

mafia_host_bot

mafia_host_bot


Project ID: 36405988

Star
0

Bot that hosts mafia games in Telegram’s groups and supergroups

Find file

Download source code
zip
tar.gz
tar.bz2
tar


Clone

  • Clone with SSH

  • Clone with HTTPS

  • Open in your IDE

    Visual Studio Code (SSH)
    Visual Studio Code (HTTPS)
    IntelliJ IDEA (SSH)
    IntelliJ IDEA (HTTPS)
  • Copy SSH clone URLgit@gitlab.com:K0rch1/mafia_host_bot.git
  • Copy HTTPS clone URLhttps://gitlab.com/K0rch1/mafia_host_bot.git
  • README
  • GNU GPLv3

Понравилась статья? Поделить с друзьями:
  • Как написать бота для дискорда на python для музыки
  • Как написать бота для гта 5 рп
  • Как написать бота для вк на python для беседы
  • Как написать бота для вк на php
  • Как написать бота для ватсап