При любом событии (новое сообщение, нажатие на кнопку и пр.) бот проходит по всем хендлерам и смотрит какой хендлер удовлетворяет условиям. После того, как найден нужный - выполняет описанную в нем функцию.
А теперь смотрим:
1. Пользователь жмет кнопку
2. Побежали по нашим хендлерам. Видим первый с
@bot.callback_query_handler(func=lambda call: True)
что значит "при нажатии на ЛЮБУЮ inline кнопку"
3. Выполняем функцию которая в этом хендлере описана
4. Ожидаем новых событий.
В вашем случае на 3-м шаге выполнится функция
list (кстати очень неудачное название, это зарезервированное имя, его лучше не использовать, почитайте про это)
если уберете ее, выполнится
game_processing
Что делать?
вариант 1 - как подсказали в комментариях, делать однин хендлер и внутри описывать все сценарии
if call.data == 'users':
...
elif call.data == 'go_play':
....
elif call.data == 'go_play_next':
...
Вариант 2 (более правильный) - отфильтровывать call.data в хендлерах. Сейчас там лежит
func=lambda call: True
, т.е. функция, возвращающая ВСЕГДА True. нужно как-то ее видоизменить, чтобы возвращалось True только при необходимых значениях call.data. Например
func=lambda call: call.data=="foo"
отработает только тогда, когда в call.data будет значение "foo".
Дальше сами