Система промокодов Telebot

Подскажите как реализовать систему использования промокодов, чтоб пользователь мог только один раз использовать промокод. У меня в голову приходит только записывать ид каждого пользователя, который ввел промокод и записывать его в базе. Но может есть более легкий способ реализации?


Ответы (3 шт):

Автор решения: Slayer Leon

А обязательно ли занесение промокодов в БД? Если не обязательно, то может подойдёт следующий вариант:

promocode = input() # сюда админ бота вводит промокод для пользователя
promo_in = input('Please, enter here your promocode: /n') # сюда пользователь вводит промокод

if promo_in == promocode:
    del promocode # удаляет переменную с промокодом, а значит, даже если пользователь введёт его повторно, проверку на совпадение с админским вводом пройти он не сможет

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

→ Ссылка
Автор решения: MatthewBR

Реализовал через текстовик. При создании промокода создавался текстовик. Когда пользователь использовал промокод, его id записывался в текстовик. Ну и при удалении промокода удаляется и текстовик

→ Ссылка
Автор решения: mrprogre

Если использовать SQLite, то можно применить такую конструкцию:

SELECT * FROM table_name q WHERE NOT EXISTS(SELECT 1 FROM table_name WHERE промо_проверяемый = q.ранее_введённый_промокод AND проверяемый_id = q.записанный_в_базе_id)

Записываете всё в базу, а этим селектом проверяете новые данные, нет ли совпадений.. если есть - не делаете дальнейшие действия.

→ Ссылка