Ломаются кнопки Телеграмм бота
Создала Телеграмм бота на день рождения подруге. Всего две функции - отправить рандомный праздник или фотку. Сам бот функции выполняет, но при запуске несколько раз бот ломается и кнопки отображаются некорректно, а именно добавляются новые (те же самые, просто их несколько одинаковых). Как пофиксить данное недоразумение?
import telebot
from telebot import types
import random
from glob import glob
bot = telebot.TeleBot("token")
menu = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
holidays = types.KeyboardButton("Какой сегодня праздник")
photo = types.KeyboardButton("Фоточка")
holiday_markup = types.InlineKeyboardMarkup()
gen_holiday = types.InlineKeyboardButton("Ну-ка посмотрим...", callback_data="generate")
#старт с кнопками под клавиатурой
@bot.message_handler(commands=["start"])
def start(message):
menu.row(holidays, photo)
file_menu = open("C:/Users/user/Documents/MyPythonProjects/birthday/menu.jpg", "rb")
bot.send_photo(message.chat.id, file_menu, caption="? Дорогая Милашка! \nПоздравляю тебя с днём рождения! Вот тебе и наступило 18 годков мда ужжж\n\n?Этот мини ботик создан специально для тебя \n\nВыбери, что тебе хочется посмотреть: ", reply_markup=menu)
bot.register_next_step_handler(message, on_click)
#обработка кнопок под клавиатурой
def on_click(message):
if message.text == "Какой сегодня праздник":
holiday_markup.add(gen_holiday)
file_holidays = open("C:/Users/user/Documents/MyPythonProjects/birthday/holidays.jpg", "rb")
bot.send_photo(
message.chat.id,
file_holidays,
caption="Здесь я собрала все самые подходящие под тебя праздники ?",
reply_markup=holiday_markup,
)
elif message.text == "Фоточка":
pic_list = glob('C:/Users/user/Documents/MyPythonProjects/birthday/photos/*.jpg')
get_random_pic = random.choice(pic_list)
with open(get_random_pic, 'rb') as picture:
bot.send_photo(message.chat.id, picture)
#вывод праздников
@bot.callback_query_handler(func=lambda callback: True)
def callback_generate(callback):
if callback.data == "generate":
holiday_list = [
"☕️ Международный день кофе - однако ты заводишь лучше всякого кофеина)))",
"? День денег - да чтоб ты в них купалась, поняла!?",
"? День бла-бла-бла - мне не нужен особый день, чтобы слушать твоё бла-бла-бла часами, не уставая",
"? День советской пожарной охраны, работников службы пожарной безопасности, противопожарной службы (в разных странах по-разному) - после тебя и правда нужно вызывать бригаду пожарных...",
'?? День "Бесподобных дам" - всё про тебя!!!',
"? Память мучениц Фервуфы девы, сестры и рабыни её - я как рабыня замучалась с тобой уже",
]
bot.send_message(callback.message.chat.id, random.choice(holiday_list))
bot.infinity_polling()
Ответы (1 шт):
Автор решения: iivan ych
→ Ссылка
Нашел решение: добавляйте types.ReplyKeyboardMarkup
внутри функции каждый раз, когда вы хотите создать меню.