LARP BankBot: бот загального користування для імплементації банкінгу на рольових іграх живої дії
Статус білда майстер-бранчу (Travis CI):
Кнопка для пожертв для бажаючих:
Мета розробки даного проекту - поширення використання сучасних технологій у РІЖД; найбільш очевидна система, що часто стає у нагоді у грі - банківська система. Даний код дозволяє заощадити масу зусиль і розвернути типовий банкінг для будь-якої гри за півгодини, використовуючи ботів 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