Выдача ключа один раз в одни руки на telebot

import telebot, random


bot = telebot.TeleBot("[токен]")


@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
    bot.reply_to(message, f"Чтобы получить инвайт, набери команду /код или /code")



@bot.message_handler(commands=['код', 'code'])
def send_key(message):
    getkey = open('/home/quote/Documents/Python/test/ServerTg/keys.txt').read().splitlines()
    mykey = random.choice(getkey)
    idUser = message.from_user.id
    bot.reply_to(message,f'Твой ID - {idUser}\n\n ❗️Не передавай этот код никому\nИнвайт-код можно получить только один раз!\n\n Твой код: {mykey}\n')

bot.infinity_polling()

Также нужно сохранить idUser в список и присвоить ему ключ из файла keys.txt. И каждый раз проверять получал ли пользователь ключ. Если получал, то отправить в консоль print('UserAlrealyGetKey')


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

Автор решения: Максим

Предлагаю подключить базу данных к этому боту, все достаточно просто

import telebot 
import sqlite3 

#создание базы данных
base = sqlite3.connect('database.db', check_same_thread=False)
cur = base.cursor()

#создание таблицы
base.execute('CREATE TABLE IF NOT EXISTS {}(id PRIMARY KEY, key TEXT)'.format('key'))
base.commit()

bot = telebot.TeleBot(token)

@bot.message_handler(commands = ['code'])
def add_db(message):
    try:
        #не хочу писать код по генериации ключа, по это ключ это будет просто переменная key_gen
        key_gen = 'Сгенерированый ключ'
        #добавление в таблицу данных
        cur.execute('INSERT INTO key VALUES(?, ?)', (f'{message.chat.id}', f'{key_gen}'))
        base.commit()
        bot.send_message(message.chat.id, f'Ваш ключ {key_gen} добавлен в таблицу!')
    except:
        bot.send_message(message.chat.id, 'Вы уже получили свой ключ')
        print('UserAlrealyGetKey')

bot.polling(True)

Советую научится работать с базами данных, в будущем это очень даже пригодится)

→ Ссылка