помогите прошу

alexa007x

Новичок
Пользователь
Июл 15, 2024
4
0
1
помогите пожалуйста. при нажатии на инлайн кнопку "Посмотреть время" показываетсообщение "Как дела?" а не "current_time"
:(

Python:
import telebot
import config
import random
import datetime

from telebot import types
from datetime import date

bot = telebot.TeleBot(config.TOKEN)

current_date = date.today()

current_date_time = datetime.datetime.now()
current_time = current_date_time.time()

@bot.message_handler(commands=['start'])
def welcome(message):
    sti = open('static/welcome.webp', 'rb')
    bot.send_sticker(message.chat.id, sti)

    # keyboard
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item3 = types.KeyboardButton("Посмотреть дату и время")
    item1 = types.KeyboardButton("Рандомное число")
    item2 = types.KeyboardButton("Как дела?")

    markup.add(item1, item2, item3)

    bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nЯ - {1.first_name}, создан чтобы быть тестовым ботом.".format(message.from_user, bot.get_me()),
        parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def lalala(message):
    if message.chat.type == 'private':
        if message.text == 'Рандомное число':
            bot.send_message(message.chat.id, str(random.randint(0,100)))
        elif message.text == 'Посмотреть дату и время':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("Посмтреть время", callback_data='timenow')

            markup.add(item1)

            bot.send_message(message.chat.id, str(current_date),  reply_markup=markup)
        elif message.text == 'Как дела?':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
            item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')

            markup.add(item1, item2)

            bot.send_message(message.chat.id, 'Отлично, сам как?', reply_markup=markup)
        else:
            bot.send_message(message.chat.id, 'Я не знаю что ответить')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'good':
                bot.send_message(call.message.chat.id, 'Вот и отличненько')
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Бывает')

            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Как дела?",
                reply_markup=None)

            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="Вы нажали на инлайн-кнопку")

    except Exception as e:
        print(repr(e))


@bot.callback_query_handler(func=lambda call: True)
def whattimenow(call):
    try:
        if call.message:
            if call.data == 'timenow':
                bot.send_message(call.message.chat.id, str(current_time))

            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call1.message.message_id, text="Посмотреть дату и время",
                reply_markup=None)

            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="Вы нажали на инлайн-кнопку")

    except Exception as e:
        print(repr(e))

#RUN
bot.polling(none_stop=True)
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
411
113
43
У тебя первый обработчик колбека callback_inline срабатывает на все обновления, а второй уже игнорируется, или используй фильтры колбеков или делай все проверки в callback_inline (if call.data == 'timenow' перенеси в callback_inline и не заморачивайся особо)
 

PYDEV

Пользователь
Пользователь
Авг 31, 2023
64
16
8
@alexa007x, попробуй такой вариант
Python:
import os
from datetime import date, datetime
from random import randint

from telebot import TeleBot
from telebot.types import Message, CallbackQuery
from telebot.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardButton, InlineKeyboardMarkup

bot = TeleBot(token=os.getenv("TESTS_TOKEN_API"), parse_mode="HTML")

current_date = date.today()
current_date_time = datetime.now()
current_time = current_date_time.time()

def get_markup(*buttons: str) -> ReplyKeyboardMarkup:
    kb = ReplyKeyboardMarkup(resize_keyboard=True)
    kb.row(*[KeyboardButton(button) for button in buttons])

    return kb

def get_inline_markup() -> InlineKeyboardMarkup:
    ikb = InlineKeyboardMarkup(row_width=2)
    ikb.add(InlineKeyboardButton(text="Посмтреть время", callback_data="time_now"))

    return ikb

@bot.message_handler(commands=["start"])
def cmd_start(message: Message) -> None:
    bot.send_message(chat_id=message.from_user.id,
                     text=f"Добро пожаловать, <code>{message.from_user.first_name}</code>!\n"
                          f"я - <b>{bot.get_my_name().name}</b>",
                     reply_markup=get_markup("Посмотреть дату и время",
                                             "Рандомное число",
                                             "Как дела?"))

@bot.message_handler(func=lambda message: message.text == "Посмотреть дату и время")
def get_date(message: Message) -> None:
    bot.send_message(chat_id=message.from_user.id,
                     text=f"{current_date}",
                     reply_markup=get_inline_markup())

@bot.message_handler(func=lambda message: message.text == "Рандомное число")
def random_number(message: Message) -> None:
    bot.send_message(chat_id=message.from_user.id,
                     text=f"Число - {randint(0, 100)}")

@bot.callback_query_handler(func=lambda callback: callback.data == "time_now")
def get_date_time(callback: CallbackQuery) -> None:
    bot.send_message(chat_id=callback.from_user.id,
                     text=f"{current_date_time}")

if __name__ == "__main__":
    try:
        bot.polling(none_stop=True)
        print("Bot started")
    except KeyboardInterrupt:
        print("Bot stopped")
Добавляй остальные обработчики самостоятельно, если такой вариант кода устраивает
 
Последнее редактирование:
  • Мне нравится
Реакции: 4olshoy_blen

Форум IT Специалистов