तो मेरे पास एक कलह बॉट है जहां मैं हर घंटे एक संदेश भेजने की कोशिश कर रहा हूं। मुझे इसका वह हिस्सा अनुसूचित निष्पादक सेवा का उपयोग करके काम कर रहा है। यह तब शुरू होता है जब मैं कहता हूँ !futureson

जब मैं !फ्यूचर्सऑफ भेजता हूं तो मैं इसे रोकने में सक्षम होना चाहता हूं

हालांकि, मैं इसे ठीक से काम करने के लिए नहीं मिल सकता। यहाँ मेरा कोड है:

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

मैंने इसे कुछ अलग तरीकों से आजमाया है, लेकिन मैं इसे ठीक से काम नहीं कर सकता। यह फ्यूचर्सऑफ भाग में जा रहा है क्योंकि यह फ्यूचर्स बॉट ऑफ संदेश भेजता है। मैं सिर्फ यह चाहता हूं कि यह एक घंटे में एक बार संदेश भेजने में सक्षम हो जब !फ्यूचरसन भेजा गया हो और न कि जब !फ्यूचरऑफ भेजा गया हो। मैंने भी कोशिश की ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(0);

मैं किसी भी मदद या किसी की सराहना करता हूं जो मुझे सही दिशा में इंगित कर सकता है।

1
Juice 2 अगस्त 2020, 00:25

1 उत्तर

सबसे बढ़िया उत्तर

सबसे पहले आपको अपने श्रोता वर्ग के अंदर scheduleAtFixedRate() का परिणाम सहेजना चाहिए।

ScheduledFuture scheduledFuture = null;

फिर आप इसे रोकने के लिए इस ऑब्जेक्ट पर cancel() का उपयोग कर सकते हैं। आपको यह भी जांचना चाहिए कि शेड्यूलिंग से पहले यह शून्य है या रद्द करने से पहले सेट किया गया है या नहीं:

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;
    }
}
    ```
1
Tobias Miosczka 1 अगस्त 2020, 22:18