это защита от Cross-Site Request Forgery https://cheatsheetseries.owasp.org/cheatsheets/Cro...
данный hash формируется на сессию. вот он и проверяется при клике, что клик сделан именно с сайта вк, а не подделан с другого сайта
с ботами давно не работал, но в свое время самый оптимальный способ был - представление работы бота как обычного веб-сайта.
условно в таблице юзеров создаешь колонку "location" и от этого отталкиваешься.
тобишь написал человек в первый раз - значит в location он на "главной". тобишь вписываешь "/"
заходит он на твои ставки - вписываешь "/bet"
т.е. если человек сейчас находится на "/bet" и он что-то написал - значит он сделал ставку. так и обрабатываешь.
логика, надеюсь, ясна.
Самый простой вариант - привязать поле к пользователю допустим с названием "path". И условно создать структуру как в веб-сайте. Т.е. у всех пользователей изначально path = /
К примеру написал он "Меню" - Ты его отправляешь на path /menu - и следующие сообщения уже обрабатываешь исходя из того места, где пользователь находится.
В твоем случае что то вроде:
Человек написал - ты его отправил на /password
Потом что бы человек не написал - ты его по этому пути обработаешь как ввод пароля. Ну и дальше также отправляешь юзера на нужный path