there is a decorator, there is a function in it, as part of this function, there is a special value generator that writes them into an array, and this array must be passed to another decorator to get values from it ..
... # при старте бота, запускается каманда 'start' @bot.message_handler(commands=['start']) def handle_text(message): markup = telebot.types.ReplyKeyboardMarkup(True) markup.row('I AM RANDOM') # Подключаемся к БД db_worker = SQLighter(config.database_name) # Получаем количество строк, формируем массив и перемешиваем его l = list(range(1, db_worker.count_rows() + 1)) # <<<<<<< random.shuffle(l) bot.send_message(message.from_user.id, 'Welcome', reply_markup=markup) # Отлавливаем нажатия на клавишу 'I AM RANDOM' @bot.message_handler(content_types=['text']) def game(message): if message.text == 'I AM RANDOM': # Подключаемся к БД db_worker = SQLighter(config.database_name) # Получаем случайную строку из БД # массив заранее генерируемых чисел берем с функции декоратора row = db_worker.select_single(l[0]) # <<<<<<< markup = telebot.types.ReplyKeyboardMarkup(True) markup.row('I AM RANDOM') # Отправляем данные bot.send_message(message.chat.id, row[1] +'\n\n' + row[5], reply_markup=markup) db_worker.close() ... ps goal to get strings in random order from the database without repeating