Шукаю програміста для написання Telegram бота на python. Бот повинен буде читати чати, в які його додали. Реагувати на деякі повідомлення, виконувати деякі обчислення і писати результат у чат.
Навички:
- aiogram 3
- postgresql і вміти в архітектуру баз даних
- docker, docker compose, потрібно вміти піднімати базу і апку на VM. У нашому випадку буде hetzner. Ну і детальне логування прикрутити.
- ton api (потрібно буде прикрутити поповнення балансу через ton, я там з усіма нюансами підкажу якщо що)
Тепер більш детальне ТЗ, щоб ви могли оцінити роботу за часом і ціною (та ціна, що я вказав за проект, нічого не означає)
У мене є файловий структура, взяв її з одного з своїх проектів, трохи почистив зайве і навіть почав писати моделі. Але вирішив, що краще віддам на аутсорс цю роботу. Якщо ви хочете робити з 0 або у вас є свої сетапи, то це навіть краще, головне, щоб проект мав потенціал до масштабування. Приблизно такі таблиці в базі: користувачі, чати, партії_ігри_1, партії_ігри_2, транзакції поповнення, запити на вивід
/start повертає повідомлення:
Привіт <ім'я>
Ваш баланс: 1000
Клавіатура під повідомленням:
- Оновити баланс
- Додати в чат(не пам'ятаю, чи можна викликати модалку, яка додає бота у ваш чат)
- Як використовувати
- Поповнити
- Запросити вивід
Кнопка: Як використовувати змінює текст повідомлення і робить клавіатуру з кнопкою «назад».
Повідомлення:
"Це бот для гри в монетку або кості. Для гри потрібно:
1. Бот доданий у чат (ніякі права йому давати не потрібно)
2. У кожного з гравців запущений цей бот
...правила ігор..."
Кнопка: Додати в чат - зрозуміло з назви))
Кнопка: Оновити баланс - просто редагує повідомлення, виводячи актуальний баланс
Кнопка: Поповнити - змінює текст на:
"Щоб поповнити баланс, надішліть TON на адресу: <адреса гаманця> з comment: <унікальний id для поповнення>
Курс обміну 1 TON = 100 Points"
Кнопка: Запросити вивід - відправляємо повідомлення "Напишіть суму Points, яку хочете вивести (при виводі стягується 10% комісії на розвиток проекту)"
читаємо вхідні повідомлення, обробляємо варіант, якщо не вистачає балансу
якщо все ок, то відправляємо повідомлення "вкажіть гаманець, на який здійснити вивід"
перевіряємо його на валідність, якщо все ок, кнопка "Запросити вивід" буде кнопкою "Скасувати вивід", а в /start повідомленні з'являється сума виводу і дата найближчого дропа
Кнопка: Скасувати вивід - змінюємо повідомлення на "Ви впевнені, що хочете скасувати вивід" клавіатура: так, ні
Гра 1 монетка
Гравець 1 пише:
Решка 10
(10 кількість поінтів, на які буде гра)
Гравець 2 відповідає на його повідомлення:
Граю / го / (список відповідей)
Після цього випадковим чином вибирається, випав орел чи решка, і відповідно до результату з балансу одного гравця бали переходять на баланс другого. Це супроводжується
повідомленням:
Решка 🪙
<ім'я програвшого> =10=> <ім'я вигравшого>
Гра 2 кості
Гравець 1 пише:
Кубик 10
Гравець 2 відповідає на його повідомлення:
Граю / го / (список відповідей)
Після цього ми чекаємо від кожного гравця повідомлення з емоджі кубика, дивимося, у кого більше, відповідно до результату з балансу одного гравця бали переходять на баланс другого. Це супроводжується
повідомленням:
Кубик 🎲
<ім'я програвшого> =<кількість балів>=> <ім'я вигравшого>
(дуже сподіваюся, що там емоджі з різним результатом кубика має різний код, але якщо не вийде отримати результат, обійдемося трохи іншою текстовою логікою)
Також можливі варіанти від Гравця 1:
Парне 10 (тут гра теж 50/50, у кого парне, у кого непарне)
Більше2 10 (тут, наприклад, гравець 1 виграє в 2/3 випадків, відповідно, 1 гравець при виграші отримає 10, а гравець 2 при виграші забере 20) тут багато варіантів, типу Менше3, Більше 5 і т.д.
При додаванні в чат, бот повинен робити все, що описано в повідомленні про те, як грати. Якщо на балансі одного з гравців недостатньо поінтів - бот просто нічого не робить, але надсилає йому в діалог повідомлення про це. Рішення неоднозначне, але не бачу сенсу засмічувати чат, а права на видалення повідомлень відрізають частину аудиторії.
Після закінчення кожної партії переможцю в бота приходить повідомлення про виграш
Якщо на повідомлення гравця 1 не відповідають 5 хвилин, воно "деактивується"
Додаткові вимоги
Потрібно написати нормальний README.md з усіма нюансами установки і запуску докера
Всі тексти повинні бути винесені в json
Повинна бути нормальна структура проекту (без файлів по 300 рядків)
Все, що потрібно, винесено в .env, в ідеалі мати dev і prod конфіги
Тексти повідомлень, назви кнопок і всі ці шляхи навігації винесу кудись типу міро, щоб було зручніше дивитися