@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();
    }

}
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ответы на вопрос 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)) {
                ...


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

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

Войти через центр авторизации
Похожие вопросы
Zaycev.net Челябинск
от 65 000 до 100 000 руб.
timebook Нижний Новгород
от 120 000 руб.
Ньютон Финанс Иркутск
от 65 000 руб.
20 февр. 2019, в 10:05
1800 руб./за проект
20 февр. 2019, в 09:00
1500 руб./за проект
20 февр. 2019, в 08:11
8000 руб./за проект