как увести все кнопки в 1 сообщение
Пишу бота и возник вопрос как сделать так чтобы по нажатию любой из кнопок меня перекидывало в одно сообщение чтобы не расписывать его так. Если кто знает как изменить цвет этим кнопкам?
def callback_inline(call):
try:
if call.message:
if call.data == 'CV':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Development (Frontend, backend, full-stack, mobile, web, gamedev)',callback_data='Development')
item2 = types.InlineKeyboardButton('Testing ',callback_data='Testing')
item3 = types.InlineKeyboardButton('DevOps/Admin',callback_data='DevOps')
item4 = types.InlineKeyboardButton('Data Science ',callback_data='Data Science')
item5 = types.InlineKeyboardButton('TOP Management (CTO, CIO, Director) ',callback_data='TOP')
item6 = types.InlineKeyboardButton('Support, Helpdesk',callback_data='Support')
item7 = types.InlineKeyboardButton('PR, marketing, advertising',callback_data='PR')
item8 = types.InlineKeyboardButton('Project/Product manager,HR',callback_data='Project')
item9 = types.InlineKeyboardButton('Design',callback_data='Design')
markup.add(item1)
markup.add(item2,item3,item4)
markup.add(item5)
markup.add(item6,item7,item9)
markup.add(item8,item8)
bot.send_message(call.message.chat.id, "CV - Choose a specialization :", reply_markup=markup)
elif call.data == 'Vacancy':
markup = types.InlineKeyboardMarkup(row_width=1)
item1 = types.InlineKeyboardButton('less then $1000', callback_data='less')
markup.add(item1)
bot.send_message(call.message.chat.id, "Your budget($):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="What would you like to create")
except Exception as e:
print(repr(e))
@bot.callback_query_handler(func=lambda call: call.data in ['Development','Testing','DevOps','Data Science','TOP','Support','PR','Project','Design'])
def callback(call):
try:
if call.message:
if call.data == 'Development':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'Testing':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'DevOps':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'Data Science':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'TOP':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'Support':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'PR':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'Project':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
if call.data == 'Design':
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior',callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle',callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior',callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead',callback_data='Teamlead')
markup.add(item1,item2)
markup.add(item3,item4)
bot.send_message(call.message.chat.id, "Role (Level):", reply_markup=markup)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="CV - Choose a specialization")
except Exception as e:
print(repr(e))
Ответы (1 шт):
Автор решения: MyZik
→ Ссылка
Основная проблема в том, что у Вас много ненужного и повторяющегося кода, который лучше вывести в отдельные функции, например.
Вы можете передать в функцию edit_text клавиатуру, и Вам не нужно по новой её отправлять.
Вот, оптимизировал Ваш код и все изменения будут по нажатию на кнопку будут происходить в одном сообщении, вместо отправки каждый раз нового.
От себя советую посмотреть и понять, что изменено, чтобы в следующий раз сэкономить лишние строки.
def get_positions_keyboard() -> types.InlineKeyboardMarkup:
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton(
'Development (Frontend, backend, full-stack, mobile, web, gamedev)',
callback_data='Development')
item2 = types.InlineKeyboardButton('Testing ', callback_data='Position:Testing')
item3 = types.InlineKeyboardButton('DevOps/Admin', callback_data='Position:DevOps')
item4 = types.InlineKeyboardButton('Data Science ', callback_data='Position:Data Science')
item5 = types.InlineKeyboardButton('TOP Management (CTO, CIO, Director) ',
callback_data='Position:TOP')
item6 = types.InlineKeyboardButton('Support, Helpdesk', callback_data='Position:Support')
item7 = types.InlineKeyboardButton('PR, marketing, advertising',
callback_data='Position:PR')
item8 = types.InlineKeyboardButton('Project/Product manager,HR',
callback_data='Position:Project')
item9 = types.InlineKeyboardButton('Design', callback_data='Position:Design')
return markup.add(item1, item2, item3, item4, item5, item5, item6, item7, item8, item9)
def get_vacancies_keyboard() -> types.InlineKeyboardMarkup:
markup = types.InlineKeyboardMarkup(row_width=1)
return markup.add(types.InlineKeyboardButton('less then $1000', callback_data='less'))
def get_levels_keyboard() -> types.InlineKeyboardMarkup:
markup = types.InlineKeyboardMarkup(row_width=4)
item1 = types.InlineKeyboardButton('Junior', callback_data='Junior')
item2 = types.InlineKeyboardButton('Middle', callback_data='Middle')
item3 = types.InlineKeyboardButton('Senior', callback_data='Senior')
item4 = types.InlineKeyboardButton('Teamlead', callback_data='Teamlead')
return markup.add(item1, item2, item3, item4)
@bot.callback_query_handler(func=lambda call: call.data == 'CV')
def cv_handler(call: types.CallbackQuery):
keyboard = get_positions_keyboard()
bot.send_message(call.message.chat.id, "CV - Choose a specialization :", reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: call.data == 'Vacancy')
def vacancy_handler(call: types.CallbackQuery):
keyboard = get_vacancies_keyboard()
text = "What would you like to create\n" \
"Your budget($):"
bot.edit_message_text(chat_id=call.message.chat.id,
message_id=call.message.message_id,
text="What would you like to create")
@bot.callback_query_handler(func=lambda call: call.data.startswith('Position:'))
def position_handler(call: types.CallbackQuery):
position_data = call.data.split(':')[0] # Development, Testing, DevOps, etc.
text = "CV - Choose a specialization\n" \
"Role (Level):"
keyboard = get_levels_keyboard()
bot.edit_message_text(chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=text)