Как не создавать путанницы в состояниях тг бота
Проблема такая: есть тг магазин, который продаёт товары. Я не профи, поэтому с горем пополам реализованы состояния бота. В зависимости от состояния устанавливаются различные кнопки, и messageId присваивается соответсвующее значение. Всё работает хорошо с одним пользователем, но с двумя уже возникают проблемы - а именно путанница в состояниях и messageId. Пользователь 1 находится в состоянии С, а пользователь 2 в состоянии A, из-за чего бот начинает работать некорректно и с состояниями, и с messageId соответственно. Каким образом можно довести всё это дело до ума, чтоб работало и не было стыдно?)
@Override
public void onUpdateReceived(Update update) {
if (update.hasPreCheckoutQuery()) {
answerPreCheckout(update.getPreCheckoutQuery());
}
if (update.hasCallbackQuery()) {
if (state instanceof MainMenu) {
handleCallback(update.getCallbackQuery());
} else if (state instanceof ReturnProduct) {
handleCourses(update.getCallbackQuery());
}
else if (state instanceof Return_Invoice) {
handleInvoice(update.getCallbackQuery());
}
}
if(update.hasMessage()){
Message message = update.getMessage();
handleMessage(message);
}
}
state и messageId определены в основном классе бота
public class MySuperBot extends TelegramLongPollingBot {
private static final String TOKEN = "Token";
private static final String USERNAME = "UserName";
State state;
int messageid = 0;
Присваиваю им значения в методах каждого из состояний. Вот кусок одного из методов:
try {
Message sentoutmessage = execute(SendMessage.builder().text("Текст").chatId(message.getChatId()).replyMarkup(InlineKeyboardMarkup.builder()
.keyboard(menu.returnButtons().getKeyboard()).build()).build());
setMessageid(sentoutmessage.getMessageId());
} catch (TelegramApiException e) {
e.printStackTrace();
}
state = new MainMenu();
здесь я нажимаю "Главное меню" -> устанавливаются кнопки -> присваиваю messageId значение msgId этой клавиатуры -> потом state присваивается класс главного меню.
Далее нажимаю на какой-либо продукт. С помощью EdidMessage меняются кнопки на другие, messageId присваивается уже новое значение и state так же меняется. Дальше всё работает тем же макаром.