ТЗ бот Chat GPT
Цель: бот в телеграм, который выполняет функции Chat GPT, но с дополнительными настройками и функциями. Должна быть реализована оплата подписки и пополнения кол-ва токенов.
Модель юзера имеет поля:
__tablename__
= ‘users’
user_id
(id юзера в тлг; pk),
username
(уникальное имя юзера в тлг; может быть null),
first_name/nickname
(на выбор; никнейм пользователя в тлг; null=False),
status
(статус пользователя - подписка; null=False, default=‘standard’)
p.s. Уровни подписки будут разобраны дальше.
token_count
(текущее кол-во токенов; желательно биг инт)
days_left
(можно назвать по-другому; отвечает за оставшееся время подписки)
question_count
(кол-во вопросов; считается каждое отправленное сообщение, на
которое бот дал ответ.)
register_date
(дата регистрации пользователя)
update_date
(время последнего действия пользователя)
referral_count
(кол-во приглашенных пользователей по ссылке)
Есть вероятность, что в ходе написания кода потребуются дополнительные поля - можно добавлять.
У пользователя должен быть ui в виде меню с инлайн-кнопками.
Клавиатуры должна быть реализована генерацией «налету».
Все действия реализовать редактированием одного сообщения, без создания нового.
Пример:
пользователь открывает основное меню > выбирает категорию «профиль». Сообщение
редактируется на сообщение профиля, под сообщением генерируется новая клавиатура.
При нажатии кнопки назад > сообщение вновь редактируется и снова отображает
основное меню и клавиатуру.
На каждом уровне глубины должна быть кнопка назад.
Категории меню (в боте кнопки должны быть капсом, допускается использование эмодзи):
Профиль, Настройки, Помощь, Улучшения, Режим Бота
В кастомные настройки входят:
Модели Бота - это модель, которую будет использовать бот (машина состояний).
Далее по тексту сокращенно будет просто - модель.
Модель представляет собой одну из кастомных настроек бота. В зависимости от
выбранной модели будет зависеть поведение бота и его ответы. В этом разделе
меню можно будет узнать подробную информацию по доступным моделям. Добавить
плейсхолдер, уведомляющий пользователя о выбранной модели (текущая модель,
которая будет использоваться).
В самом меню должна кнопки должны быть с радиокнопкой, оповещающие какая модель
выбрана в данный момент.
При выборе модели должно быть оповещение в чате, сигнализирующее о выбранной модели.
Сообщение должно удаляться спустя 3 сек.
Реализовать с помощью очереди.
Настройки:
Настройки у каждого пользователя должны быть свои, метод реализации - на выбор.
Можно использовать Redis или MongoDB, или что-то другое. Здесь должен быть ui
по настройке параметров модели. Обязательно указывается текущая модель, которая
будет настраиваться. Должна быть возможность скинуть настройки на дефолтные
(инлайн кнопка). Принцип работы:
При выборе категории настройки появится инлайн-клавиатура со всеми доступными
моделями. При выборе конкретной модели открывается меню настроек. В меню будут
прописаны текущие параметры и клавиатура для изменения этих настроек. (Пока что
можно сделать заглушками, просто кнопки; 3 кнопки - стандартная настройка, точная,
творческая).
В дальнейшем будет добавлена возможность тонкой настройки, путем инкримента параметров.
Профиль: В этом сообщении будет содержаться информация о пользователе.
- Никнейм пользователя.
- Кол-во заданных вопросов.
- Кол-во токенов.
- Статус.
- Оставшееся время подписки или, в случае отсутствия подписки - время до восстановления токенов.
Каждый запрос, на который бот дал ответ увеличивает счетчик вопросов. В противном случае счетчик не изменяется.
В этой категории должна быть кнопка на реферальную систему.
При переходе по кнопке будет даваться реферальная ссылка. В случае перехода
другого пользователя по ссылке, будет меняться счетчик рефералов в бд, а
пользователю начисляться дополнительные токены.
Помощь:
Здесь будет помощь по боту:
Как работают токены, как они высчитываются и для чего нужны.
Информация по моделям, а так же информация по доступным командам.
Информация по командам записывается с учетом принимаемых аргументов.
Есть два варианта реализации:
- 1 пагинация, ограничивающая кол-во символов на одной странице в ~1000 символов.
- 2 разделение по категориям. Отдельно про токены, модели и команды.
Улучшения:
Будет содержать краткую информацию о доступных улучшениях и клавиатуру:
- Подписка
- Токены
При переходе по кнопке «подписка» появятся еще 3 кнопки с названиями подписки.
Для простоты назовем просто «подписка 1», «подписка 2», «подписка 3». Названия
этих уровней подписки будет отображаться в профиле (если она активирована, иначе
«standart») и эти же названия будут использованы в поле status в бд.
При выборе одной из подписок будет возможность выбора 3 разных вариантов подписки:
на месяц, на 3 месяца и на 6. При нажатии на кнопку появляется информация о
стоимости и приглашение к оплате.
При переходе по кнопке «токены» будет предложено докупить кол-во токенов и 5 вариантов.
Команды:
/reset
- cброс всех настроек моделей к дефолтным. Если указан аргумент, то удаляется только определенная модель./get_notes
- получить список заметок/menu
- открыть меню/help
- открыть помощь/set
- если указана без аргументов, то открывается категория меню «Режим Бота» с выбором модели. Если указан аргумент, то активируется выбранная модель, указанная в аргументе./ask
- задать вопрос/получить фидбек
Подписка:
Подписку можно продлить, если она того же уровня (не выше уровнем). В случае
попытки выбора более продвинутой подписки - предупреждать, что старая сгорит,
но будет возмещена компенсация в размере оставшихся дней (компенсацию можно
не реализовывать, ее наработки уже есть)
Должен быть сброс бесплатных токенов (очередь или шедулер. Таймер: неделя. Каждую неделю должен осуществляться сброс бесплатных токенов). Токены сбрасываются в том случае, если текущее число токенов меньше установленного еженедельного лимита.
При старте - приветственное сообщение, просьба ознакомиться с правилами и возможностями бота (Помощь или /help) и кнопка с ссылкой на правила. Также отправляется сообщение с менюшкой.
Как работает подписка:
Если у пользователя нет подписки, то после приобретения вступают в силу все
преимущества, описанные в подписке.
Если пользователь продлевает подписку того же уровня, то увеличивается время
действия подписки. Кол-во токенов при этом никак не меняется.
В случае смены подписки, например, с обычной на премиум > прошлая подписка сбрасывается,
возвращая компенсацию за не потраченные дни. Кол-во оставшихся дней принимает значение
кол-ва дней приобретенного пакета. Устанавливается кол-во токенов соответственно кол-ву
токенов в подписке, если у пользователя их меньше - иначе кол-во токенов остается прежним.
При попытке покупки токенов при подписке unlimited отменять платеж и предупреждать пользователя, что у него безлимитная подписка.
При попытке купить подписку уровня ниже заказ должен отменяться и предупреждать пользователя, что он приобретает подписку статусом ниже, чем имеет. Если он все равно намерен приобрести подписку, то предупредить, что компенсации не будет. И если пользователь не передумал, то попросить повторить запрос еще раз. При повторной подаче заявки - платеж должен уже пройти.