Мой бот авторизуется на стороннем ресурсе. Для этого бот спрашивает пользователя несколько вопросов(местоположение), эти данные нужны для последующих запросов к сайту. После каждого запроса(if) я его блокирую, ставя "flag=false". И из-за этого возникает проблема, другой пользователь бота не сможет авторизоваться. Flag убрать я не могу, так как получится так, что он не будет переходить к следующему вопросу, а отвечать на прошлый. (Надеюсь, понятно объяснил). В связи с этим решил использовать потоки(имплементировал Runnable, добавил код в run()), но ничего не вышло=/. Не знаю куда правильно поместить вызов метода run().
Старый код
`@Override
public void onUpdateReceived(Update update) {
message = update.getMessage(); // сообщение от пользователя
idUser = message.getChatId().intValue(); // Идентификатор пользователя
if(message != null && message.hasText()){
userResponse = new UserResponse(idUser);
if(message.getText().equals("/start")){
insertNewUser();
sendMsg(message, "Выберите **"); //сообщение пользователю
}
userResponse.setResult(message.getText()); // записываю сообщение пользователя в result
if (message.getText().equals(userResponse.getEquals())) {
String mes = userResponse.getResultNumber(); // записываю ответ пользователя в переменную mes
System.out.println("pid=" + mes);
try{
statement.execute("UPDATE user SET pid = '"+ mes +"' WHERE id = '"+ idUser+"'");
}
catch (SQLException ignored){
}
userResponse.areaSelection();
sendMsg(message, "Выберите ***"); //отправляю сообщение пользователю
answer = userResponse.getJParseGetAuthorization(); // можно просто сразу передать АРРРЭЫЙ ЛИСТ БЛЕАТЬ!!!!
flagTwo=true;
}
if(message.getText().equals(userResponse.getEquals(answer)) && flagTwo){// если ответ пользователя совпадает и флаг true
String mes = userResponse.getResultNumber();
System.out.println("cn=" + mes);
try{
statement.execute("UPDATE user SET cn = '"+ mes +"' WHERE id = '"+ idUser+"'");
}
catch (SQLException ignored){
}
userResponse.citySelection();
sendMsg(message,"Выберите ****);
answer = userResponse.getJParseGetAuthorization();
flagTwo=false;
flagThree=true;
}
if(message.getText().equals(userResponse.getEquals(answer)) && flagThree){
String mes = userResponse.getResultNumber();
System.out.println("sft=" + mes);
try{
statement.execute("UPDATE user SET sft = '"+ mes +"' WHERE id = '"+ idUser+"'");
}
catch (SQLException ignored){
}
userResponse.schoolSelection();
sendMsg(message,"Выберите *****");
answer = userResponse.getJParseGetAuthorization();
flagThree=false;
flagFour=true;
}
if(message.getText().equals(userResponse.getEquals(answer)) && flagFour){
String mes = userResponse.getResultNumber();
System.out.println("scid=" + mes);
try{
statement.execute("UPDATE user SET scid = '"+ mes +"' WHERE id = '"+ idUser+"'");
}
catch (SQLException ignored){
}
sendMsg(message, "Введете логин и пароль через !. ");
}
if(message.getText().contains("!")){
String mes = message.getText();
System.out.println("login=" + mes);
String[] LogPas = mes.split("!");
if(LogPas[0] != null && LogPas[1] !=null) {
String hashPassword = Md5hashing.md5(LogPas[1]);
int passwordLength = LogPas[1].length();
try{
statement.execute("UPDATE user SET login = '"+ LogPas[0] +"',password = '"+hashPassword +"'" +
",paslength = '"+ passwordLength+"'WHERE id = '"+ idUser+"'");
statement.close();
dataBase.getConnection().close();
}
catch (SQLException ignored){
}
login = new LoginAuthorization(idUser);
login.postGetData("адрес сайта");
}
if(login.getResult() != null) {
sendMsg(message, "Авторизация прошла успешно!");
}
else sendMsg(message, "Что-то не так, введите /start");
}
}`
Этот код я перенес в метод run(). А в метод onUpdateReceived поместил вызов run()(Что не правильно, ведь run()будет вызываться при каждом получении сообщения от пользователя) Подскажите, пожалуйста, как можно правильно это реализовать? Может и потоки не понадобятся?
Вы можете создать БД с этими столбцами ChatID, ChatID, состояние
Таким образом при получении сообщения вы проверите, есть ли такой человек в базе, если есть то проверить состояние(пункт вопроса на котором остановился, например). И от этого отталкиваться в дальнейшей логике. Как один из вариантов.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть RadioGroup, состоящий из двух элементовКак сохранить их положение (т
Как бороться с зачеркнутыми значениями при адаптивной верстке? Если в медиа выражении на какое-то определенное разрешение экрана ставишь...
На первом экране сайта, как подложка лежит картинкаОна затянута не через HTML, а через CSS