136 lines
3.9 KiB
Java
136 lines
3.9 KiB
Java
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<Integer,JuliaPoll> polls;
|
|
static Map<Message,Integer> messages;
|
|
static Map<Message,Integer> 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<String, String> addedOptions, Set<String> 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<Message> toUpdate = getKeysFromValue(messages, ID);
|
|
List<Message> 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 <K, V> List<K> getKeysFromValue(Map<K, V> mapOfWords, V value)
|
|
{
|
|
List<K> listOfKeys = new ArrayList<>();
|
|
|
|
// Iterate over each entry of map using entrySet
|
|
for (Map.Entry<K, V> 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;
|
|
}
|
|
|
|
}
|