package com.bernard.juliapoll; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.User; public class PollManager { static Map polls; static Map messages; static Map messagesResult; public static boolean checkPoll(int ID) { return polls.containsKey(ID); } public static Integer pollID(Guild g, String name) { return (g.getId() + name).hashCode(); } public static void registerPoll(Guild g, JuliaPoll j) { int ID = pollID(g, j.getNom()); polls.put(ID, j); postPollMessage(j.getChannel(), ID); } public static void endPoll(Guild g, Integer ID) { JuliaPoll j = polls.get(ID); if(!messagesResult.containsValue(ID)) printResults(g, ID, j.getChannel()); updatePoll(g, ID); polls.remove(ID); //Dé référence les messages de vote et de résultat messages.values().removeIf(id -> ID==id); messagesResult.values().removeIf(id -> ID==id); } public static void printResults(Guild g, Integer ID, MessageChannel messageChannel) { MessageEmbed message = polls.get(ID).toResultMessage(); Message sent = messageChannel.sendMessage(message).complete(); messagesResult.put(sent, ID); } public static void addOption(Integer ID, String emoji, String option) { polls.get(ID).getOptions().put(emoji, option); } public static void manageOptions(Integer ID, Map addedOptions, Set removedOptions) { JuliaPoll poll = polls.get(ID); poll.getOptions().putAll(addedOptions); for(String emote : removedOptions) { poll.getOptions().remove(emote); } } public static void postPollMessage(MessageChannel messageChannel,Integer ID) { MessageEmbed message = polls.get(ID).toMessage(); Message sent = messageChannel.sendMessage(message).complete(); messages.put(sent, ID); } public static void updatePoll(Guild g,Integer ID) { //edit tous les messages de poll List toUpdate = getKeysFromValue(messages, ID); List toResultUpdate = getKeysFromValue(messagesResult, ID); MessageEmbed pollMessage = polls.get(ID).toMessage(); MessageEmbed pollResultMessage = polls.get(ID).toResultMessage(); for(Message m : toUpdate) m.editMessage(pollMessage).queue(); for(Message m : toResultUpdate) m.editMessage(pollResultMessage).queue(); } public static int vote(User u,String vote, Integer ID) { JuliaPoll j = polls.get(ID); if(!j.getVotes().containsKey(u)) j.getVotes().put(u, 0); if(j.getVotes().get(u) >= j.getVoix()) return -1;//A déjà trop voté if(!j.getResults().containsKey(vote)) j.getResults().put(vote, new HashSet<>()); if(!j.getResults().get(vote).add(u)) return -2;//Avait déjà voté j.getVotes().replace(u,j.getVotes().get(u)+1); return 42;//Tout c'est bien passé } public static int unvote(User u,String vote, Integer ID) { JuliaPoll j = polls.get(ID); if(!j.getResults().containsKey(vote)) j.getResults().put(vote, new HashSet<>()); if(!j.getResults().get(vote).remove(u)) return -2;//N'avais pas voté j.getVotes().replace(u,j.getVotes().get(u)-1);//Pas possible de ne pas etre set return 42;//Tout c'est bien passé } static List getKeysFromValue(Map mapOfWords, V value) { List listOfKeys = new ArrayList<>(); // Iterate over each entry of map using entrySet for (Map.Entry entry : mapOfWords.entrySet()) { // Check if value matches with given value if (entry.getValue().equals(value)) { // Store the key from entry to the list listOfKeys.add(entry.getKey()); } } // Return the list of keys whose value matches with given value. return listOfKeys; } }