@TopGear28

Как сделать так, чтобы Telegram bot работал для каждого пользователя отдельно (JAVA)?

Здравствуйте. Я написал телеграмм бота, он авторизуется на сайте электронного дневника и выдает расписание, дз и так далее.
Моя проблема заключается в том, что бот работает в одном экземпляре для всех пользователей. Подскажите, пожалуйста, что нужно сделать, чтобы для каждого пользователя создавался новый экземпляр бота. Спасибо.
Вот часть кода моего бота:
public void onUpdateReceived(Update update) {

 if(message != null && message.hasText()){

        if(message.getText().equals("/start")){
            sendMsg(message, area.toString());
            flag = true;
            flagTwo = true;

        }
        result = message.getText();

        if (message.getText().equals(eq()) && flag) {
            GetAutorization  get = new GetAutorization();
            String mes = message.getText();
            prefs.put("pid", mes);
            get.getArea();
            parseGet = new JParseGetAuthorization();
            parseGet.jParse(get.getResponse());
            ArrayList<School> school = parseGet.getSchool();
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < school.size(); i++){
                School schools = school.get(i);
                builder.append(schools.getId()).append(": ").append(schools.getName()).append("\n");
            }

            sendMsg(message,builder.toString());
            flag = false;
        }

        if(message.getText().equals(eq(parseGet)) && flagTwo){
            GetAutorization  get = new GetAutorization();
            String mes = message.getText();
            prefs.put("cn", mes);
            get.getCity();
            parseGet = new JParseGetAuthorization();
            parseGet.jParse(get.getResponse());
            ArrayList<School> school = parseGet.getSchool();
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < school.size(); i++){
                School schools = school.get(i);
                builder.append(schools.getId()).append(": ").append(schools.getName()).append("\n");
            }

            sendMsg(message,builder.toString());
            flagTwo =false;
        }
private void sendMsg(Message message, String str) {

    SendMessage sendMessage = new SendMessage();
    sendMessage.setChatId(message.getChatId().toString());
    sendMessage.setText(str);
    try{
        execute(sendMessage);
    }catch (TelegramApiException ex){
        ex.printStackTrace();
    }

}
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
RATlius
@RATlius
Разработчик Android
Сталкивался с похожей проблемой в разработке своего бота. Исправил эту проблему так:
Создал поле Map userMap; и Набор состояний отдельным классом State (можно реализовать через enum или иным удобным образом)
при обращении пользователя к боту вносил его в это поле, когда приходил новый запрос к боту - проверял есть ли пользователя в userMap. Если есть пользователь в списке - продолжить с его State, если нету - начать со стартового state
Код
@Override
    public void onUpdateReceived(Update update) {
        if (update.hasMessage()) {
            Message inMessage = update.getMessage();
            long chatId = inMessage.getChatId();
            botState = switchBot(inMessage.getFrom());

            if (botState == State.main) {
                if (inMessage.hasText()) {
                ...
            } else if (botState == State.newOrder) {//заявка записаться
                String positiveAnswer = "Спасибо, мы Вам перезвоним";
                String messageAdminsText = "";
                ...
            } else if (botState == State.dev) { //команды разработчика
                if (inMessage.hasText() && inMessage.getFrom().getUserName().equals(Const.DEV)) {
                ...


Это не лучший способ, можно сделать лучше и через потоки, но я не стал сильно заморачиваться с этим
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Sidenis Томск
До 170 000 руб.
ИнЭкс Москва
от 70 000 до 150 000 руб.
CTI Москва
от 100 000 до 130 000 руб.
18 дек. 2018, в 20:42
5000 руб./за проект
18 дек. 2018, в 20:34
5000 руб./за проект
18 дек. 2018, в 20:01
10000 руб./за проект