@Studentka1996

Почему программа не определяет call_1?

Здравствуйте. Прошу помощи, потому что "хожу по кругу "
Есть инлайн кнопочки:
#создаём инлайн меню выбора метода доставки
adress_dostavki = telebot.types.InlineKeyboardMarkup()  
adress_list = [('ул. Студенческая, д.33, кор.8'),
    ('ул. Дербенёвская, д.67, стр. 11'),
    ('ул. Чершская, д.122, стр.5'),
    ('ул. Красные холмы, д.88, кор. 12')
     ]
for row in adress_list:
     adress_dostavki.add( 
        telebot.types.InlineKeyboardButton(
             f'{row}', callback_data = f'АдресAdd_{row}')
             ) 
#Создаём инлайн меню
time = telebot.types.InlineKeyboardMarkup()
time_list = [
    ('10:15'), ('12:00'), ('13:15') ]
for items in time_list:
     time.add( 
        telebot.types.InlineKeyboardButton(
             f'{items}', callback_data = f'ВремяAdd_{items}')
             )


Как правильно записать значения в кортеж?
Почему программа не определяет call_1? Про чтение сверху вниз не стоит напоминать)))
#Добавление инфы о доставке в таблицу Доставка
    insert_query_Dostavka = '''INSERT OR IGNORE INTO Доставка(Адрес_доставки,
            Дата_доставки) VALUES (?, ?)''' 
    
    call_1 = text.split('АдресAdd_')[-1] 
    call_2 = text.split('ВремяAdd_')[-1] 
    if 'АдресAdd' in text:
        bot.send_message(message.chat.id, 'Доставка на сегодня. Выберите время:', reply_markup=interface.time)
    if 'ВремяAdd' in text:
            tuple_Dostavka = tuple([call_1 + call_2])
            cur.execute(insert_query_Dostavka, tuple_Dostavka)
            con.commit()                       
            print(tuple_Dostavka) #результат [время, время]


Нужно записать значения в таком варианте: [адрес, время]. Вопрос аналогичен с предыдущим..
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Taus
Во втором куске кода call_1 и call_2 никогда не будут определены вместе, потому что будет обработано нажатие только на одну кнопку. Вам нужно сохранять эти данные "куда-то", например в глобальный объект:
class Order:
    def __init__(self, address):
        self.address = address
        self.date = None
        
orders = {}
...
@bot.callback_query_handler(lambda query: 'АдресAdd_' in query.data or 'ВремяAdd_' in query.data)
def process_callback(query):
    chat_id = query.message.chat.id
    if 'АдресAdd' in query.data:
        address = query.data.lstrip('АдресAdd_')
        orders[chat_id] = Order(address)
        bot.send_message(chat_id, 'Доставка на сегодня. Выберите время:', reply_markup=interface.time)
    elif 'ВремяAdd' in query.data:
        date = query.data.lstrip('ВремяAdd_')
        order = orders[chat_id]
        order.date = date               
        print((order.address, order.date))

P.S.: в callback_data можно использовать строки длиной 1-64 байта.
P.S.S.: tuple([call_1 + call_2]) создаст объект tuple с одним элементом, который равен строке с адресом и временем.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
KRIT Санкт-Петербург
от 160 000 ₽
YLab Москва
от 180 000 ₽
Большая Тройка Москва
от 120 000 до 200 000 ₽
08 апр. 2020, в 10:58
10000 руб./за проект
08 апр. 2020, в 10:23
8000 руб./за проект
08 апр. 2020, в 08:47
1000 руб./за проект