ScheduledThreadPoolExecutor в Telegram-боте Java

Я новичок в Java и пытаюсь создать бота Телеграмма, который собирает данные от пользователей. Процесс заключается в том, что пользователь отправляет текст, а для подтверждения себя он должен после этого отправить изображение. если он отправит нет фото, процесс не будет завершен. но данные будут сохранены в моем классе. я использовал ScheduledThreadPoolExecutor, чтобы проверить через 5 минут, хранится ли что-то в переменной или нет, если это правда, и бот не получил изображение, удаляет сохраненные данные. но это не сработало. поскольку он проверяет переменную на регулярной основе 5 минут, я хочу, чтобы она проверяла переменную с момента, когда пользователь отправляет свой текст (данные хранятся в переменной). может ли кто-нибудь предложить лучший способ или решение для решения этой проблемы?

мой код выглядит так:

Основной класс:

public class MainClass {



        public static void main(String[] args) {
            ApiContextInitializer.init();
            TelegramBotsApi telegramBotsApi = new TelegramBotsApi();

            try {
                telegramBotsApi.registerBot(new StudiumBot());

            } catch (TelegramApiException e) {
                e.printStackTrace();
            }
        }


}

Класс бота:

    public class XXXBot extends TelegramLongPollingBot {


        public static String answer = null;
        public static boolean photo_sent= false;


        public void onUpdateReceived(Update update) {



           if (update.hasPhoto()) {


                photo_sent= true;

            }

         if (update.hasMessage() && update.getMessage().getText().contains("XXXX")) {

                answer=update.getMessage().getText();

                ThreadPool.poolExecutor();

            }


        }
    }

Класс ThreadPool:

    public class ThreadPool {
        public static void poolExecutor() {
            ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);
            stpe.scheduleAtFixedRate(new VariableRemover(), 0, 10, TimeUnit.MINUTES);
        }
    }

Класс, который удаляет сохраненные данные:

public class VariableRemover implements Runnable {

    public void run(){
        if (! XXXBot.photo_sent){
           XXXBot.answer= null;
        }

    }

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из способов добиться этого — поддерживать метку времени в классе XXXBot.

public class XXXBot extends TelegramLongPollingBot{
    ....
    public static long timeWhenThisObjectWasBuilt = System.currentTimeMillis();
}

А затем в классе VariableRemover проверьте, следует ли удалять объект на основе проверки времени:

public class VariableRemover implements Runnable {
   private long expiryTime = 10*60*1000; // convert minutes to millis
   public void run(){
       if (! photo_sent && System.currentTimeMillis() > (timeWhenThisObjectWasBuilt + expiryTime)){
          answer= null;
       }

   }

}

Примечание. В одном файле не может быть двух общедоступных классов верхнего уровня.

Другие вопросы по теме