Проблема с вводом и выводом данных Telegram Bot
Для дипломной защиты моя тема - это разработка телеграм бота "Организация праздников". Я сделал такие функции, как выбор площадки, праздника, реквизита и персонала, но мне осталось сделать так, чтобы любой выбор пользователя вносился в БД и отображался при нажатии кнопки "Бронирование".
import sqlite3
from telebot import types
from time import sleep
bot = telebot.TeleBot('')
name = None
start_message_id = None
start_chat_id = None
contact_info = {}
user_messages = {}
@bot.message_handler(func=lambda message: message.text == 'Заполнить данные ?')
def handle_fill_data(message):
bot.send_message(message.chat.id, "Введите ваше имя и номер телефона (в формате: +XXXXXXXXXXX):")
bot.register_next_step_handler(message, confirm_data)
def confirm_data(message):
user_data = message.text
confirmation_message = f"Ваши данные: {user_data}\n\nДанные верны?"
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
confirm_btn = types.KeyboardButton("Данные верны ✅")
edit_btn = types.KeyboardButton("Нет, хочу исправить ❌")
markup.add(confirm_btn, edit_btn)
bot.send_message(message.chat.id, confirmation_message, reply_markup=markup)
@bot.message_handler(func=lambda message: message.text in ["Данные верны ✅", "Нет, хочу исправить ❌"])
def handle_confirmation(message):
if message.text == "Данные верны ✅":
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('Вернуться в главное меню')
markup.add(btn1)
bot.send_message(message.chat.id, "Спасибо, данные подтверждены! В ближайшее время мы свяжемся с вами.", reply_markup=markup)
elif message.text == "Нет, хочу исправить ❌":
bot.send_message(message.chat.id, "Введите ваше имя и номер телефона (в формате: +XXXXXXXXXXX):")
bot.register_next_step_handler(message, confirm_data)
@bot.message_handler(commands=['start'])
def start(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
btn1 = types.KeyboardButton('На открытом воздухе ?')
btn2 = types.KeyboardButton('В арендованном помещении ?')
btn3 = types.KeyboardButton('Выезд на дом ?')
markup.add(btn1, btn2, btn3)
bot.send_photo(message.chat.id, 'https://sun9-63.userapi.com/impg/5tZ63IVN5MIwTTcv8yyaX41VdvAZ9r8EzmOYEw/dEqH0tUIZOg.jpg?size=720x544&quality=96&sign=bad489983a2d719d7e48f73e6015c4a2&type=album', caption='Привет {0.first_name}! Я помогу организовать вам праздник.' .format(message.from_user), reply_markup=markup)
conn = sqlite3.connect('bd.sql')
cur = conn.cursor()
cur.execute( 'CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(50), pass varchar(50))')
conn.commit()
cur.close()
conn.close()
bot.send_message(message.chat.id, 'Сначала вам необходимо авторизоваться. Введите свой логин:')
bot.register_next_step_handler(message, user_name)
def user_name(message):
global name
name = message.text.strip()
bot.send_message(message.chat.id, 'Введите пароль:')
bot.register_next_step_handler(message, user_pass)
def user_pass(message):
password = message.text.strip()
conn = sqlite3.connect('bd.sql')
cur = conn.cursor()
cur.execute(f"INSERT INTO users (name, pass) VALUES ('%s', '%s')" % (name, password))
conn.commit()
cur.close()
conn.close()
markup = telebot.types.InlineKeyboardMarkup()
markup.add(telebot.types.InlineKeyboardButton('Список пользователей', callback_data='users'))
bot.send_message(message.chat.id, 'Пользователь зарегистрирован!', reply_markup=markup)
bot.send_message(message.chat.id, 'Давайте выберем место проведения мероприятия:')
@bot.callback_query_handler(func=lambda call: True)
def callback(call):
conn = sqlite3.connect('bd.sql')
cur = conn.cursor()
cur.execute('SELECT * FROM users ORDER BY id DESC LIMIT 5')
users = cur.fetchall()
info = ''
for el in users:
info += f'Имя: {el[1]}, пароль: {el[2]}\n'
cur.close()
conn.close()
bot.send_message(call.message.chat.id, info)
@bot.message_handler(content_types=['text'])
def bot_message(message):
if message.chat.type == 'private':
if message.text == 'На открытом воздухе ?':
markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
btn1 = types.KeyboardButton('Праздники ?')
btn2 = types.KeyboardButton('Реквизит ?')
btn3 = types.KeyboardButton('Персонал ?')
btn4 = types.KeyboardButton('Бронирование ✅')
back1 = types.KeyboardButton('Выбрать другое место')
markup.add(btn1, btn2, btn3, btn4, back1)
bot.send_message(message.chat.id,'Организация праздника на открытом воздухе имеет множество преимуществ, которые делают такие мероприятия особенно привлекательными и запоминающимися.')
sleep(2)
bot.send_message(message.chat.id,'Природная красота и свежий воздух создают приятную и расслабляющую атмосферу для гостей. В окружении зелени, цветов и открытого неба участники могут наслаждаться природными красотами и полноценно отдыхать от повседневной суеты.')
bot.send_photo(message.chat.id,'https://персонаж.рф/wp-content/uploads//2021/05/6844701e5116210b0a19b9e6798e8780-800x533.jpg')
sleep(2)
bot.send_message(message.chat.id,'Также стоит отметить, что проведение праздника на открытом воздухе способствует физической активности и здоровому образу жизни. Гости могут наслаждаться активными развлечениями, заниматься спортом и проводить время на свежем воздухе, что благоприятно сказывается на их физическом и психическом здоровье.')
sleep(2)
bot.send_message(message.chat.id,'Для организаторов таких мероприятий также существует ряд преимуществ. Открытая природа обычно предлагает большое пространство, что позволяет свободно разместить всех гостей и создать удобные условия для проведения праздника.')
sleep(2)
bot.send_message(message.chat.id,'Кроме того, праздники на открытом воздухе часто ассоциируются с экологической ответственностью и уважением к окружающей среде. Такие мероприятия могут проводиться с учетом принципов устойчивого развития и использования экологически чистых материалов.', reply_markup=markup)
bot.polling(none_stop=True, interval=0)```