0
0 комментариев

Мне кажется, что не совсем правильно вызывать все функции из функции приема POST-запросов через огромное количество if-ов. Как это поправить?

from flask import Flask
from flask import request
from flask import jsonify
import json
import telebot
from telebot import types
bot = telebot.TeleBot('777')
URL = 'https://api.telegram.org/bot777/'
current_shown_dates={}
 
chat_id = 0
 
app = Flask(__name__)
 
def write_json (data, filename = 'answer0.json'): #созданение json для отладки
    with open (filename, 'w') as f:
        json.dump(data, f, indent=2, ensure_ascii=False)
 
@app.route('/', methods = ['POST','GET'])#ПРИЕМ СООБЩЕНИЙ И ВЫЗОВ ФУНКЦИЙ ПО СОВПАДЕНИЮ
def index():
    global chat_id #подключение глобальной переменной с chat id
    if request.method == 'POST':
        r = request.get_json()
 
        #объявление и обнуление переменных
        message = "" # сюда приходит текст (если он набран руками или как ключ)
        data = "" # сюда приходит callback_data
 
        # парсинг json в переменные
        if 'message' in r: # есии r содержит message то
            chat_id = r['message']['chat']['id']
            message = r['message']['text']
 
        if 'callback_query' in r: # есии r содержит callback_query то
            chat_id = r['callback_query']['message']['chat']['id']
            message = r['callback_query']['message']['text']
            data = r['callback_query']['data']
 
        # вызов фунуций
 
        if 'start' in message:# меню start
            start()
 
        if 'callwaiter' == data:# меню callwaiter
            callwaiter()
 
        if 'callwaiterwaiting' == data:  # меню callwaiterwaiting
            callwaiterwaiting()
 
        write_json(r) # сохранение json для отладки
 
        return jsonify(r)
    return '<h1>Bot welcome</h1>'
 
# Главное меню
def start():
    global chat_id #подключение глобальной переменной с chat id
    keyboard = types.InlineKeyboardMarkup()
    book = types.InlineKeyboardButton(text="Забронировать столик", callback_data="book")
    callwaiter = types.InlineKeyboardButton(text="Вызвать официанта"    , callback_data="callwaiter")
    keyboard.add(book)
    keyboard.add(callwaiter)
    bot.send_message(chat_id, "Вас приветствует ресторан", reply_markup=keyboard)
 
# меню вызова официанта
def callwaiter():
    global chat_id  # подключение глобальной переменной с chat id
    keyboardwaiter = types.InlineKeyboardMarkup()
    passwaiter = types.InlineKeyboardButton(text="Пароль введен", callback_data="callwaiterwaiting")
    keyboardwaiter.add(passwaiter)
    bot.send_message(chat_id, "пожалуйста введите пароль\n он написан на стене", reply_markup=keyboardwaiter)
 
# меню вызова официанта, ожидание
def callwaiterwaiting():
    global chat_id  # подключение глобальной переменной с chat id
    keyboardwaiter1 = types.InlineKeyboardMarkup()
    passwaiter = types.InlineKeyboardButton(text="он пришел", callback_data="pass11")
    keyboardwaiter1.add(passwaiter)
    bot.send_message(chat_id, "он идет", reply_markup=keyboardwaiter1)
 
if __name__ ==  '__main__':
    app.run()


Добавить комментарий