W
W
wtfcklol2019-12-15 14:50:25
Python
wtfcklol, 2019-12-15 14:50:25

How to set up a button handler in a telegram bot?

In general, how to insert a profile after all the actions in the callback_worker? So that this function is executed the latest, or how to go from callback_worker to another function, because register_next_step_handler does not work.

The code

import telebot
from telebot import types
bot = telebot.TeleBot('тут токен')

def anketa(message):
    bot.send_message(message.from_user.id, "Как тебя зовут?")
    bot.register_next_step_handler(message, get_name)
    def get_name(message): #получаем фамилию
        global name;
        name = message.text;
        bot.send_message(message.from_user.id, 'Какая у тебя фамилия?');
        bot.register_next_step_handler(message, get_surnme);

    def get_surname(message):
        global surname;
        surname = message.text;
        bot.send_message('Сколько тебе лет?');
        bot.register_next_step_handler(message, get_age);

    def get_age(message):
        global age;
        while age == 0: #проверяем что возраст изменился
            try:
                 age = int(message.text) #проверяем, что возраст введен корректно
            except Exception:
                 bot.send_message(message.from_user.id, 'Цифрами, пожалуйста');
          bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?')



def ku(call):
    typework = types.InlineKeyboardMarkup()
    msg = 'Выберите тип услуги: \n'
    global poddone
    global podd
    global genwork
    global afterwork
    global afterwork20
    global vipwork
    podd = types.InlineKeyboardButton(text = 'Поддерживающая уборка (Постоянный клиент) - ' + pricepodd, callback_data = 'poddpost')
    global msgepodd
    msgepodd = podd.text
    typework.add(podd)
    poddone = types.InlineKeyboardButton(text = 'Поддерживающая уборка (разовый заказ) - ' + pricepoddone, callback_data = 'poddone')
    typework.add(poddone)
    global msgepoddone
    msgepoddone = poddone.text
    genwork = types.InlineKeyboardButton(text = 'Генеральнная уборка - ' + pricegen, callback_data = 'genwork')
    typework.add(genwork)
    global genworktext
    genworktext = genwork.text
    afterwork20 = types.InlineKeyboardButton(text = 'Уборка после ремонта (Без мебели — скидка 20%)', callback_data = 'afterwork20')
    typework.add(afterwork20)
    global afterwork20text
    afterwork20text = afterwork20.text
    afterwork = types.InlineKeyboardButton(text = 'Уборка после ремонта с мебелью - ' +priceafter, callback_data = 'afterdefault')
    typework.add(afterwork)
    global afterworktext
    afterworktext = afterwork.text
    vipwork = types.InlineKeyboardButton(text = 'VIP уборка - ' +pricevip, callback_data = 'vip')
    typework.add(vipwork)
    global vipworktxt
    vipworktxt = vipwork.text
    bot.send_message(call.message.chat.id, msg, reply_markup = typework )

def end(call):
    if call.data == 'poddpost':
        msg = 'Вы выбрали: ' + podd.text + '\n'
        
        

@bot.message_handler(content_types=["text"])

def welcome(message):

    button = types.InlineKeyboardMarkup() #объявление кнопок
    #Уборка квартир
    kvartirb = types.InlineKeyboardButton(text='Уборка квартир', callback_data='kvartir')
    button.add(kvartirb) # add button to keyboard
    #Уборка коттеджей
    kottedj = types.InlineKeyboardButton(text = 'Уборка коттеджей', callback_data = 'kottedj')
    button.add(kottedj) # add button to keyboard
    #Уборка офисов и других помещений
    other = types.InlineKeyboardButton(text = 'Уборка офисов и других помещений', callback_data = 'other')
    button.add(other) # add button to keyboard
    ###
    welcometext = 'Здравствуйте, вас приветствует клининговая компания "ПрофКлинингСервис".\n'
    welcometext += 'Выберите интересующий вас раздел.\n'
    msg = bot.send_message(message.chat.id, welcometext, reply_markup=button)



    bot.register_next_step_handler(msg, callback_worker)


@bot.callback_query_handler(func=lambda call: True)




def callback_worker(call):
    ploshad = 'Выберите соответствующую площадь квартиры: \n'
    ploshadb = types.InlineKeyboardMarkup()
    global pricepodd
    global pricepoddone
    global pricegen
    global priceafter20
    global priceafter
    global pricevip
    pricepodd = ''
    pricepoddone = ''
    pricegen = ''
    priceafter = ''
    priceafter20 = ''
    pricevip = ''	
    if call.data == 'kvartir':

        #до 40 кв.м
        m40 = types.InlineKeyboardButton(text = 'До 40 кв.м', callback_data = 'metr40k')
        ploshadb.add(m40)
        #до 50 кв.м
        m50 = types.InlineKeyboardButton(text = 'До 50 кв.м', callback_data = 'metr50k')
        ploshadb.add(m50)
        #до 60 кв.м
        m60 = types.InlineKeyboardButton(text = 'До 60 кв.м', callback_data = 'metr60k')
        ploshadb.add(m60)
        #до 70кв.м
        m70 = types.InlineKeyboardButton(text = 'До 70 кв.м', callback_data = 'metr70k')
        ploshadb.add(m70)
        #до 80 кв.м
        m80 = types.InlineKeyboardButton(text = 'До 80 кв.м', callback_data = 'metr80k')
        ploshadb.add(m80)
        #до 90кв.м
        m90 = types.InlineKeyboardButton(text = 'До 90 кв.м', callback_data = 'metr90k')
        ploshadb.add(m90)
        #до 100 кв.м
        m100 = types.InlineKeyboardButton(text = 'До 100 кв.м', callback_data = 'metr100k')
        ploshadb.add(m100)
        #далее
        other = types.InlineKeyboardButton(text = 'От 100 кв.м', callback_data = 'otherk')
        ploshadb.add(other)
        bot.send_message(call.message.chat.id, ploshad, reply_markup = ploshadb)
       


    if call.data == 'metr40k':
        pricepodd = '1 600 рублей'
        pricepoddone = '2 300 рублей'
        pricegen = '5 500 рублей'
        priceafter20 = ''
        priceafter = '6 500 рублей'
        pricevip = '12 000 рублей'
        ku(call)
    elif call.data == 'metr50k':
        choises = True
        pricepodd = '1 800 рублей'
        pricepoddone = '2 500 рублей'
        pricegen = '5 500 рублей'
        priceafter20 = ''
        priceafter = '6 500 рублей'
        pricevip = '12 000 рублей'
        ku(call)
    if call.data == 'metr60k':
        pricepodd = '1 800 рублей'
        pricepoddone = '2 500 рублей'
        pricegen = '7 000 рублей'
        priceafter20 = '6 800 рублей'
        priceafter = '8 500 рублей'
        pricevip = '17 500 рублей'
        ku(call)
    elif call.data == 'metr70k':
        pricepodd = '1 900 рублей'
        pricepoddone = '2 500 рублей'
        pricegen = '8 000 рублей'
        priceafter20 = '7 200 рублей'
        priceafter = '9 000 рублей'
        pricevip = '20 500 рублей'
        ku(call)
    if call.data == 'metr80k':
        pricepodd = '2 300 рублей'
        pricepoddone = '2 600 рублей'
        pricegen = '9 000 рублей'
        priceafter20 = '7 600'
        priceafter = '9 500 рублей'
        pricevip = '23 500 рублей'
        ku(call)
    elif call.data == 'metr90k':
        pricepodd = '2 500 рублей'
        pricepoddone = '3 000 рублей'
        pricegen = '10 000 рублей'
        priceafter20 = '8 400 рублей'
        priceafter = '10 500 рублей'
        pricevip = '26 500 рублей'
        ku(call)
    if call.data == 'metr100k':
        pricepodd = '2 500 рублей'
        pricepoddone = '3 000 рублей'
        pricegen = '11 000 рублей'
        priceafter20 = '8 800 рублей'
        priceafter = '11 000 рублей'
        pricevip = '29 000 рублей'
        ku(call)
    elif call.data == 'otherk':
        pricepodd = '24 р/кв.м'
        pricepoddone = '30р/кв.м'
        pricegen = '110р/кв.м'
        priceafter20 = '88р/кв.м'
        priceafter = '110р/кв.м'
        pricevip = '290р/кв.м'
        ku(call)
























bot.polling( none_stop = True)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander Bondarenko, 2019-12-15
@bond_1013

markup = types.ReplyKeyboardMarkup()
    markup.row('/comm', '/comm2')
    markup.row('/comm1','/comm3')
    bot.send_message(message.chat.id, "Ваш выбор:", reply_markup=markup)

When you click on the button, the function will be executed under
or if you need in the function, then go to the next function
answ=bot.send_message(message.chat.id, "Ваш вопрос")
 bot.register_next_step_handler(answ,name_your_next_func)

and by the way, why do you use global variables, if you constantly need to store variables for a separate chat, then you need a database

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question