Add stats API
This commit is contained in:
parent
e6f6372d66
commit
ae83001360
@ -8,7 +8,7 @@ import net.Broken.Tools.Command.CommandParser;
|
||||
import net.Broken.Tools.EmbedMessageUtils;
|
||||
import net.Broken.Tools.Moderateur;
|
||||
import net.Broken.Tools.PrivateMessage;
|
||||
import net.Broken.Tools.UserManager.UserStatsUtils;
|
||||
import net.Broken.Tools.UserManager.Stats.UserStatsUtils;
|
||||
import net.Broken.audio.AudioM;
|
||||
import net.dv8tion.jda.core.EmbedBuilder;
|
||||
import net.dv8tion.jda.core.entities.*;
|
||||
@ -78,7 +78,6 @@ public class BotListener extends ListenerAdapter {
|
||||
String message = guildPref.getWelcomeMessage();
|
||||
message = message.replaceAll("@name", event.getMember().getAsMention());
|
||||
logger.debug(message);
|
||||
// "Salut "+event.getUser().getAsMention()+"! Ecris ton nom, prénom, ta promotion et ton groupe ici! Un admin te donnera accées a ton groupe!"
|
||||
chanel.sendMessage(message).complete();
|
||||
}
|
||||
|
||||
@ -124,7 +123,7 @@ public class BotListener extends ListenerAdapter {
|
||||
public void onGuildVoiceJoin(GuildVoiceJoinEvent event) {
|
||||
super.onGuildVoiceJoin(event);
|
||||
if(!event.getMember().getUser().isBot())
|
||||
new UserStatsUtils.VoicePresenceCompter(event.getMember()).start();
|
||||
new UserStatsUtils.VoicePresenceCounter(event.getMember()).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,32 +1,24 @@
|
||||
package net.Broken;
|
||||
|
||||
import net.Broken.DB.Entity.UserEntity;
|
||||
import net.Broken.DB.Entity.UserStats;
|
||||
import net.Broken.DB.Repository.UserRepository;
|
||||
import net.Broken.RestApi.ApiCommandLoader;
|
||||
import net.Broken.Tools.Command.CommandLoader;
|
||||
import net.Broken.Tools.DayListener.DayListener;
|
||||
import net.Broken.Tools.DayListener.Listeners.DailyMadame;
|
||||
import net.Broken.Tools.DayListener.Listeners.ResetSpam;
|
||||
import net.Broken.Tools.UserManager.UserStatsUtils;
|
||||
import net.Broken.audio.Youtube.YoutubeTools;
|
||||
import net.Broken.Tools.UserManager.Stats.UserStatsUtils;
|
||||
import net.dv8tion.jda.core.AccountType;
|
||||
import net.dv8tion.jda.core.JDA;
|
||||
import net.dv8tion.jda.core.JDABuilder;
|
||||
import net.dv8tion.jda.core.OnlineStatus;
|
||||
import net.dv8tion.jda.core.entities.Game;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.RichPresence;
|
||||
import net.dv8tion.jda.core.entities.impl.JDAImpl;
|
||||
import net.dv8tion.jda.core.exceptions.RateLimitedException;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@ -54,7 +46,8 @@ public class Init {
|
||||
|
||||
logger.info("Connecting to Discord api...");
|
||||
//connection au bot
|
||||
jda = new JDABuilder(AccountType.BOT).setToken(token).setBulkDeleteSplittingEnabled(false).buildBlocking();
|
||||
jda = new JDABuilder(AccountType.BOT).setToken(token).setBulkDeleteSplittingEnabled(false).build();
|
||||
jda = jda.awaitReady();
|
||||
MainBot.jda = jda;
|
||||
jda.setAutoReconnect(true);
|
||||
|
||||
|
@ -4,12 +4,11 @@ import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
import net.Broken.DB.Entity.UserEntity;
|
||||
import net.Broken.DB.Entity.UserStats;
|
||||
import net.Broken.DB.Repository.UserRepository;
|
||||
import net.Broken.MainBot;
|
||||
import net.Broken.RestApi.Data.*;
|
||||
import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException;
|
||||
import net.Broken.Tools.UserManager.UserStatsUtils;
|
||||
import net.Broken.Tools.UserManager.Stats.UserStatsUtils;
|
||||
import net.Broken.Tools.UserManager.UserUtils;
|
||||
import net.Broken.audio.AudioM;
|
||||
import net.Broken.audio.GetVoiceChanels;
|
||||
|
@ -5,9 +5,12 @@ import net.Broken.DB.Entity.UserEntity;
|
||||
import net.Broken.DB.Repository.PendingUserRepository;
|
||||
import net.Broken.DB.Repository.UserRepository;
|
||||
import net.Broken.MainBot;
|
||||
import net.Broken.RestApi.Data.CommandResponseData;
|
||||
import net.Broken.RestApi.Data.UserManager.*;
|
||||
import net.Broken.Tools.UserManager.Exceptions.*;
|
||||
import net.Broken.Tools.UserManager.Oauth;
|
||||
import net.Broken.Tools.UserManager.Stats.GuildStatsPack;
|
||||
import net.Broken.Tools.UserManager.Stats.UserStatsUtils;
|
||||
import net.Broken.Tools.UserManager.UserUtils;
|
||||
import net.dv8tion.jda.core.Permission;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
@ -151,6 +154,27 @@ public class UserManagerAPIController {
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getStatsPack", method = RequestMethod.GET)
|
||||
public ResponseEntity<GuildStatsPack> getStatsPack(@CookieValue(value = "token") String token, @RequestParam(value = "guild") String guildID){
|
||||
try{
|
||||
UserEntity user = userUtils.getUserWithApiToken(userRepository, token);
|
||||
Guild guild = MainBot.jda.getGuildById(guildID);
|
||||
if(guild == null ){
|
||||
logger.warn("Request whit no guild!");
|
||||
return new ResponseEntity(HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(UserStatsUtils.getINSTANCE().getStatPack(user, guildID), HttpStatus.OK);
|
||||
|
||||
|
||||
|
||||
} catch (UnknownTokenException e) {
|
||||
logger.info("Token check fail");
|
||||
return new ResponseEntity(HttpStatus.UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
package net.Broken.Tools.UserManager.Stats;
|
||||
|
||||
public class GuildStats{
|
||||
public String userName;
|
||||
|
||||
public long voiceTime;
|
||||
public long voiceXp;
|
||||
|
||||
public long messageCount;
|
||||
public long messageXp;
|
||||
|
||||
public long apiCount;
|
||||
public long apiXp;
|
||||
|
||||
public long total;
|
||||
|
||||
|
||||
public GuildStats() {
|
||||
}
|
||||
|
||||
public GuildStats(String userName, long voiceTime, long messageCount, long apiCount) {
|
||||
this.userName = userName;
|
||||
this.voiceTime = voiceTime;
|
||||
this.messageCount = messageCount;
|
||||
this.apiCount = apiCount;
|
||||
|
||||
|
||||
voiceXp = (long) (this.voiceTime * UserStatsUtils.XP_PER_VOICE_TIME);
|
||||
messageXp = (long) (this.messageCount * UserStatsUtils.XP_PER_MESSAGE);
|
||||
apiXp = (long) (this.apiCount * UserStatsUtils.XP_PER_API_COUNT);
|
||||
total = voiceXp + messageXp + apiXp;
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package net.Broken.Tools.UserManager.Stats;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GuildStatsPack {
|
||||
|
||||
|
||||
public int rank;
|
||||
public GuildStats selfStats;
|
||||
public List<GuildStats> ranking;
|
||||
|
||||
public GuildStatsPack(int rank, GuildStats selfStats, List<GuildStats> ranking) {
|
||||
this.rank = rank;
|
||||
this.selfStats = selfStats;
|
||||
this.ranking = ranking;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package net.Broken.Tools.UserManager;
|
||||
package net.Broken.Tools.UserManager.Stats;
|
||||
|
||||
import net.Broken.DB.Entity.UserEntity;
|
||||
import net.Broken.DB.Entity.UserStats;
|
||||
@ -7,6 +7,7 @@ import net.Broken.DB.Repository.UserStatsRepository;
|
||||
import net.Broken.MainBot;
|
||||
import net.Broken.SpringContext;
|
||||
import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException;
|
||||
import net.Broken.Tools.UserManager.UserUtils;
|
||||
import net.dv8tion.jda.core.entities.Guild;
|
||||
import net.dv8tion.jda.core.entities.Member;
|
||||
import net.dv8tion.jda.core.entities.User;
|
||||
@ -16,10 +17,16 @@ import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class UserStatsUtils {
|
||||
|
||||
static double XP_PER_VOICE_TIME = 0.1;
|
||||
static double XP_PER_MESSAGE = 1;
|
||||
static double XP_PER_API_COUNT = 1;
|
||||
|
||||
|
||||
|
||||
private static UserStatsUtils INSTANCE = new UserStatsUtils();
|
||||
|
||||
@ -82,7 +89,9 @@ public class UserStatsUtils {
|
||||
|
||||
}
|
||||
|
||||
public void addMessageCount(Member member){
|
||||
|
||||
|
||||
public UserStats getGuildUserStats(Member member){
|
||||
List<UserEntity> userEntityList = userRepository.findByJdaId(member.getUser().getId());
|
||||
UserEntity userEntity;
|
||||
if( userEntityList.size() == 0)
|
||||
@ -96,7 +105,21 @@ public class UserStatsUtils {
|
||||
userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, member.getGuild().getId());
|
||||
}
|
||||
|
||||
UserStats userStats = userStatsList.get(0);
|
||||
return userStatsList.get(0);
|
||||
}
|
||||
|
||||
public UserStats getGuildUserStats(UserEntity userEntity, String guildId){
|
||||
List<UserStats> userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, guildId);
|
||||
if(userStatsRepository.findByUserAndGuildId(userEntity, guildId).size() == 0){
|
||||
getUserStats(userEntity);
|
||||
userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, guildId);
|
||||
}
|
||||
return userStatsList.get(0);
|
||||
}
|
||||
|
||||
|
||||
public void addMessageCount(Member member){
|
||||
UserStats userStats = getGuildUserStats(member);
|
||||
userStats.setMessageCount(userStats.getMessageCount() + 1);
|
||||
userStatsRepository.save(userStats);
|
||||
|
||||
@ -106,12 +129,7 @@ public class UserStatsUtils {
|
||||
public void addApiCount(UserEntity userEntity, String guildId){
|
||||
|
||||
|
||||
List<UserStats> userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, guildId);
|
||||
if(userStatsRepository.findByUserAndGuildId(userEntity, guildId).size() == 0){
|
||||
getUserStats(userEntity);
|
||||
userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, guildId);
|
||||
}
|
||||
UserStats userStats = userStatsList.get(0);
|
||||
UserStats userStats = getGuildUserStats(userEntity, guildId);
|
||||
userStats.setApiCommandCount(userStats.getApiCommandCount() + 1);
|
||||
userStatsRepository.save(userStats);
|
||||
|
||||
@ -120,19 +138,7 @@ public class UserStatsUtils {
|
||||
|
||||
|
||||
private void addVocalCount(Member member){
|
||||
List<UserEntity> userEntityList = userRepository.findByJdaId(member.getUser().getId());
|
||||
UserEntity userEntity;
|
||||
if( userEntityList.size() == 0)
|
||||
userEntity = genUserEntity(member.getUser());
|
||||
else
|
||||
userEntity = userEntityList.get(0);
|
||||
|
||||
List<UserStats> userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, member.getGuild().getId());
|
||||
if(userStatsList.size() == 0){
|
||||
getUserStats(userEntity);
|
||||
userStatsList = userStatsRepository.findByUserAndGuildId(userEntity, member.getGuild().getId());
|
||||
}
|
||||
UserStats userStats = userStatsList.get(0);
|
||||
UserStats userStats = getGuildUserStats(member);
|
||||
userStats.setVocalTime(userStats.getVocalTime() + 10);
|
||||
userStatsRepository.save(userStats);
|
||||
|
||||
@ -149,9 +155,28 @@ public class UserStatsUtils {
|
||||
|
||||
|
||||
|
||||
public static class VoicePresenceCompter extends Thread{
|
||||
public GuildStatsPack getStatPack(UserEntity userEntity, String guildId){
|
||||
UserStats userStats = getGuildUserStats(userEntity, guildId);
|
||||
GuildStats selfGuildStats = null;
|
||||
|
||||
List<UserStats> allStats = userStatsRepository.findByGuildId(guildId);
|
||||
List<GuildStats> ranked = new ArrayList<>();
|
||||
for(UserStats stats : allStats){
|
||||
GuildStats temp = new GuildStats(stats.getUser().getName(), stats.getVocalTime(), stats.getMessageCount(), stats.getApiCommandCount());
|
||||
if(stats.getUser().getId().equals(userEntity.getId())){
|
||||
selfGuildStats = temp;
|
||||
}
|
||||
ranked.add(temp);
|
||||
}
|
||||
ranked.sort((guildStats, t1) -> (int) (guildStats.total - t1.total));
|
||||
|
||||
return new GuildStatsPack(ranked.indexOf(selfGuildStats) + 1 , selfGuildStats, ranked);
|
||||
|
||||
}
|
||||
|
||||
public static class VoicePresenceCounter extends Thread{
|
||||
private Member member;
|
||||
public VoicePresenceCompter(Member member){
|
||||
public VoicePresenceCounter(Member member){
|
||||
this.member = member;
|
||||
}
|
||||
|
||||
@ -171,4 +196,7 @@ public class UserStatsUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user