Java 1.8 - команда пользовательских задач JDA не организует список - PullRequest
0 голосов
/ 01 мая 2020

, поэтому я делаю собственную команду дел для своего бота JDA Discord, и для каждой задачи я хочу, чтобы он автоматически давал им ключи 1, 2, 3 и т. Д. c. Но всякий раз, когда я удаляю задачу, я хочу, чтобы она оставалась в том же порядке: 1, 2, 3, а не 1, 3. Я немного поиграл с ней, и я провел много поисков, но я ничего не могу найти. Спасибо за потраченное время!

package io.github.epicoweo.commands.util;

import java.util.Arrays;
import java.util.List;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

import net.dv8tion.jda.api.entities.MessageChannel;

public class ToDo {

    private static String[] keys;
    private static MessageChannel channel;

    public static void run(String action, String item, MessageChannel channel) {
        Preferences list = Preferences.userNodeForPackage(ToDo.class);
        try {
            keys = list.keys();
            ToDo.channel = channel;

            if(!item.equals("_") && action.equals("create")){
                keys = Arrays.copyOf(keys, keys.length+1);
                //My attempts at doing this are everywhere, sorry about not commenting, I know my organization is horrific
                List<String> keylist = Arrays.asList(keys); 
                if(!keylist.contains(Integer.toString(keys.length))) {
                    keys[keys.length-1] = Integer.toString(keys.length);
                    saveList(keys[keys.length-1], item);
                } else {
                    int i = 1;
                    for(String k : keys) {
                        saveList(Integer.toString(i), list.get(k, "none"));
                        channel.sendMessage("keys[" + (i-1) + "] changed to " + i).queue();
                        i++;
                    }
                    saveList(keys[keys.length-1], item);
                }

                return;
            } else {
                channel.sendMessage("Incorrect syntax!").queue();
            }
        } catch (BackingStoreException e) {
            e.printStackTrace();
        }
    }
    public static void run(String action, String key, String item, MessageChannel channel) {
        Preferences list = Preferences.userNodeForPackage(ToDo.class);
        try {
            keys = list.keys();
            ToDo.channel = channel;

            if(item.equals("_")) {
                if(key.equals("_") && action.equals("list")) {
                    for(String k : keys) {
                        channel.sendMessage(k + ": " + list.get(k, "none")).queue();
                    }
                    return;
                } else if(!key.equals("_") && action.equals("remove")) {
                    removeList(key);
                    return;
                }
            } else {
                channel.sendMessage("Incorrect syntax!").queue();
            }
        } catch (BackingStoreException e) {
            e.printStackTrace();
        }
    }


    private static void saveList(String key, String item) {
        Preferences list = Preferences.userNodeForPackage(ToDo.class);

        list.put(key, item);
        channel.sendMessage("Successfully created item " + key + ": " + item).queue();
    }

    private static void removeList(String key) {
        Preferences list = Preferences.userNodeForPackage(ToDo.class);

        list.remove(key);
        channel.sendMessage("Successfully removed item " + key + " from list!").queue();
    }

    public static void help(MessageChannel channel) {

    }
}

РЕДАКТИРОВАТЬ: Кроме того, всякий раз, когда я использую приведенный выше код, он превращает последние две задачи в одну и ту же задачу (не сам ключ, а задача, которая с ним связана). Спасибо!

...