TELEBOT | Как сделать чтобы определенный @bot.callback_query_handler вызывался/отвечал только на определенную команду
Проблема: У меня в коде есть две разные команды которые отвечают за две разные вещи, а так же есть два @bot.callback_query_handler. И изначально первая команда которая была сделана первой вместе с своим @bot.callback_query_handler работают так как должны работать. Но я сделал новую команду которая плюс минус похожа по действиям с первой но это другое. Так вот, когда я вызываю вторую команду она не обращается к второму @bot.callback_query_handler, а к первому из-за чего выходит вообще не то что должно выходить. Я хочу спросить, есть ли возможность сделать так чтобы обозначить этому хэндлеру за какую команду отвечать и как это сделать???
Как происходит проблема:
Я вызываю команду /lang отправляется сообщение с кнопками как и должно быть, но после нажатия любой кнопки бот не обращается к cursor.execute("UPDATE users SET lang=? WHERE user_id=?", (lang, user_id)), а уходит к cur.execute( "INSERT INTO users (user_id, nick, tag, lang) VALUES (?, ?, ?, ?)", (callback.from_user.id, nick, tag, selected_lang))
Вот код который отвечает за то что я хочу сделать, а именно вторая команда:
@bot.message_handler(commands=['lang'])
def set_lang(message):
markup = types.InlineKeyboardMarkup()
markup.row(types.InlineKeyboardButton("??RUss", callback_data="RUS"),
types.InlineKeyboardButton("??ENng", callback_data="ENG"))
# Отправляем сообщение об успешном сохранении тега
bot.send_message(
message.chat.id, f"Lang/Язык", reply_markup=markup
)
@bot.callback_query_handler(func=lambda callback: True)
def change_lang(callback):
chat_id = callback.message.chat.id
lang = callback.data
user_id = callback.from_user.id
try:
conn, cursor = create_connection()
cursor.execute("UPDATE users SET lang=? WHERE user_id=?", (lang, user_id))
conn.commit()
if lang == "RUS":
bot.send_message(chat_id,
f"Вы успешно изменили свой язык на: <code>#{lang} </code> \nТеперь можете "
f"использовать команду /profile", parse_mode='HTML'
)
else:
bot.send_message(chat_id,
f"U change the language: <code>#{lang} </code> \nNow can use the command /profile",
parse_mode='HTML'
)
except Exception as e:
print(f"Произошла ошибка: {e}")
bot.send_message(chat_id, f"Произошла ошибка: {e}")
А тут первый хэндлер из-за который вызывает мне эту проблему:
def user_tag(message):
global tag
bot.delete_message(message.chat.id, message.message_id)
bot.delete_message(message.chat.id, message.message_id - 1)
# Удаление символа "#" из начала текста, если он присутствует
tag = message.text.strip().lstrip('#')
# Создание клавиатуры с кнопками "RU" и "EN"
markup = types.InlineKeyboardMarkup()
markup.row(types.InlineKeyboardButton("??RU", callback_data="RU"),
types.InlineKeyboardButton("??EN", callback_data="EN"))
bot.send_message(message.chat.id,
f'<b>Ник/Nickname</b>: <code>{nick}</code> \n<b>Тег/Tag</b>: <code>#{tag}</code> '
f'\nВыбери язык-Select language',
parse_mode='HTML', reply_markup=markup)
bot.register_next_step_handler(message, user_lang)
@bot.callback_query_handler(func=lambda callback: True)
def callback_message(callback):
bot.delete_message(callback.message.chat.id, callback.message.message_id)
chat_id = callback.message.chat.id
message_id = callback.message.message_id
selected_lang = callback.data
try:
# Вставка данных в базу данных
conn = sqlite3.connect('profile_info.db')
cur = conn.cursor()
cur.execute(
"INSERT INTO users (user_id, nick, tag, lang) VALUES (?, ?, ?, ?)",
(callback.from_user.id, nick, tag, selected_lang))
conn.commit()
cur.close()
conn.close()
# Отправка сообщения с профилем
if selected_lang == "RU":
bot.send_message(chat_id,
f"<b><u>Ваш профиль</u></b>\n<b>Ник</b>: <code>{nick}</code> \n<b>Тег</b>: <code>#{tag}</code>",
parse_mode="HTML")
else:
bot.send_message(chat_id,
f"<b><u>Your profile</u></b>\n<b>Nickname</b>: <code>{nick}</code> \n<b>Tag</b>: <code>#{tag}</code>",
parse_mode="HTML")
except Exception as e:
# Обработка ошибок
bot.send_message(chat_id, f"Произошла ошибка: {e}")
print(f"Произошла ошибка: {e}")
# Не нужно отправлять дополнительное сообщение о выбранном языке