Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import telebot
- from telebot import types
- import mysql.connector
- from flask import Flask, request
- import config
- token = config.TOKEN
- secret = '<SECRET_KEY>'
- url = '<URL>' + secret
- bot = telebot.TeleBot(token, threaded=False)
- bot.remove_webhook()
- bot.set_webhook(url=url)
- app = Flask(__name__)
- db = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd=config.password,
- database=config.database,
- port="3306"
- )
- cursor = db.cursor()
- class User:
- def __init__(self, first_name):
- self.first_name = first_name
- self.last_name = ''
- user_data = {}
- # Buttons
- registration_main = types.InlineKeyboardButton(text='Регистрация', callback_data="Registration")
- search_main = types.InlineKeyboardButton(text='Поиск информации', callback_data="Search")
- mainMenu = types.InlineKeyboardButton(text='Вернуться в главное меню', callback_data="mainmenu")
- @bot.message_handler(commands=["start"])
- def main(message):
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
- but_main = types.KeyboardButton('/Main_Menu')
- markup.add(but_main)
- bot.send_message(message.chat.id, "Welcome text",
- reply_markup=markup)
- @app.route('/' + secret, methods=['POST'])
- def webhook():
- update = telebot.types.Update.de_json(request.stream.read().decode('utf-8'))
- bot.process_new_updates([update])
- return '!', 200
- @bot.message_handler(commands=["Main_Menu"])
- def inline(message):
- key = types.InlineKeyboardMarkup()
- but_reg = registration_main
- but_search = search_main
- key.add(but_reg)
- key.add(but_search)
- bot.send_message(message.chat.id, "Зарегистрируйтесь или начните поиск необходимой информации:",
- reply_markup=key)
- @bot.message_handler(content_types=["text"])
- def registration_firstname(message):
- try:
- user_id = message.from_user.id
- user_data[user_id] = User(message.text)
- msg = bot.send_message(message.chat.id, "Введите фамилию")
- bot.register_next_step_handler(msg, registration_lastname)
- except Exception as e:
- bot.reply_to(message, 'Error')
- def registration_lastname(message):
- try:
- user_id = message.from_user.id
- user = user_data[user_id]
- user.last_name = message.text
- sql = "INSERT INTO users (first_name, last_name, user_id) \
- VALUES (%s, %s, %s)"
- val = (user.first_name, user.last_name, user_id)
- cursor.execute(sql, val)
- db.commit()
- bot.send_message(message.chat.id, "Success!")
- except Exception as e:
- bot.reply_to(message, 'Error')
- ########################################################################################################
- ####### How to change this function to make it working with User input and getting information from database?
- ####### If User inputs something like name, so we get name, lastname and phone number (if we have those datas in the table) of this
- ####### member in telegram bot...
- # Вот здесь не знаю как правильно написать функцию для поиска
- # информации из базы данных (в моем случае это MySQL),
- # пользователь тг бота вводит имя или фамилию для поиска контакта и
- # и в тг из базы данных отправляется: имя, фамилия и номер телефона.
- ########################################################################################################
- # Этот вариант выдает ошибку
- # def search_info(message):
- # text = message.from_user.id
- # user = user_data[text]
- # user.search_info = message.text.lower()
- # if text == text:
- # sql = "SELECT * FROM guides WHERE first_name = %s"
- # val = (user.search_info, )
- # cursor.execute(sql, val)
- # for result in cursor.fetchall():
- # bot.send_message(message.chat.id, result)
- ########################################################################################################
- ????????????????????????????????????????????????????????????????????????????????????????????????????????
- def search_guides(message):
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
- but_main = types.KeyboardButton('/Main_Menu')
- markup.add(but_main)
- if message.text == 'Выбрать другую категорию поиска':
- key = types.InlineKeyboardMarkup()
- but_guides = types.InlineKeyboardButton(text="Гиды", callback_data="guides")
- but_drivers = types.InlineKeyboardButton(text="Водители", callback_data="drivers")
- but_agents = types.InlineKeyboardButton(text="Туроператоры", callback_data="agents")
- but_hotels = types.InlineKeyboardButton(text="Гостиницы", callback_data="hotels")
- but_restaurants = types.InlineKeyboardButton(text="Рестораны", callback_data="restaurants")
- but_main_menu = types.InlineKeyboardButton(text="Главное меню", callback_data="mainmenu")
- key.add(but_guides)
- key.add(but_drivers)
- key.add(but_agents)
- key.add(but_hotels)
- key.add(but_restaurants)
- key.add(but_main_menu)
- bot.send_message(message.chat.id, "Выберите категорию для поиска:",
- reply_markup=key)
- if message.text == 'Продолжить поиск гида':
- msg = bot.send_message(message.chat.id, "Введите имя, фамилию или язык гида: ",
- reply_markup=markup)
- bot.register_next_step_handler(msg, search_info)
- if not message.text == 'Продолжить поиск гида' or 'Выбрать другую категорию поиска':
- msg = bot.send_message(message.chat.id, "Ошибка!!! Нажмите Main_Menu для продолжения работы с ботом!",
- reply_markup=markup)
- bot.register_next_step_handler(msg, inline)
- def search_info(message):
- markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
- but_main = types.KeyboardButton('Выбрать другую категорию поиска')
- but_continue = types.KeyboardButton('Продолжить поиск гида')
- markup.add(but_main)
- markup.add(but_continue)
- # if message.text == '/Main_Menu':
- # msg = bot.send_message(message.chat.id, text="Возврат в гланое меню", reply_markup=markup)
- # bot.register_next_step_handler(msg, inline)
- try:
- text = message.from_user.id
- if text == text:
- sql = "SELECT * FROM guides WHERE first_name = %s"
- val = (message.text,)
- cursor.execute(sql, val)
- for result in cursor.fetchall():
- print(result)
- bot.send_message(message.chat.id,
- text='Результат поиска: \nИмя: ' + result[1] + '\nФамилия: ' + result[2] +
- '\nНомер телефона: ' + str(
- result[3]))
- except Exception as e:
- msg = bot.reply_to(message, 'Что-то пошло не так!')
- bot.register_next_step_handler(msg, inline)
- msg = bot.send_message(message.chat.id, "Вы можете продолжить поиск гидов или нажмите Main Menu для "
- "поиска другой информации",
- reply_markup=markup)
- bot.register_next_step_handler(msg, search_guides)
- # if message.text == '/Main_Menu':
- # msg = bot.send_message(message.chat.id, text="Возврат в главное меню", reply_markup=markup)
- # bot.register_next_step_handler(msg, inline)
- ########################################################################################################
- @bot.callback_query_handler(func=lambda call: True)
- def callback_inline(call):
- if call.data == "mainmenu":
- keymain = types.InlineKeyboardMarkup()
- but_reg = registration_main
- but_search = search_main
- keymain.add(but_reg)
- keymain.add(but_search)
- bot.send_message(chat_id=call.message.chat.id, text="Главное меню",
- reply_markup=keymain)
- if call.data == "Registration":
- keyreg = types.InlineKeyboardMarkup()
- but_main_menu = mainMenu # главное меню
- keyreg.add(but_main_menu)
- msg = bot.send_message(chat_id=call.message.chat.id, text="Введите Ваше имя: ",
- reply_markup=keyreg)
- bot.register_next_step_handler(msg, registration_firstname)
- ########################################################################################################
- if call.data == "Search":
- key = types.InlineKeyboardMarkup()
- but_1 = types.InlineKeyboardButton(text="Button1")
- but_2 = types.InlineKeyboardButton(text="Button2")
- but_main_menu = mainMenu
- key.add(but_1)
- key.add(but_2)
- key.add(but_main_menu)
- msg = bot.send_message(chat_id=call.message.chat.id, text="Введите имя или фамилию для поиска контакта:",
- reply_markup=key)
- ####### From this point User can input something (Like firstname or lastname) to get information from database (in my case it's MySQL), ####### by going to the next step, and I don't know how to make it working, is there any solution?
- ####### Здесь пользователь начинает вводить данные и переходит к следующей функции
- bot.register_next_step_handler(msg, search_info)
- ########################################################################################################
- # Enable saving next step handlers to file "./.handlers-saves/step.save".
- # Delay=2 means that after any change in next step handlers (e.g. calling register_next_step_handler())
- # saving will hapen after delay 2 seconds.
- bot.enable_save_next_step_handlers(delay=2)
- # Load next_step_handlers from save file (default "./.handlers-saves/step.save")
- # WARNING It will work only if enable_save_next_step_handlers was called!
- bot.load_next_step_handlers()
- if __name__ == '__main__':
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement