потому-что у тебя 2 равносильных обработчика.
@bot.callback_query_handler(func=lambda call: True)
def сallbacktomsk(call):
все на себя перехватывает, все остальные уже не сработают никак.
Порядок обработчиков всегда от более "конкретным" до менее.
С начала обработчики команд (/command)
Потом обработчики, например, картинок.
Потом обработчик всех сообщений, например, чтобы сказать что бот не понял пользователя (т.к. это сработает только если все выше не сработало.)
Потом уже инлайн обработчики, тоже уменьшая поле "зрения". Желательно вообще один.
@bot.callback_query_handler(func=lambda c: True)
def callback(c):
if c.data.startswith('city'):
match c.data.split('city',1)[-1]:
case 'tomsk': ...
и не надо прописывать для каждого города по варианту. Используй БД.