@tokyodead

Как сделать некоторые функции в telegrabotapi Python?

Добрый день, я новичок, и только изучаю питон, пишу телеграм бота, который по запросу пользователя будет выдавать ему справку о том что он учиться в универе, справка в pdf формате.
1)При отправке в первый раз, бот отправляет ему справку, при второй попытке появляется ошибка о том что база данных закрыта.
2) Справок будет несколько, и я не знаю как их хранить и как бот должен понимать что пользователю нужна не 1-ая справка а 2-ая. Справки создаются автоматически, с помощью библиотеки fpdf.
Вот код, просите за говнокод, пытаюсь своими силами написать.
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
    item1 = types.KeyboardButton('Заказать справку')
    markup.add(item1)
    bot.send_message(message.chat.id, 'Вас приветствует бот myboy', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def bot_message(message):
    if message.chat.type == 'private':
        if message.text == 'Заказать справку':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item1 = types.KeyboardButton('Справка#1')
            back = types.KeyboardButton('Назад')
            markup.add(item1, back)
            bot.send_message(message.chat.id, 'Какая справка Вам нужна?', reply_markup=markup)

        elif message.text == 'Справка#1':
            bot.send_message(message.chat.id, 'Введите ИИН')

        elif message.text.isdigit and len(message.text) == 12:
            with con:
                cur = con.cursor()
                sql = "SELECT `fullname` FROM `bot_db` WHERE `iin`=%s and status=1 and user_type=1 limit 1 "
                cur.execute(sql, (message.text,))
                result = cur.fetchone()
                name = result
                age = '1997-01-08'
                page_name = str(name) + '.pdf'
                get_pdf(name,age, page_name)
                bot.send_message(message.chat.id, result)
                r = open('C:\\Users\\Alkon PC\\PycharmProjects\\mainpy\\{}'.format(page_name), 'rb')
                bot.send_document(message.chat.id, r)

        elif message.text == 'Назад':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item1 = types.KeyboardButton('Заказать справку')
            markup.add(item1)
            bot.send_message(message.chat.id, 'Назад', reply_markup=markup)

bot.polling(none_stop=True)
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
1. "with con:" закроет соединение по выходу из блока with.
2. Зачем вообще хранить справки, если вы их генерируете на лету? Или они будут как-то ещё обрабатываться?
3. Я бы посоветовал вынести всё, что касается работы с базой и генерации PDF в отдельный класс, а боту оставить ботово, т.е. интеграцию с телегой. Так и отлаживать проще, и код поддерживать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы