Как формировать ключи доступа к боту на определенное время?
Доброго времени суток! Написан хороший, полезный Telegram бот на python, хочется сделать его приватным - человек пишет мне, я создаю ключ доступа на определенное время (пример ключа: PJZ3SbvkK1bM - 1 день), пользователь вводит ключ в бота и получает доступ на указанное время (1 день). По истечении указанного времени доступа у пользователя больше не будет, и он сможет написать мне за новым ключом.
Мои наброски:
Создание файла с ключами:
keys = open("Keys.txt", "w+")
Создание нового ключа:
if message.text == 'Добавить ключ' and message.from_user.id == admin_id:
bot.send_message(message.chat.id, 'Введите ключ')
bot.register_next_step_handler(message, save_new_key)
Запись ключа:
def save_new_key(message):
if message.text == 'Отменить':
bot.send_message(message.chat.id, 'Отменено.')
else:
keys = open("Keys.txt", "a+")
keys.write('\n'message.text)
keys.close()
bot.send_message(message.chat.id, 'Ключ добавлен')
adminpanel(message)
Авторизация пользователя:
@bot.message_handler(commands=['start'])
def start(message):
if access(str(message.from_user.id)) == True:
main_btn(message)
else:
get_access(message)
def access(user_id):
if f'{user_id}.txt' in os.listdir('Members/WithKey'):
return True
else:
return False
def get_access(message):
bot.send_message(message.chat.id, 'Введи ключ доступа')
bot.register_next_step_handler(message, check_key)
def check_key(message):
with open("Keys.txt") as f:
keys = f.read()
keys_list = eval(keys)
for onekey in keys_list:
if message.text == onekey:
num = int(message.text)
try:
file = os.listdir('Members/All/')[num - 1]
with open(f'Members/All/{file}', 'r') as f:
g = f.read()
with open(f'Members/WithKey/{file}', 'w') as d:
d.write(g)
bot.send_message(message.chat.id, 'Доступ к боту получен!')
main_btn(message)
except:
bot.send_message(message.chat.id, 'Произошла ошибка')
else:
bot.send_message(message.chat.id, 'Неверный ключ')
Вопрос.
Что-то мне подсказывает, что этот код не сработает сразу как надо, я еще не совсем мастер. Можно сказать новичок. Подскажите пожалуйста, как же все таки выдавать доступ на определенное время, а не на всегда? Я был бы вам очень благодарен, если бы получил ответ вместе с кусками кода. Спасибо!
UPD: Возможно, лучше создавать группы пользователей следующим образом:
if os.path.exists('Members/All'):
pass
else:
os.mkdir('Members/All')
if os.path.exists('Members/WithKey'):
pass
else:
os.mkdir('Members/WithKey')
Ответы (1 шт):
Не нужно работать с файлами, работайте с базой.
- Создайте таблицы
keysиkeys_users. - Поля в
keys:id,key,days. - Поля в
keys_users:id,user_id,key_id,until_at,created_at. - Добавьте ключи в базу (
keys), и у каждого ключа укажите, сколько дней активен этот ключ. - Привязывайте ключи к пользователям (
keys_users) указывая айди ключа и айди юзера (key_idиuser_id). К это записи устанавливайте срок действия от текущей даты до +количество дней ключа. - Проверяйте где нужно, есть ли у пользователя активный ключ.