Skip to content

LARP BankBot: Generic bot for banking engine in Live-Action Roleplaying Games

License

Notifications You must be signed in to change notification settings

Tengro/larp_bankbot

Repository files navigation

LARP BankBot

LARP BankBot: бот загального користування для імплементації банкінгу на рольових іграх живої дії

Статус проекту

Статус білда майстер-бранчу (Travis CI): Build Status Coverage Status
Кнопка для пожертв для бажаючих:
Donate

Для чого це потрібно?

Мета розробки даного проекту - поширення використання сучасних технологій у РІЖД; найбільш очевидна система, що часто стає у нагоді у грі - банківська система. Даний код дозволяє заощадити масу зусиль і розвернути типовий банкінг для будь-якої гри за півгодини, використовуючи ботів Telegram.

Деталі про використання програмних продуктів у рольвих іграх живої дії дивіться у матеріалах моєї лекції для конвенту d!RDay-2019

Встановлення

Завантаження

Завантажте код з репозиторію в будь-яку зручну для вас папку на вашому комп'ютері. Переконайтеся, що в вас встановлено Python версії 3.6.3 або новіше і остання версія PIP. Після встановлення Python та PIP у папці, в яку ви завантажили код, виконайте команду:

pip install -r requirements.txt

для встановлення необхідних пакетів.

Інструкція з встановлення Python
Інструкція з встановлення PIP

Альтернатива

Поки що доступна лише для Windows

Завантажте в одну папку файли за цим посиланням:
https://fex.net/s/o2ldmvc
(Якщо посилання не працює, будь ласка, напишіть мені і скористайтеся версією з релізів гітхабу - останній знаходіться за адресою https://github.com/Tengro/larp_bankbot/releases/latest . Вам потрібні обидва файли - і .exe, і .ini)

Після цього вам потрібно лише вказати токен вашого боту у файлі config.ini і запустити бота як звичайний exe-файл

Отримання токену

Перш ніж запускати LARP BankBot, вам буде необхідно зареєструвати бота у Telegram та отримати унікальний ID бота (він працює і як токен) Для цього в Telegram існує спеціальний бот — @BotFather.

Напишіть йому /start щоб отримати список команд. Головна команда — /newbot — відправте його цьому боту і він попросить вказати ім'я вашого бота (воно обов'язково має закінчуватися на "bot"). Якщо все вийшло, BotFather поверне повідомлення з токеном бота та лінкою на нього. Тут можна вказати аватар бота.

Запуск бота

Отриманий токен вставте у файл config.ini в якості значення змінної. Ви маєте отримати у файлі наступний рядок:

BOT_TOKEN = "(ваш токен бота, лапки обов'язкові)"

Після цього запустіть через python файл run_bank_bot.py:

./run_bank_bot.py

І напишіть вашому боту команду /start

Вітаю! Ви запустили активного бота для банкінгу!

Якщо ви - майстер гри, для якої ви створили цього бота, одразу ж введіть команду /create_admin

Ця команда прив'яже ваш аккаунт у Telegram до цього бота в якості адміністративного аккаунту.

Налаштування

Даний бот має відносно малу кількість налаштувань переважно косметичного характеру; у даній інструкції будуть розглянуті основні з них. Усі налаштування знаходяться у файлі settings.py у папці bank_bot

Основні налаштування

BOT_TOKEN = "" - Токен бота. Необхідно вказати для роботи
DATABASE_FILE = "bot_base.db" - Адреса бази даних. Не змінюйте, якщо не певні у тому, що робите!
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" - Формат виведення дати та часу.
HACKING_ALLOWED = True - Вказує, чи активний додатковий модуль "хакінгу". Вкажіть True для ввімкнення, False для вимкнення

Текст повідомлень

У тому ж файлі існує набір текстів повідомлень бота. Їх також можна редагувати - наприклад, для перекладу або більшої відповідності стилістиці гри.

Загальний список команд

Повний список команд, доступ до яких є у всіх зареєстрованих у системі користувачів. Тут і далі квадратні дужки використовуться лише як означення того, що замість них має бути вказане те, що в них згадується.

/start - прочитати привітання
/help - довідка/список загальних команд
/admin_help - довідка/список адміністративних команд
/hacker_help - довідка/список хакерських команд
/register [ім'я персонажа] - реєстрація персонажа (1 персонаж на 1 користувача на 1 бота)
/inspect - дані про персонажа (якщо його зареєстровано)
/message [хеш персонажа] [текст повідомлення] - передати повідомлення через бота (підписане хешем вашого персонажа)
/history_sent - вивести список надісланих транзакцій
/history_recieved - вивести список отриманих транзакцій
/history_all - вивести список усіх власних транзакцій
/history_pair [хеш персонажа] - вивести список усіх транзакцій між вашим персонажем та ціллю
/send [хеш персонажа] [сума] - надіслати вказану суму персонажу з вказаним хешем з рахунку свого персонажа
/history_messages - вивести список усіх власних повідомлень
/history_messages_sent - вивести список надісланих повідомлень
/history_messages_recieved - вивести список отриманих повідомлень
/history_messages_pair [хеш персонажа] - вивести список усіх повідомлень між вашим персонажем та ціллю
/add_contact [хеш персонажа] [ім'я персонажа] - додати у список контаків персонажа персонажа з вказаним хешем (під вказаним ім'ям)
/delete_contact [хеш персонажа] - видалити обраний хеш зі списку контактів
/contact_list - вивести список контактів персонажа

Приклади використання

/register Морган Кларк - рєеструє у системі персонажа під ім'ям "Морган Кларк"; повертає користувачу хеш цього персонажа. Саме хеш є основним ідентифікатором і дозволяє взаємодіяти з іншими персонажами у системі. Якщо спробувати зареєструватися другий раз, система видасть повідомлення про те, що на ваш юзернейм уже прив'язано персонажа (або, якщо ви спробуєте зареєструвати такого ж персонажа з іншого юзернейму - про те, що такий персонаж уже існує)
/inspect - повертає дані про персонажа "Морган Кларк"
/send 0000000000 1000 - надсилає 1000 одиниць фінансів з рахунку персонажа "Морган Кларк" (вашого персонажа) на рахунок персонажа з хешем "0000000000" (це - службовий хеш, що встановлюється головному адміністратору гри при його створенні). Якщо у персонажа "Морган Кларк" недостатньо фінансів - транзакція не відбудеться, а система повідомить вас про це.

Підсистема хакерської активності

У випадку, якщо у налаштуваннях встановлено HACKING_ALLOWED = True (за замовчуванням це саме так), окрім системи банкінгу і обміну повідомленнями активується підсистема хакерства. Вона скоріш рудиментарна на даному етапі розробки, але дозволяє надати певного флеру хакерства грі.

Можливості хакера

Отже, хакер (будь-який персонаж, у якого параметр Рівень хакерських здібностей більше за 1) має наступний список можливостей:

  • Надсилання анонімного повідомлення
  • Отримання доступу до загальних даних про користувача
  • Отримання доступу до списку транзакцій (як надісланих, так і отриманих)

Основне обмеження: у випадку, якщо рівень захисту від зламу у цілі більший або рівний за рівень хакерських здібностей хакера, ціль отримує повідомлення про те, яку саме інформацію і хто саме (вказується хеш, а не ім'я персонажа) отримав.

Список хакерських команд

Доступ до будь-якої з команд цього списку потребує, щоб рівень хакерських здібностей персонажа був більший за 0 і модуль хакінгу було увімкнено

/hacker_help - довідка/список хакерських команд;
/h@ck_user [хеш персонажа] - отримайте дані про профіль вказаного персонажа
/h@ck_history_sent [хеш персонажа] - вивести список отриманих транзакцій для обраного персонажа
/h@ck_history_recieved [хеш персонажа] - вивести список надісланих транзакцій для обраного персонажа
/h@ck_history_all [хеш персонажа] - вивести список усіх транзакцій для обраного персонажа
/h@ck_history_pair [хеш персонажа 1] [хеш персонажа 2] - вивести список усіх транзакцій між персонажем 1 та персонажем 2
/h@ck_history_messages [хеш персонажа] - вивести список усіх повідомлень цілі
/h@ck_history_messages_sent [хеш персонажа] - вивести список надісланих повідомлень цілі
/h@ck_history_messages_recieved [хеш персонажа] - вивести список отриманих повідомлень цілі
/h@ck_history_messages_pair [хеш персонажа 1] [хеш персонажа 2] - вивести список усіх повідомлень між парою персонажів
/h@ck_theft_other [хеш персонажа 1] [хеш персонажа 2] [сума] - викрасти вказану суму з рахунку персонажа 1 на рахунок персонажа 2. Для анонімізації транзакція буде підписана неіснуючим хешем
/h@ck_theft [хеш персонажа] [сума] - викрасти вказану суму з рахунку персонажа на власний рахунок. Для анонімізації транзакція буде підписана неіснуючим хешем
/h@ck_message [хеш персонажа] [текст повідомлення] - надіслати персонажу повідомлення, підписане анонімним хешем

Адміністративні команди

Адміністратори гри (майстри) мають певний набір команд, що дають їм додатковий доступ до гри. Список команд адміністратора (для доступу до них флаг is_admin у персонажа має бути більше 0 - окрім команди /create_admin)

/admin_help - довідка/список адміністративних команд
/create_admin - створення адміністративного користувача (якщо його ще не існує)
/delete [хеш персонажа] - видалення персонажа
/inspect_all - дані про всіх зареєстрованих персонажів гри
/set_attribute [хеш персонажа] [назву атрибуту; одне зі списку - finances|hacker_level|hacker_defence|is_admin] [нове значення атрибуту] - встановити атрибут персонажа рівним значенню
/admin_inspect_user [хеш персонажа] - отримайте дані про профіль вказаного персонажа
/admin_history_recieved [хеш персонажа] - вивести список отриманих транзакцій для обраного персонажа
/admin_history_sent [хеш персонажа] - вивести список надісланих транзакцій для обраного персонажа
/admin_history_all [хеш персонажа] - вивести список усіх транзакцій персонажа
/admin_history_pair [хеш персонажа 1] [хеш персонажа 2]- вивести список усіх транзакцій між парою персонажів
/admin_history_messages_all [хеш персонажа] - вивести список усіх повідомлень цілі
/admin_history_messages_sent [хеш персонажа] - вивести список надісланих повідомлень цілі
/admin_history_messages_recieved [хеш персонажа] - вивести список отриманих повідомлень цілі
/admin_history_messages_pair [хеш персонажа 1] [хеш персонажа 2] - вивести список усіх повідомлень між парою персонажів
/admin_add_contact [хеш персонажа 1][хеш персонажа 2] [ім'я персонажа] - додати у список контаків персонажа 1 персонажа 2 з вказаним хешем (під вказаним ім'ям)
/admin_delete_contact [хеш персонажа 1] [хеш персонажа 2] - видалити обраний хеш зі списку контактів персонажа 1 /admin_inspect_contact_list [хеш персонажа] - вивести список контактів персонажа

Масовий апдейт

УВАГА! Вказана фіча існує у тестовому режимі і потребує дуже жорсткого форматування файлів

Для полегшеня базових оновлень для усіх персонажів одразу у боті існує адмінська можливість масового апдейту користувачів у базі даних за допомогою .csv файлу. Для цього потрібно надіслати боту .csv-файл із одним із наступних підписів:

/admin_mass_character_csv - для масового оновлення характеристик персонажів. Структура рядку: character_hash,finances,hack_level,hack_defence,is_admin Перший рядок - хедер (для зручності читання), буде проігноровано парсером

/admin_mass_contact_csv - для масового оновлення задання списку контактів персонажів. Структура рядку: owner_hash,target_hash,target_name Перший рядок - хедер (для зручності читання), буде проігноровано парсером

Плани розвитку

  • Покращити доступність команд
  • Надати можливість відміни транзакцій та видалення повідомлень
  • Після другої тест-сесії та тестування під наванатаженням почати збір фідбеку і роботу з ним

Відомі проблеми:

  • Немає валідації імен між мовами - при валідації імені персонажа "o" кириличне відрізняється від "o" латинського (тому можливий identity theft на рівні імен персонажів - але у будь-якому випадку усі операції у боті відбуваються через хеші).

Подяки

Дякую Эльзі Райт, Вольсі, Night de Lune, Михайлу Андріяшу за участь у альфа-тестуванні боту! Дякую Кит, Піксі, Ф'ялару, Мар та гравцям Inrtra: the Golden Age за можливість бета-тестування боту на практиці!

Список проектів, на яких використовувався бот

Intra: the Golden Age

Щиро ваш, Андрій Лящук a.k.a. Tengro

About

LARP BankBot: Generic bot for banking engine in Live-Action Roleplaying Games

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages