잡동사니

반응형

질문

그래서 매시간 메시지를 보내려고하는 discord 봇이 있습니다. 예약된 실행 서비스를 사용하여 그 부분을 작동 시켰습니다. 내가 말하면 시작된다! futureson

내가 보낼 때 멈출 수 있고 싶다! futuresoff

그러나 제대로 작동하지 않습니다. 내 코드는 다음과 같습니다.

    String[] args = event.getMessage().getContentRaw().split(" ");
    if (args[0].equalsIgnoreCase("!futuresOn")) {
    Color red = new Color(255, 0, 0);
    Color green = new Color(0, 204, 0);
       Runnable futRun = new Runnable() {
       public void run() {
        EmbedBuilder futuresBot = new EmbedBuilder();
        futuresBot.setAuthor("Futures Bot", null, event.getAuthor().getAvatarUrl());
   
        try {
    futuresBot.addField("**S&P 500**", getSPY(), false);
    futuresBot.addField("**NASDAQ**", getNASDAQ(), false);
    futuresBot.addField("**DOW**", getDOW(), false);
    if (getSPY().contains("+")) {
    futuresBot.setColor(green);
    } 
    else {
    futuresBot.setColor(red);
    }
        }
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
   
   
        futuresBot.setFooter("Cantina Capital", event.getGuild().getIconUrl());
        event.getChannel().sendMessage(futuresBot.build()).queue();
   
       }
      
    };
    
    exec.scheduleAtFixedRate(futRun, 0, 1, TimeUnit.HOURS);
    
    
    }
    if (args[0].equalsIgnoreCase("!futuresoff")) {
    event.getChannel().sendMessage("Futures bot off.").queue();
    exec.shutdownNow();
    }

몇 가지 다른 방법을 시도했지만 제대로 작동하지 않습니다. Futures bot off 메시지를 보내기 때문에! futuresoff 부분에 도달하고 있습니다. 나는 단지! futuresoff가 보내질 때가 아니라! futureson이 보내 졌을 때 한 시간에 한 번 메시지를 보낼 수 있기를 원합니다. 나는 또한 시도했습니다. ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor (0);

저를 올바른 방향으로 안내해줄 수 있는 도움이나 누군가에게 감사드립니다.

 

답변1

먼저 Listener class에 scheduleAtFixedRate () 의 결과를 저장해야합니다.

ScheduledFuture scheduledFuture = null;

그런 다음이 객체에 cancel () 을 사용하여 중지 할 수 있습니다.또한 예약하기 전에 null인지 테스트하고 취소하기 전에 설정되었는지 테스트해야합니다.

String[] args = event.getMessage().getContentRaw().split(" ");
if (args[0].equalsIgnoreCase("!futuresOn")) {
    Color red = new Color(255, 0, 0);
    Color green = new Color(0, 204, 0);
    Runnable futRun = new Runnable() {
        public void run() {
            EmbedBuilder futuresBot = new EmbedBuilder();
            futuresBot.setAuthor("Futures Bot", null, event.getAuthor().getAvatarUrl());

            try {
                futuresBot.addField("**S&P 500**", getSPY(), false);
                futuresBot.addField("**NASDAQ**", getNASDAQ(), false);
                futuresBot.addField("**DOW**", getDOW(), false);
                if (getSPY().contains("+")) {
                    futuresBot.setColor(green);
                }
                else {
                    futuresBot.setColor(red);
                }
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            futuresBot.setFooter("Cantina Capital", event.getGuild().getIconUrl());
            event.getChannel().sendMessage(futuresBot.build()).queue();

        }

    };

    if (scheduledFuture == null)
        scheduledFuture = exec.scheduleAtFixedRate(futRun, 0, 1, TimeUnit.HOURS);


}
if (args[0].equalsIgnoreCase("!futuresoff")) {
    event.getChannel().sendMessage("Futures bot off.").queue();
    if (scheduledFuture != null) {
        scheduledFuture.cancel(true);
        scheduledFuture = null;
    }
}
    ```



 

 

 

 

출처 : https://stackoverflow.com/questions/63210222/shutting-down-a-scheduledexecutorservice

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band