From 812bdfc52b17b4982f6a19afd58d4897ce22283a Mon Sep 17 00:00:00 2001 From: Sebastien Date: Wed, 7 Mar 2018 19:07:10 +0100 Subject: [PATCH 01/26] Correct static path on 404 --- src/main/resources/static/error/404.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/static/error/404.html b/src/main/resources/static/error/404.html index 25decd3..125b939 100644 --- a/src/main/resources/static/error/404.html +++ b/src/main/resources/static/error/404.html @@ -10,8 +10,8 @@ - - + + From 20e87500853a9324b58f895959de609590ab2f74 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 8 Mar 2018 18:21:13 +0100 Subject: [PATCH 02/26] Start playlist api (create and add to plalist ready) and somme api change --- .../net/Broken/DB/Entity/PlaylistEntity.java | 83 +++++++++++ .../net/Broken/DB/Entity/TrackEntity.java | 86 +++++++++++ .../java/net/Broken/DB/Entity/UserEntity.java | 29 +++- .../DB/Repository/PlaylistRepository.java | 7 + .../Broken/DB/Repository/TrackRepository.java | 11 ++ .../java/net/Broken/RestApi/Commands/Add.java | 2 +- .../Broken/RestApi/Commands/AutoFlowOff.java | 11 +- .../Broken/RestApi/Commands/AutoFlowOn.java | 11 +- .../net/Broken/RestApi/Commands/Dell.java | 12 +- .../net/Broken/RestApi/Commands/Flush.java | 8 +- .../net/Broken/RestApi/Commands/Next.java | 8 +- .../net/Broken/RestApi/Commands/Pause.java | 8 +- .../net/Broken/RestApi/Commands/Play.java | 8 +- .../Data/Playlist/AddToPlaylistData.java | 11 ++ .../Data/Playlist/CreatePlaylistData.java | 5 + .../Data/Playlist/PlaylistResponseData.java | 20 +++ .../Broken/RestApi/MusicWebAPIController.java | 26 ++-- .../Broken/RestApi/PlaylistAPIController.java | 90 ++++++++++++ src/main/java/net/Broken/SpringContext.java | 24 +++ src/main/java/net/Broken/audio/AudioM.java | 6 +- .../Exception/PlaylistNotFoundException.java | 4 + .../audio/Playlist/PlaylistManager.java | 139 ++++++++++++++++++ .../java/net/Broken/audio/WebLoadUtils.java | 40 ++--- 23 files changed, 557 insertions(+), 92 deletions(-) create mode 100644 src/main/java/net/Broken/DB/Entity/PlaylistEntity.java create mode 100644 src/main/java/net/Broken/DB/Entity/TrackEntity.java create mode 100644 src/main/java/net/Broken/DB/Repository/PlaylistRepository.java create mode 100644 src/main/java/net/Broken/DB/Repository/TrackRepository.java create mode 100644 src/main/java/net/Broken/RestApi/Data/Playlist/AddToPlaylistData.java create mode 100644 src/main/java/net/Broken/RestApi/Data/Playlist/CreatePlaylistData.java create mode 100644 src/main/java/net/Broken/RestApi/Data/Playlist/PlaylistResponseData.java create mode 100644 src/main/java/net/Broken/RestApi/PlaylistAPIController.java create mode 100644 src/main/java/net/Broken/SpringContext.java create mode 100644 src/main/java/net/Broken/audio/Playlist/Exception/PlaylistNotFoundException.java create mode 100644 src/main/java/net/Broken/audio/Playlist/PlaylistManager.java diff --git a/src/main/java/net/Broken/DB/Entity/PlaylistEntity.java b/src/main/java/net/Broken/DB/Entity/PlaylistEntity.java new file mode 100644 index 0000000..e238f38 --- /dev/null +++ b/src/main/java/net/Broken/DB/Entity/PlaylistEntity.java @@ -0,0 +1,83 @@ +package net.Broken.DB.Entity; + + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import javax.annotation.Nullable; +import javax.persistence.*; +import javax.sound.midi.Track; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Entity +public class PlaylistEntity { + + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private Integer id; + + private String name; + + @JsonIgnore + @ManyToOne + @JoinColumn(name="userEntity_id", nullable=false) + private UserEntity user; + + + @OneToMany(mappedBy = "playlist") + private List tracks; + + + public PlaylistEntity() { + } + + public PlaylistEntity(String name, UserEntity user) { + this.name = name; + this.user = user; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + + public List getTracks() { + return tracks; + } + + public void setTracks(List tracks) { + this.tracks = tracks; + } + + public void addTracks(TrackEntity... tracks ) + { + if(this.tracks == null) + this.tracks = new ArrayList<>(); + + this.tracks.addAll(Arrays.asList(tracks)); + } + + +} diff --git a/src/main/java/net/Broken/DB/Entity/TrackEntity.java b/src/main/java/net/Broken/DB/Entity/TrackEntity.java new file mode 100644 index 0000000..31e7dc6 --- /dev/null +++ b/src/main/java/net/Broken/DB/Entity/TrackEntity.java @@ -0,0 +1,86 @@ +package net.Broken.DB.Entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; + +import javax.persistence.*; + +@Entity +public class TrackEntity { + + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + private Integer id; + + private String title; + + private String url; + + private String identifier; + + private Integer pos; + + @JsonIgnore + @ManyToOne + @JoinColumn(name="playlistEntity_id", nullable=false) + private PlaylistEntity playlist; + + public TrackEntity() { + } + + public TrackEntity(AudioTrackInfo trackInfo, int pos, PlaylistEntity playlist) { + this.title = trackInfo.title; + this.url = trackInfo.uri; + this.identifier = trackInfo.identifier; + this.playlist = playlist; + this.pos = pos; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public PlaylistEntity getPlaylist() { + return playlist; + } + + public void setPlaylist(PlaylistEntity playlist) { + this.playlist = playlist; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public Integer getPos() { + return pos; + } + + public void setPos(Integer pos) { + this.pos = pos; + } +} diff --git a/src/main/java/net/Broken/DB/Entity/UserEntity.java b/src/main/java/net/Broken/DB/Entity/UserEntity.java index 68bf40b..c3132c3 100644 --- a/src/main/java/net/Broken/DB/Entity/UserEntity.java +++ b/src/main/java/net/Broken/DB/Entity/UserEntity.java @@ -1,9 +1,11 @@ package net.Broken.DB.Entity; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * Entity for DB. Represent confirmed user account. @@ -20,8 +22,12 @@ public class UserEntity { private String apiToken; + @JsonIgnore private String password; + @OneToMany(mappedBy = "user") + private List playlists; + public UserEntity() { } @@ -71,4 +77,19 @@ public class UserEntity { public void setApiToken(String apiToken) { this.apiToken = apiToken; } + + public List getPlaylists() { + return playlists; + } + + public void setPlaylists(List playlists) { + this.playlists = playlists; + } + + public void addPlaylist(PlaylistEntity... playlists){ + if(this.playlists == null) + this.playlists = new ArrayList<>(); + + this.playlists.addAll(Arrays.asList(playlists)); + } } diff --git a/src/main/java/net/Broken/DB/Repository/PlaylistRepository.java b/src/main/java/net/Broken/DB/Repository/PlaylistRepository.java new file mode 100644 index 0000000..bfd77ad --- /dev/null +++ b/src/main/java/net/Broken/DB/Repository/PlaylistRepository.java @@ -0,0 +1,7 @@ +package net.Broken.DB.Repository; + +import net.Broken.DB.Entity.PlaylistEntity; +import org.springframework.data.repository.CrudRepository; + +public interface PlaylistRepository extends CrudRepository { +} diff --git a/src/main/java/net/Broken/DB/Repository/TrackRepository.java b/src/main/java/net/Broken/DB/Repository/TrackRepository.java new file mode 100644 index 0000000..a356905 --- /dev/null +++ b/src/main/java/net/Broken/DB/Repository/TrackRepository.java @@ -0,0 +1,11 @@ +package net.Broken.DB.Repository; + +import net.Broken.DB.Entity.PlaylistEntity; +import net.Broken.DB.Entity.TrackEntity; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface TrackRepository extends CrudRepository { + List findDistinctByPlaylistOrderByPos(PlaylistEntity playlistEntity); +} diff --git a/src/main/java/net/Broken/RestApi/Commands/Add.java b/src/main/java/net/Broken/RestApi/Commands/Add.java index 3b6f300..79581e6 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Add.java +++ b/src/main/java/net/Broken/RestApi/Commands/Add.java @@ -14,6 +14,6 @@ import org.springframework.http.ResponseEntity; public class Add implements CommandInterface { @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - return new WebLoadUtils(musicCommande ,data, user).getResponse(); + return new WebLoadUtils(data, user, true).getResponse(); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java index df55aa3..27bb667 100644 --- a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java +++ b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java @@ -18,13 +18,8 @@ public class AutoFlowOff implements CommandInterface{ @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { AudioM audioM = AudioM.getInstance(null); - try { - TrackScheduler scheduler = audioM.getGuildMusicManager().scheduler; - scheduler.setAutoFlow(false); - return new ResponseEntity<>(new CommandResponseData(data.command,"ok"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - LogManager.getLogger().catching(nullMusicManager); - return new ResponseEntity<>(new CommandResponseData(data.command,"Not connected", "connect"), HttpStatus.INTERNAL_SERVER_ERROR); - } + TrackScheduler scheduler = audioM.getGuildMusicManager().scheduler; + scheduler.setAutoFlow(false); + return new ResponseEntity<>(new CommandResponseData(data.command,"ok"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java index 001e259..7f15722 100644 --- a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java +++ b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java @@ -18,14 +18,9 @@ public class AutoFlowOn implements CommandInterface{ @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { AudioM audioM = AudioM.getInstance(null); - try { - TrackScheduler scheduler = audioM.getGuildMusicManager().scheduler; - scheduler.setAutoFlow(true); - return new ResponseEntity<>(new CommandResponseData(data.command,"ok"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - LogManager.getLogger().catching(nullMusicManager); - return new ResponseEntity<>(new CommandResponseData(data.command,"Not connected", "connect"), HttpStatus.INTERNAL_SERVER_ERROR); - } + TrackScheduler scheduler = audioM.getGuildMusicManager().scheduler; + scheduler.setAutoFlow(true); + return new ResponseEntity<>(new CommandResponseData(data.command,"ok"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Dell.java b/src/main/java/net/Broken/RestApi/Commands/Dell.java index abd2b93..553d879 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Dell.java +++ b/src/main/java/net/Broken/RestApi/Commands/Dell.java @@ -17,15 +17,11 @@ public class Dell implements CommandInterface { @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { if(data.url != null) { - try { - if(musicCommande.getAudioManager().getGuildMusicManager().scheduler.remove(data.url)){ - return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); - } - else - return new ResponseEntity<>(new CommandResponseData(data.command,"URL not found"), HttpStatus.NOT_FOUND); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE); + if(musicCommande.getAudioManager().getGuildMusicManager().scheduler.remove(data.url)){ + return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } + else + return new ResponseEntity<>(new CommandResponseData(data.command,"URL not found"), HttpStatus.NOT_FOUND); } return new ResponseEntity<>(new CommandResponseData(data.command, "Missing URL"), HttpStatus.NOT_ACCEPTABLE); diff --git a/src/main/java/net/Broken/RestApi/Commands/Flush.java b/src/main/java/net/Broken/RestApi/Commands/Flush.java index bd15fc2..0982661 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Flush.java +++ b/src/main/java/net/Broken/RestApi/Commands/Flush.java @@ -16,11 +16,7 @@ import org.springframework.http.ResponseEntity; public class Flush implements CommandInterface { @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - try { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.flush(); - return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE); - } + musicCommande.getAudioManager().getGuildMusicManager().scheduler.flush(); + return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Next.java b/src/main/java/net/Broken/RestApi/Commands/Next.java index 60eb19d..6b2776e 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Next.java +++ b/src/main/java/net/Broken/RestApi/Commands/Next.java @@ -16,11 +16,7 @@ import org.springframework.http.ResponseEntity; public class Next implements CommandInterface { @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - try { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.nextTrack(); - return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE); - } + musicCommande.getAudioManager().getGuildMusicManager().scheduler.nextTrack(); + return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Pause.java b/src/main/java/net/Broken/RestApi/Commands/Pause.java index 354a2b8..ef43cd8 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Pause.java +++ b/src/main/java/net/Broken/RestApi/Commands/Pause.java @@ -16,11 +16,7 @@ import org.springframework.http.ResponseEntity; public class Pause implements CommandInterface { @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - try { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.pause(); - return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE); - } + musicCommande.getAudioManager().getGuildMusicManager().scheduler.pause(); + return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Play.java b/src/main/java/net/Broken/RestApi/Commands/Play.java index b5436b0..cc8b06e 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Play.java +++ b/src/main/java/net/Broken/RestApi/Commands/Play.java @@ -16,11 +16,7 @@ import org.springframework.http.ResponseEntity; public class Play implements CommandInterface { @Override public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - try { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.resume(); - return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new ResponseEntity<>(new CommandResponseData(data.command, "Not connected to vocal!"), HttpStatus.NOT_ACCEPTABLE); - } + musicCommande.getAudioManager().getGuildMusicManager().scheduler.resume(); + return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Data/Playlist/AddToPlaylistData.java b/src/main/java/net/Broken/RestApi/Data/Playlist/AddToPlaylistData.java new file mode 100644 index 0000000..aab8fa0 --- /dev/null +++ b/src/main/java/net/Broken/RestApi/Data/Playlist/AddToPlaylistData.java @@ -0,0 +1,11 @@ +package net.Broken.RestApi.Data.Playlist; + +import net.Broken.RestApi.Data.CommandPostData; + +public class AddToPlaylistData extends CommandPostData{ + + public int playlistId; + + + public int pos; +} diff --git a/src/main/java/net/Broken/RestApi/Data/Playlist/CreatePlaylistData.java b/src/main/java/net/Broken/RestApi/Data/Playlist/CreatePlaylistData.java new file mode 100644 index 0000000..ace8663 --- /dev/null +++ b/src/main/java/net/Broken/RestApi/Data/Playlist/CreatePlaylistData.java @@ -0,0 +1,5 @@ +package net.Broken.RestApi.Data.Playlist; + +public class CreatePlaylistData { + public String name; +} diff --git a/src/main/java/net/Broken/RestApi/Data/Playlist/PlaylistResponseData.java b/src/main/java/net/Broken/RestApi/Data/Playlist/PlaylistResponseData.java new file mode 100644 index 0000000..f4c3f77 --- /dev/null +++ b/src/main/java/net/Broken/RestApi/Data/Playlist/PlaylistResponseData.java @@ -0,0 +1,20 @@ +package net.Broken.RestApi.Data.Playlist; + +import com.fasterxml.jackson.annotation.JsonInclude; +import net.Broken.DB.Entity.PlaylistEntity; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class PlaylistResponseData { + public String message; + public String error; + public PlaylistEntity playlist; + + public PlaylistResponseData(String message, PlaylistEntity playlist) { + this.message = message; + this.playlist = playlist; + } + public PlaylistResponseData(String message, String error) { + this.message = message; + this.error = error; + } +} diff --git a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java index 056457d..a2ffd6f 100644 --- a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java +++ b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java @@ -46,18 +46,14 @@ public class MusicWebAPIController { Music musicCommande = (Music) MainBot.commandes.get("music"); if(musicCommande.audio.getGuild().getAudioManager().isConnected()){ - try { - AudioPlayer player = musicCommande.audio.getGuildMusicManager().player; - AudioTrack currentTrack = player.getPlayingTrack(); - if(currentTrack == null) - { - return new CurrentMusicData(null,0, "STOP",false, musicCommande.audio.getGuildMusicManager().scheduler.isAutoFlow()); - } - UserAudioTrackData uat = new UserAudioTrackData(musicCommande.audio.getGuildMusicManager().scheduler.getCurrentPlayingTrack()); - return new CurrentMusicData(uat, currentTrack.getPosition(), currentTrack.getState().toString(), player.isPaused(), musicCommande.audio.getGuildMusicManager().scheduler.isAutoFlow()); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new CurrentMusicData(null,0, "STOP",false, false); + AudioPlayer player = musicCommande.audio.getGuildMusicManager().player; + AudioTrack currentTrack = player.getPlayingTrack(); + if(currentTrack == null) + { + return new CurrentMusicData(null,0, "STOP",false, musicCommande.audio.getGuildMusicManager().scheduler.isAutoFlow()); } + UserAudioTrackData uat = new UserAudioTrackData(musicCommande.audio.getGuildMusicManager().scheduler.getCurrentPlayingTrack()); + return new CurrentMusicData(uat, currentTrack.getPosition(), currentTrack.getState().toString(), player.isPaused(), musicCommande.audio.getGuildMusicManager().scheduler.isAutoFlow()); }else { return new CurrentMusicData(null,0, "DISCONNECTED",false, false); @@ -68,12 +64,8 @@ public class MusicWebAPIController { public PlaylistData getPlaylist(){ Music musicCommande = (Music) MainBot.commandes.get("music"); List list = null; - try { - list = musicCommande.getAudioManager().getGuildMusicManager().scheduler.getList(); - return new PlaylistData(list); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - return new PlaylistData(list); - } + list = musicCommande.getAudioManager().getGuildMusicManager().scheduler.getList(); + return new PlaylistData(list); } @RequestMapping(value = "/command", method = RequestMethod.POST) diff --git a/src/main/java/net/Broken/RestApi/PlaylistAPIController.java b/src/main/java/net/Broken/RestApi/PlaylistAPIController.java new file mode 100644 index 0000000..a3b5f11 --- /dev/null +++ b/src/main/java/net/Broken/RestApi/PlaylistAPIController.java @@ -0,0 +1,90 @@ +package net.Broken.RestApi; + + +import net.Broken.DB.Entity.PlaylistEntity; +import net.Broken.DB.Entity.UserEntity; +import net.Broken.DB.Repository.PlaylistRepository; +import net.Broken.DB.Repository.TrackRepository; +import net.Broken.DB.Repository.UserRepository; +import net.Broken.MainBot; +import net.Broken.RestApi.Data.CommandPostData; +import net.Broken.RestApi.Data.CommandResponseData; +import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; +import net.Broken.RestApi.Data.Playlist.CreatePlaylistData; +import net.Broken.RestApi.Data.Playlist.PlaylistResponseData; +import net.Broken.audio.Playlist.PlaylistManager; +import net.Broken.audio.WebLoadUtils; +import net.dv8tion.jda.core.entities.User; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/api/playlist/") +public class PlaylistAPIController { + + private final + UserRepository userRepository; + + private final + PlaylistRepository playlistRepository; + + private final + TrackRepository trackRepository; + + private Logger logger = LogManager.getLogger(); + + @Autowired + public PlaylistAPIController(UserRepository userRepository, PlaylistRepository playlistRepository, TrackRepository trackRepository) { + this.userRepository = userRepository; + this.playlistRepository = playlistRepository; + this.trackRepository = trackRepository; + } + + + @RequestMapping("/myPlaylist") + public List myPlaylist(@CookieValue(value = "token", defaultValue = "") String token){ + if(token.isEmpty()) + return null; + else{ + UserEntity user = userRepository.findByApiToken(token).get(0); + return user.getPlaylists(); + } + + } + + @RequestMapping("/createPlaylist") + public ResponseEntity createPlaylist(@CookieValue(value = "token", defaultValue = "") String token, @RequestBody CreatePlaylistData data){ + + if(token.isEmpty()) + return new ResponseEntity<>(new PlaylistResponseData("Unknown Token!\nPlease Re-connect.", "token"), HttpStatus.UNAUTHORIZED); + else{ + UserEntity user = userRepository.findByApiToken(token).get(0); + PlaylistEntity playlistEntity = new PlaylistEntity(data.name, user); + playlistEntity = playlistRepository.save(playlistEntity); + user.addPlaylist(playlistEntity); + userRepository.save(user); + return new ResponseEntity<>(new PlaylistResponseData("Ok", playlistEntity), HttpStatus.OK); + } + + + } + + @RequestMapping("/addToPlaylist") + public ResponseEntity addToPlaylist(@CookieValue(value = "token", defaultValue = "") String token, @RequestBody AddToPlaylistData data){ + PlaylistManager playlistManager = PlaylistManager.getINSTANCE(); + + return playlistManager.addToPlaylist(token, data); + + } + + +} diff --git a/src/main/java/net/Broken/SpringContext.java b/src/main/java/net/Broken/SpringContext.java new file mode 100644 index 0000000..2249e4b --- /dev/null +++ b/src/main/java/net/Broken/SpringContext.java @@ -0,0 +1,24 @@ +package net.Broken; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringContext implements ApplicationContextAware{ + + @Autowired + static ApplicationContext context; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + context = applicationContext; + } + + + public static ApplicationContext getAppContext(){ + return context; + } +} diff --git a/src/main/java/net/Broken/audio/AudioM.java b/src/main/java/net/Broken/audio/AudioM.java index 1b85475..0545209 100644 --- a/src/main/java/net/Broken/audio/AudioM.java +++ b/src/main/java/net/Broken/audio/AudioM.java @@ -337,11 +337,9 @@ public class AudioM { guild.getAudioManager().closeAudioConnection(); } - public GuildMusicManager getGuildMusicManager() throws NullMusicManager, NotConnectedException { + public GuildMusicManager getGuildMusicManager(){ if( musicManager == null) - throw new NullMusicManager(); - else if( playedChanel == null) - throw new NotConnectedException(); + musicManager = getGuildAudioPlayer(guild); return musicManager; } diff --git a/src/main/java/net/Broken/audio/Playlist/Exception/PlaylistNotFoundException.java b/src/main/java/net/Broken/audio/Playlist/Exception/PlaylistNotFoundException.java new file mode 100644 index 0000000..3d2143d --- /dev/null +++ b/src/main/java/net/Broken/audio/Playlist/Exception/PlaylistNotFoundException.java @@ -0,0 +1,4 @@ +package net.Broken.audio.Playlist.Exception; + +public class PlaylistNotFoundException extends Exception { +} diff --git a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java new file mode 100644 index 0000000..c9d7b18 --- /dev/null +++ b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java @@ -0,0 +1,139 @@ +package net.Broken.audio.Playlist; + +import net.Broken.DB.Entity.PlaylistEntity; +import net.Broken.DB.Entity.TrackEntity; +import net.Broken.DB.Entity.UserEntity; +import net.Broken.DB.Repository.PlaylistRepository; +import net.Broken.DB.Repository.TrackRepository; +import net.Broken.DB.Repository.UserRepository; +import net.Broken.MainBot; +import net.Broken.RestApi.Data.CommandResponseData; +import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; +import net.Broken.RestApi.Data.Playlist.PlaylistResponseData; +import net.Broken.SpringContext; +import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException; +import net.Broken.Tools.UserManager.UserUtils; +import net.Broken.audio.Playlist.Exception.PlaylistNotFoundException; +import net.Broken.audio.WebLoadUtils; +import net.dv8tion.jda.core.entities.User; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.context.ApplicationContext; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import sun.applet.Main; + +import java.util.List; + +public class PlaylistManager { + + private final ResponseEntity TOKEN_ERROR = new ResponseEntity<>(new PlaylistResponseData("Unknown Token!\nPlease Re-connect.", "token"), HttpStatus.UNAUTHORIZED); + + private final ResponseEntity PLAYLIST_NOT_FOUND = new ResponseEntity<>(new PlaylistResponseData("Playlist not found", "playlist"), HttpStatus.NOT_FOUND); + + private final ResponseEntity TRACK_NOT_FOUND = new ResponseEntity<>(new PlaylistResponseData("Can't find media!", "track"), HttpStatus.NOT_FOUND); + + + + private PlaylistRepository playlistRepository; + + private TrackRepository trackRepository; + + private UserRepository userRepository; + + Logger logger = LogManager.getLogger(); + + private static PlaylistManager INSTANCE = new PlaylistManager(); + + private PlaylistManager() { + ApplicationContext context = SpringContext.getAppContext(); + + playlistRepository = (PlaylistRepository) context.getBean("playlistRepository"); + trackRepository = (TrackRepository) context.getBean("trackRepository"); + userRepository = (UserRepository) context.getBean("userRepository"); + } + + public static PlaylistManager getINSTANCE() { + return INSTANCE; + } + + public ResponseEntity addToPlaylist(String token, AddToPlaylistData data) { + UserUtils userUtils = UserUtils.getInstance(); + + try { + UserEntity user = userUtils.getUserWithApiToken(userRepository, token); + PlaylistEntity playlist = getPlaylist(data.playlistId); + + User jdaUser = MainBot.jda.getUserById(user.getJdaId()); + + WebLoadUtils webLoadUtils = new WebLoadUtils(data, jdaUser, false); + webLoadUtils.getResponse(); + + if(webLoadUtils.userAudioTrack == null){ + return TRACK_NOT_FOUND; + } + else + { + TrackEntity trackEntity = new TrackEntity(webLoadUtils.userAudioTrack.getAudioTrack().getInfo(), data.pos, playlist); + + playlist = insert(playlist, trackEntity); + return new ResponseEntity<>(new PlaylistResponseData("Ok", playlist),HttpStatus.OK); + } + + + + } catch (UnknownTokenException e) { + logger.warn("Unknown token: "+ token); + return TOKEN_ERROR; + } catch (PlaylistNotFoundException e) { + logger.debug("Playlist not found: "+ data.playlistId); + return PLAYLIST_NOT_FOUND; + } + } + + + + + private PlaylistEntity getPlaylist(int id) throws PlaylistNotFoundException{ + PlaylistEntity playlist = playlistRepository.findOne(id); + if(playlist == null) + throw new PlaylistNotFoundException(); + else + return playlist; + + } + + private PlaylistEntity insert(PlaylistEntity playlistEntity, TrackEntity trackEntity){ + List tracks = trackRepository.findDistinctByPlaylistOrderByPos(playlistEntity); + + + boolean increase = false; + for(TrackEntity track : tracks){ + if(track.getPos().equals(trackEntity.getPos())){ + logger.debug("Need re-organisation"); + increase = true; + } + + + if(increase){ + track.setPos(track.getPos() + 1); + trackRepository.save(track); + } + } + + if(!increase) + { + trackEntity.setPos(tracks.size()); + } + + trackRepository.save(trackEntity); + + playlistEntity.addTracks(trackEntity); + + + return playlistRepository.save(playlistEntity); + + } + + +} diff --git a/src/main/java/net/Broken/audio/WebLoadUtils.java b/src/main/java/net/Broken/audio/WebLoadUtils.java index e1cdb95..43f89ca 100644 --- a/src/main/java/net/Broken/audio/WebLoadUtils.java +++ b/src/main/java/net/Broken/audio/WebLoadUtils.java @@ -5,7 +5,6 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; -import net.Broken.Commands.Music; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; import net.dv8tion.jda.core.entities.User; @@ -18,47 +17,52 @@ import org.springframework.http.ResponseEntity; * Interface between WebApi and Music bot for submitting track */ public class WebLoadUtils { - ResponseEntity response; - Logger logger = LogManager.getLogger(); + private ResponseEntity response; + private Logger logger = LogManager.getLogger(); + public UserAudioTrack userAudioTrack; /** * Submit a track or playlist to Music bot - * @param musicCommand The current guild music command. * @param data Received data from API * @param user User who submit the track */ - public WebLoadUtils(Music musicCommand, CommandPostData data, User user){ - AudioPlayerManager playerM = musicCommand.getAudioManager().getPlayerManager(); + public WebLoadUtils(CommandPostData data, User user, boolean submit){ + AudioPlayerManager playerM = AudioM.getInstance(null).getPlayerManager(); + try { AudioM audioM = AudioM.getInstance(null); - playerM.loadItemOrdered(musicCommand.getAudioManager().getGuildMusicManager(), data.url, new AudioLoadResultHandler() { + playerM.loadItemOrdered(audioM.getGuildMusicManager(), data.url, new AudioLoadResultHandler() { @Override public void trackLoaded(AudioTrack track) { logger.info("Single Track detected from web!"); - try { - UserAudioTrack userAudioTrack = new UserAudioTrack(user, track); //TODO + userAudioTrack = new UserAudioTrack(user, track); //TODO + if(submit) audioM.play(audioM.getGuild(), audioM.getPlayedChanel(), audioM.getGuildMusicManager(), userAudioTrack, data.onHead); - response = new ResponseEntity<>(new CommandResponseData("ADD", "Loaded"), HttpStatus.OK); - } catch (NullMusicManager | NotConnectedException nullMusicManager) { - nullMusicManager.printStackTrace(); - } + response = new ResponseEntity<>(new CommandResponseData("ADD", "Loaded"), HttpStatus.OK); } @Override public void playlistLoaded(AudioPlaylist playlist) { - logger.info("Playlist detected from web! Limit: " + data.playlistLimit); - audioM.playListLoader(playlist, data.playlistLimit, user, data.onHead); - response = new ResponseEntity<>(new CommandResponseData("ADD", "Loaded"), HttpStatus.OK); + if(submit) + { + logger.info("Playlist detected from web! Limit: " + data.playlistLimit); + audioM.playListLoader(playlist, data.playlistLimit, user, data.onHead); + response = new ResponseEntity<>(new CommandResponseData("ADD", "Loaded"), HttpStatus.OK); + }else + { + response = new ResponseEntity<>(new CommandResponseData("ADD", "Adding a list on saved playlist is currently not supported"), HttpStatus.NOT_ACCEPTABLE); + + } } @Override public void noMatches() { - logger.warn("Cant find media ! (web)"); + logger.warn("Cant find media ! (web) url: "+ data.url); response = new ResponseEntity<>(new CommandResponseData("ADD", "Can't find media!"), HttpStatus.NOT_FOUND); } @@ -73,7 +77,7 @@ public class WebLoadUtils { while(response == null) Thread.sleep(10); - } catch (NullMusicManager | NotConnectedException | InterruptedException nullMusicManager) { + } catch (InterruptedException nullMusicManager) { nullMusicManager.printStackTrace(); } } From 72deefb166e151ff6122389f3bf143f11b1830d5 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Fri, 9 Mar 2018 15:41:59 +0100 Subject: [PATCH 03/26] Adding restAPI deletrack for playlist --- .../Data/Playlist/DeleteTrackData.java | 6 +++ .../Broken/RestApi/PlaylistAPIController.java | 14 ++++-- .../audio/Playlist/PlaylistManager.java | 47 +++++++++++++++++++ 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/Broken/RestApi/Data/Playlist/DeleteTrackData.java diff --git a/src/main/java/net/Broken/RestApi/Data/Playlist/DeleteTrackData.java b/src/main/java/net/Broken/RestApi/Data/Playlist/DeleteTrackData.java new file mode 100644 index 0000000..d6b2e3f --- /dev/null +++ b/src/main/java/net/Broken/RestApi/Data/Playlist/DeleteTrackData.java @@ -0,0 +1,6 @@ +package net.Broken.RestApi.Data.Playlist; + +public class DeleteTrackData { + public int id; + public int playlistId; +} diff --git a/src/main/java/net/Broken/RestApi/PlaylistAPIController.java b/src/main/java/net/Broken/RestApi/PlaylistAPIController.java index a3b5f11..3614865 100644 --- a/src/main/java/net/Broken/RestApi/PlaylistAPIController.java +++ b/src/main/java/net/Broken/RestApi/PlaylistAPIController.java @@ -6,15 +6,11 @@ import net.Broken.DB.Entity.UserEntity; import net.Broken.DB.Repository.PlaylistRepository; import net.Broken.DB.Repository.TrackRepository; import net.Broken.DB.Repository.UserRepository; -import net.Broken.MainBot; -import net.Broken.RestApi.Data.CommandPostData; -import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; import net.Broken.RestApi.Data.Playlist.CreatePlaylistData; +import net.Broken.RestApi.Data.Playlist.DeleteTrackData; import net.Broken.RestApi.Data.Playlist.PlaylistResponseData; import net.Broken.audio.Playlist.PlaylistManager; -import net.Broken.audio.WebLoadUtils; -import net.dv8tion.jda.core.entities.User; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -86,5 +82,13 @@ public class PlaylistAPIController { } + @RequestMapping("/dellTrack") + public ResponseEntity dellTrack(@CookieValue(value = "token", defaultValue = "") String token, @RequestBody DeleteTrackData data){ + PlaylistManager playlistManager = PlaylistManager.getINSTANCE(); + + return playlistManager.removeTrack(token, data); + + } + } diff --git a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java index c9d7b18..9a0645a 100644 --- a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java +++ b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java @@ -9,6 +9,7 @@ import net.Broken.DB.Repository.UserRepository; import net.Broken.MainBot; import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; +import net.Broken.RestApi.Data.Playlist.DeleteTrackData; import net.Broken.RestApi.Data.Playlist.PlaylistResponseData; import net.Broken.SpringContext; import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException; @@ -92,6 +93,51 @@ public class PlaylistManager { } + public ResponseEntity removeTrack(String token, DeleteTrackData data){ + UserUtils userUtils = UserUtils.getInstance(); + try { + UserEntity user = userUtils.getUserWithApiToken(userRepository, token); + PlaylistEntity playlist = getPlaylist(data.playlistId); + + List tracks = trackRepository.findDistinctByPlaylistOrderByPos(playlist); + + TrackEntity toDelete = trackRepository.findOne(data.id); + if(toDelete == null){ + logger.warn("Track not found in DB, id: "+ data.id); + return TRACK_NOT_FOUND; + } + int toDeleteIndex = tracks.indexOf(toDelete); + logger.debug("To delete index: " + toDeleteIndex); + if(toDeleteIndex == -1){ + logger.warn("Track not found in playlist, id: " + data.id + " playlist: " + data.playlistId); + return TRACK_NOT_FOUND; + } + + + for(int i = toDeleteIndex + 1; i< tracks.size(); i++){ + tracks.get(i).setPos(tracks.get(i).getPos() - 1); + trackRepository.save(tracks.get(i)); + } + + tracks.remove(toDelete); + trackRepository.delete(toDelete); + + playlist.setTracks(tracks); + playlist = playlistRepository.save(playlist); + + + return new ResponseEntity<>(new PlaylistResponseData("Ok", playlist),HttpStatus.OK); + + } catch (UnknownTokenException e) { + logger.warn("Unknown token: "+ token); + return TOKEN_ERROR; + } catch (PlaylistNotFoundException e) { + logger.debug("Playlist not found: "+ data.playlistId); + return PLAYLIST_NOT_FOUND; + } + } + + private PlaylistEntity getPlaylist(int id) throws PlaylistNotFoundException{ @@ -103,6 +149,7 @@ public class PlaylistManager { } + private PlaylistEntity insert(PlaylistEntity playlistEntity, TrackEntity trackEntity){ List tracks = trackRepository.findDistinctByPlaylistOrderByPos(playlistEntity); From de52decfd9622cb7f4b509d0c6df471259b24f37 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Fri, 9 Mar 2018 16:09:58 +0100 Subject: [PATCH 04/26] Clean --- .../audio/Playlist/PlaylistManager.java | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java index 9a0645a..c033aa3 100644 --- a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java +++ b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java @@ -99,33 +99,18 @@ public class PlaylistManager { UserEntity user = userUtils.getUserWithApiToken(userRepository, token); PlaylistEntity playlist = getPlaylist(data.playlistId); - List tracks = trackRepository.findDistinctByPlaylistOrderByPos(playlist); + TrackEntity toDelete = trackRepository.findOne(data.id); - if(toDelete == null){ - logger.warn("Track not found in DB, id: "+ data.id); + + playlist = remove(playlist, toDelete); + + if(playlist == null) + { + logger.warn("Playlist: " + data.playlistId + " Track: " + data.id); return TRACK_NOT_FOUND; } - int toDeleteIndex = tracks.indexOf(toDelete); - logger.debug("To delete index: " + toDeleteIndex); - if(toDeleteIndex == -1){ - logger.warn("Track not found in playlist, id: " + data.id + " playlist: " + data.playlistId); - return TRACK_NOT_FOUND; - } - - - for(int i = toDeleteIndex + 1; i< tracks.size(); i++){ - tracks.get(i).setPos(tracks.get(i).getPos() - 1); - trackRepository.save(tracks.get(i)); - } - - tracks.remove(toDelete); - trackRepository.delete(toDelete); - - playlist.setTracks(tracks); - playlist = playlistRepository.save(playlist); - - + return new ResponseEntity<>(new PlaylistResponseData("Ok", playlist),HttpStatus.OK); } catch (UnknownTokenException e) { @@ -182,5 +167,37 @@ public class PlaylistManager { } + private PlaylistEntity remove(PlaylistEntity playlistEntity, TrackEntity trackEntity){ + + if(trackEntity == null){ + logger.warn("Track not found in DB!"); + return null; + } + + List tracks = trackRepository.findDistinctByPlaylistOrderByPos(playlistEntity); + + int toDeleteIndex = tracks.indexOf(trackEntity); + logger.debug("To delete index: " + toDeleteIndex); + if(toDeleteIndex == -1){ + logger.warn("Track not found in playlist"); + return null; + } + + + for(int i = toDeleteIndex + 1; i< tracks.size(); i++){ + tracks.get(i).setPos(tracks.get(i).getPos() - 1); + trackRepository.save(tracks.get(i)); + } + + tracks.remove(trackEntity); + trackRepository.delete(trackEntity); + + playlistEntity.setTracks(tracks); + playlistEntity = playlistRepository.save(playlistEntity); + + return playlistEntity; + + } + } From 5bc467d94157f76e49275d6b0ca073a734045f21 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Mon, 19 Mar 2018 15:24:50 +0100 Subject: [PATCH 05/26] Adding move track on playlist api --- .../net/Broken/DB/Entity/TrackEntity.java | 8 ++++ .../RestApi/Data/Playlist/MoveTrackData.java | 10 +++++ .../Broken/RestApi/GeneralApiController.java | 28 ++++++++++++++ .../Broken/RestApi/PlaylistAPIController.java | 15 ++++++-- .../audio/Playlist/PlaylistManager.java | 37 ++++++++++++++++++- .../net/Broken/webView/GeneralWebView.java | 15 ++++++++ 6 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/Broken/RestApi/Data/Playlist/MoveTrackData.java diff --git a/src/main/java/net/Broken/DB/Entity/TrackEntity.java b/src/main/java/net/Broken/DB/Entity/TrackEntity.java index 31e7dc6..caa8fc2 100644 --- a/src/main/java/net/Broken/DB/Entity/TrackEntity.java +++ b/src/main/java/net/Broken/DB/Entity/TrackEntity.java @@ -36,6 +36,14 @@ public class TrackEntity { this.pos = pos; } + public TrackEntity(TrackEntity trackEntity){ + this.title = trackEntity.title; + this.url = trackEntity.url; + this.identifier = trackEntity.identifier; + this.pos = trackEntity.pos; + this.playlist = trackEntity.playlist; + } + public Integer getId() { return id; } diff --git a/src/main/java/net/Broken/RestApi/Data/Playlist/MoveTrackData.java b/src/main/java/net/Broken/RestApi/Data/Playlist/MoveTrackData.java new file mode 100644 index 0000000..950affb --- /dev/null +++ b/src/main/java/net/Broken/RestApi/Data/Playlist/MoveTrackData.java @@ -0,0 +1,10 @@ +package net.Broken.RestApi.Data.Playlist; + +public class MoveTrackData { + + public int playlistId; + + public int id; + + public int newPos; +} diff --git a/src/main/java/net/Broken/RestApi/GeneralApiController.java b/src/main/java/net/Broken/RestApi/GeneralApiController.java index ae994bc..96f73bf 100644 --- a/src/main/java/net/Broken/RestApi/GeneralApiController.java +++ b/src/main/java/net/Broken/RestApi/GeneralApiController.java @@ -1,15 +1,43 @@ package net.Broken.RestApi; +import net.Broken.DB.Entity.PlaylistEntity; +import net.Broken.DB.Entity.TrackEntity; +import net.Broken.DB.Entity.UserEntity; +import net.Broken.DB.Repository.PlaylistRepository; +import net.Broken.DB.Repository.TrackRepository; +import net.Broken.DB.Repository.UserRepository; import net.Broken.MainBot; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; +import java.util.List; + @RestController @RequestMapping("/api/") public class GeneralApiController { + + private final + UserRepository userRepository; + + private final + PlaylistRepository playlistRepository; + + private final + TrackRepository trackRepository; + + @Autowired + public GeneralApiController(UserRepository userRepository, PlaylistRepository playlistRepository, TrackRepository trackRepository) { + this.userRepository = userRepository; + this.playlistRepository = playlistRepository; + this.trackRepository = trackRepository; + } + @RequestMapping(value = "/isReady", method = RequestMethod.GET) public ResponseEntity isReady(){ if(MainBot.ready){ diff --git a/src/main/java/net/Broken/RestApi/PlaylistAPIController.java b/src/main/java/net/Broken/RestApi/PlaylistAPIController.java index 3614865..9a428c4 100644 --- a/src/main/java/net/Broken/RestApi/PlaylistAPIController.java +++ b/src/main/java/net/Broken/RestApi/PlaylistAPIController.java @@ -6,10 +6,7 @@ import net.Broken.DB.Entity.UserEntity; import net.Broken.DB.Repository.PlaylistRepository; import net.Broken.DB.Repository.TrackRepository; import net.Broken.DB.Repository.UserRepository; -import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; -import net.Broken.RestApi.Data.Playlist.CreatePlaylistData; -import net.Broken.RestApi.Data.Playlist.DeleteTrackData; -import net.Broken.RestApi.Data.Playlist.PlaylistResponseData; +import net.Broken.RestApi.Data.Playlist.*; import net.Broken.audio.Playlist.PlaylistManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -90,5 +87,15 @@ public class PlaylistAPIController { } + @RequestMapping("/moveTrack") + public ResponseEntity moveTrack(@CookieValue(value = "token", defaultValue = "") String token, @RequestBody MoveTrackData data){ + PlaylistManager playlistManager = PlaylistManager.getINSTANCE(); + + return playlistManager.moveTrack(token, data); + + } + + + } diff --git a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java index c033aa3..a70b713 100644 --- a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java +++ b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java @@ -10,6 +10,7 @@ import net.Broken.MainBot; import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; import net.Broken.RestApi.Data.Playlist.DeleteTrackData; +import net.Broken.RestApi.Data.Playlist.MoveTrackData; import net.Broken.RestApi.Data.Playlist.PlaylistResponseData; import net.Broken.SpringContext; import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException; @@ -110,7 +111,7 @@ public class PlaylistManager { logger.warn("Playlist: " + data.playlistId + " Track: " + data.id); return TRACK_NOT_FOUND; } - + return new ResponseEntity<>(new PlaylistResponseData("Ok", playlist),HttpStatus.OK); } catch (UnknownTokenException e) { @@ -122,9 +123,43 @@ public class PlaylistManager { } } + public ResponseEntity moveTrack(String token, MoveTrackData data) { + UserUtils userUtils = UserUtils.getInstance(); + try { + UserEntity user = userUtils.getUserWithApiToken(userRepository, token); + PlaylistEntity playlist = getPlaylist(data.playlistId); + TrackEntity toMove = trackRepository.findOne(data.id); + + TrackEntity save = new TrackEntity(toMove); + + playlist = remove(playlist, toMove); + + if(playlist == null) + { + logger.warn("Playlist: " + data.playlistId + " Track: " + data.id); + return TRACK_NOT_FOUND; + } + + save.setPos(data.newPos); + + playlist = insert(playlist, save); + + + + return new ResponseEntity<>(new PlaylistResponseData("Ok", playlist),HttpStatus.OK); + + } catch (UnknownTokenException e) { + logger.warn("Unknown token: "+ token); + return TOKEN_ERROR; + } catch (PlaylistNotFoundException e) { + logger.debug("Playlist not found: "+ data.playlistId); + return PLAYLIST_NOT_FOUND; + } + } + private PlaylistEntity getPlaylist(int id) throws PlaylistNotFoundException{ PlaylistEntity playlist = playlistRepository.findOne(id); if(playlist == null) diff --git a/src/main/java/net/Broken/webView/GeneralWebView.java b/src/main/java/net/Broken/webView/GeneralWebView.java index 0f7287d..71616ad 100644 --- a/src/main/java/net/Broken/webView/GeneralWebView.java +++ b/src/main/java/net/Broken/webView/GeneralWebView.java @@ -1,14 +1,25 @@ package net.Broken.webView; +import net.Broken.DB.Entity.PlaylistEntity; +import net.Broken.DB.Entity.TrackEntity; +import net.Broken.DB.Entity.UserEntity; +import net.Broken.DB.Repository.UserRepository; +import net.Broken.RestApi.Commands.Play; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +import java.util.ArrayList; +import java.util.List; + /** * Web page controller for index */ @Controller public class GeneralWebView { + + @RequestMapping("/") public String music(Model model){ @@ -18,4 +29,8 @@ public class GeneralWebView { public String loading(Model model){ return "loading"; } + + + + } From 2bca2987361d3c1db3adbc8922ecf75f5d16b74a Mon Sep 17 00:00:00 2001 From: Sebastien Date: Mon, 23 Apr 2018 16:58:20 +0200 Subject: [PATCH 06/26] Adding Suicide Girl --- .../net/Broken/Commands/Over18/Suicide.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main/java/net/Broken/Commands/Over18/Suicide.java diff --git a/src/main/java/net/Broken/Commands/Over18/Suicide.java b/src/main/java/net/Broken/Commands/Over18/Suicide.java new file mode 100644 index 0000000..e265288 --- /dev/null +++ b/src/main/java/net/Broken/Commands/Over18/Suicide.java @@ -0,0 +1,41 @@ +package net.Broken.Commands.Over18; + +import net.Broken.Commande; +import net.Broken.Tools.EmbedMessageUtils; +import net.Broken.Tools.Redirection; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import org.apache.logging.log4j.LogManager; + +import java.io.IOException; + +public class Suicide implements Commande{ + + private String redirectUrl = "https://suicidegirlsandhopefuls.tumblr.com/random"; + + + @Override + public void action(String[] args, MessageReceivedEvent event) { + Redirection redirection = new Redirection(); + try { + event.getTextChannel().sendMessage(redirection.get(redirectUrl)).queue(); + } catch (IOException e) { + LogManager.getLogger().catching(e); + event.getTextChannel().sendMessage(EmbedMessageUtils.getInternalError()).queue(); + } + } + + @Override + public boolean isPrivateUsable() { + return false; + } + + @Override + public boolean isAdminCmd() { + return false; + } + + @Override + public boolean isNSFW() { + return true; + } +} From 7f4e16ced952be4e3e2f5179f37b18fd64cdb3a1 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Wed, 25 Apr 2018 16:40:21 +0200 Subject: [PATCH 07/26] Updating JDA --- build.gradle | 2 +- src/main/java/net/Broken/BotListener.java | 8 ++--- src/main/java/net/Broken/Commands/Flush.java | 2 +- .../net/Broken/Commands/Over18/Suicide.java | 2 +- src/main/java/net/Broken/Commands/ytTest.java | 13 ++------- src/main/java/net/Broken/Init.java | 20 +++++++------ src/main/java/net/Broken/MainBot.java | 29 ------------------- .../Tools/Command/NumberedCommande.java | 4 +-- .../java/net/Broken/Tools/Moderateur.java | 6 ++-- 9 files changed, 25 insertions(+), 61 deletions(-) diff --git a/build.gradle b/build.gradle index d58cbdc..3ed489b 100644 --- a/build.gradle +++ b/build.gradle @@ -53,7 +53,7 @@ dependencies { } compile("org.springframework.boot:spring-boot-starter-log4j2") compile("com.sedmelluq:lavaplayer:1.2.49") - compile 'net.dv8tion:JDA:3.3.1_303' + compile 'net.dv8tion:JDA:3.6.0_354' compile group: 'org.json', name: 'json', version: '20160810' compile 'org.springframework.security:spring-security-web:5.0.1.RELEASE' // JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) diff --git a/src/main/java/net/Broken/BotListener.java b/src/main/java/net/Broken/BotListener.java index 991ce80..32e4a8a 100644 --- a/src/main/java/net/Broken/BotListener.java +++ b/src/main/java/net/Broken/BotListener.java @@ -90,10 +90,10 @@ public class BotListener extends ListenerAdapter { try{ - if (event.getMessage().getContent().startsWith("//") && !event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) { + if (event.getMessage().getContentRaw().startsWith("//") && !event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) { //On a detecter que c'etait une commande //System.out.println(event.getMessage().getContent()); - MainBot.handleCommand(new CommandParser().parse(event.getMessage().getContent(), event)); + MainBot.handleCommand(new CommandParser().parse(event.getMessage().getContentRaw(), event)); } else if (!event.getMessage().getAuthor().getId().equals(event.getJDA().getSelfUser().getId())) @@ -106,12 +106,12 @@ public class BotListener extends ListenerAdapter { Member user = event.getMember(); // appel de la methode d'analyse de message de "Moderateur" - if (!event.getAuthor().getName().equals("Aethex") && event.getMessage().getContent().length() > 0) { + if (!event.getAuthor().getName().equals("Aethex") && event.getMessage().getContentRaw().length() > 0) { if (modo.analyse(user, serveur, guildManager, event) == 1) { antispam.extermine(user, serveur, guildManager, true, event); } - } else if (event.getMessage().getContent().length() == 0) + } else if (event.getMessage().getContentRaw().length() == 0) logger.error("Image detected, ignoring it."); } diff --git a/src/main/java/net/Broken/Commands/Flush.java b/src/main/java/net/Broken/Commands/Flush.java index a081cb4..ae0377a 100644 --- a/src/main/java/net/Broken/Commands/Flush.java +++ b/src/main/java/net/Broken/Commands/Flush.java @@ -36,7 +36,7 @@ public class Flush implements Commande{ if(limit > retrieved.size()) limit = retrieved.size()-1; for(int i = 0; i textChannel.sendTyping().queue()); @@ -65,29 +68,27 @@ public class Init { //on recupere les utilisateur List utilisateurCo = serveur.getMembers(); - logger.info("Utilisatieur connecté: "+utilisateurCo.size()); + logger.info("Online users: "+utilisateurCo.size()); for (Member anUtilisateurCo : utilisateurCo) { if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.ONLINE)) logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); } - logger.debug("Utilisatieur absent: "); + logger.debug("Do not disturb users: "); for (Member anUtilisateurCo : utilisateurCo) { if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.DO_NOT_DISTURB)) logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); } - logger.debug("Utilisatieur hors ligne: "); + logger.debug("Offline users: "); for (Member anUtilisateurCo : utilisateurCo) { if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.OFFLINE)) logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); } - MainBot.ModoTimer modotimer = new MainBot.ModoTimer(); - modotimer.start(); DayListener dayListener = DayListener.getInstance(); dayListener.addListener(new ResetSpam()); @@ -99,7 +100,7 @@ public class Init { } - catch (LoginException | InterruptedException | RateLimitedException e) + catch (LoginException | InterruptedException e) { logger.catching(e); } @@ -112,7 +113,8 @@ public class Init { static void polish(JDA jda){ CommandLoader.load(); ApiCommandLoader.load(); - jda.getPresence().setGame(Game.of("bot.seb6596.ovh")); + jda.getPresence().setPresence(OnlineStatus.ONLINE, Game.playing("bot.seb6596.ovh")); + } } diff --git a/src/main/java/net/Broken/MainBot.java b/src/main/java/net/Broken/MainBot.java index f067eee..1f096bf 100644 --- a/src/main/java/net/Broken/MainBot.java +++ b/src/main/java/net/Broken/MainBot.java @@ -178,33 +178,4 @@ public class MainBot { } - - /** - * TODO Change this, better use daylistener - */ - public static class ModoTimer extends Thread{ - - - public ModoTimer(){} - - - @Override - public void run() - { - while(true) - { - try { - sleep(5000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - for (User unUser: message_compteur.keySet()) - { - MainBot.message_compteur.put(unUser, 0); - } - } - - } - } - } diff --git a/src/main/java/net/Broken/Tools/Command/NumberedCommande.java b/src/main/java/net/Broken/Tools/Command/NumberedCommande.java index 2456bc2..35ed4ec 100644 --- a/src/main/java/net/Broken/Tools/Command/NumberedCommande.java +++ b/src/main/java/net/Broken/Tools/Command/NumberedCommande.java @@ -101,12 +101,12 @@ public abstract class NumberedCommande implements Commande{ } } else { event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:warning: **__Erreur__** :warning:\n:arrow_right: Erreur d'argument. `//help " + this.toString().toLowerCase() + "` pour plus d'info ").queue(); - logger.warn("Bad Argument: " + event.getMessage().getContent() + " From " + event.getAuthor().getName()); + logger.warn("Bad Argument: " + event.getMessage().getContentRaw() + " From " + event.getAuthor().getName()); } break; default: event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n:warning: **__Erreur__** :warning:\n:arrow_right: Erreur d'argument. `//help " + this.toString().toLowerCase() + "` pour plus d'info ").queue(); - logger.warn("Bad Argument: " + event.getMessage().getContent() + " From " + event.getAuthor().getName()); + logger.warn("Bad Argument: " + event.getMessage().getContentRaw() + " From " + event.getAuthor().getName()); break; } } diff --git a/src/main/java/net/Broken/Tools/Moderateur.java b/src/main/java/net/Broken/Tools/Moderateur.java index 1ef9ba9..c38cc0f 100644 --- a/src/main/java/net/Broken/Tools/Moderateur.java +++ b/src/main/java/net/Broken/Tools/Moderateur.java @@ -69,9 +69,9 @@ public class Moderateur { int equalCont = 0; String oldMessage = ""; for(Message aMessage : thisUserHistory){ - if(aMessage.getContent().equals(oldMessage)) + if(aMessage.getContentRaw().equals(oldMessage)) equalCont++; - oldMessage = aMessage.getContent(); + oldMessage = aMessage.getContentRaw(); } if(equalCont >= nbMessage){ @@ -79,7 +79,7 @@ public class Moderateur { logger.info("Detection de spam pour "+user.getEffectiveName()+"avec 3 messages identique: "); for(Message aMessage : thisUserHistory) { - logger.info("\t - "+aMessage.getContent()); + logger.info("\t - "+aMessage.getContentRaw()); } MainBot.historique.put(user.getUser(), new ArrayList()); } From 2cdf390c36b0f1f97cc6b9f7549518be69a3db33 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Wed, 25 Apr 2018 17:12:23 +0200 Subject: [PATCH 08/26] Prepare for multi guild support --- src/main/java/net/Broken/Init.java | 43 ++++++++++++++++-------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/Broken/Init.java b/src/main/java/net/Broken/Init.java index bba7cab..878374f 100644 --- a/src/main/java/net/Broken/Init.java +++ b/src/main/java/net/Broken/Init.java @@ -63,31 +63,34 @@ public class Init { //On recupere le l'id serveur - Guild serveur = jda.getGuilds().get(0); + for( Guild server : jda.getGuilds()){ + //on recupere les utilisateur + List utilisateurCo = server.getMembers(); - //on recupere les utilisateur - List utilisateurCo = serveur.getMembers(); + logger.info("Online users: "+utilisateurCo.size()); + for (Member anUtilisateurCo : utilisateurCo) + { + if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.ONLINE)) + logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); + } - logger.info("Online users: "+utilisateurCo.size()); - for (Member anUtilisateurCo : utilisateurCo) - { - if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.ONLINE)) - logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); + logger.debug("Do not disturb users: "); + for (Member anUtilisateurCo : utilisateurCo) + { + if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.DO_NOT_DISTURB)) + logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); + } + + logger.debug("Offline users: "); + for (Member anUtilisateurCo : utilisateurCo) + { + if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.OFFLINE)) + logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); + } } - logger.debug("Do not disturb users: "); - for (Member anUtilisateurCo : utilisateurCo) - { - if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.DO_NOT_DISTURB)) - logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); - } - logger.debug("Offline users: "); - for (Member anUtilisateurCo : utilisateurCo) - { - if (anUtilisateurCo.getOnlineStatus().equals(OnlineStatus.OFFLINE)) - logger.debug("\t*" + anUtilisateurCo.getEffectiveName()); - } + DayListener dayListener = DayListener.getInstance(); From 2796993fec988e52b7a6a46556ac49d6b7e2b125 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 26 Apr 2018 11:16:47 +0200 Subject: [PATCH 09/26] Add multi guild support for music --- src/main/java/net/Broken/BotListener.java | 4 +- src/main/java/net/Broken/Commands/Music.java | 15 ++-- .../net/Broken/RestApi/CommandInterface.java | 4 +- .../java/net/Broken/RestApi/Commands/Add.java | 6 +- .../Broken/RestApi/Commands/AutoFlowOff.java | 8 +- .../Broken/RestApi/Commands/AutoFlowOn.java | 8 +- .../net/Broken/RestApi/Commands/Connect.java | 11 +-- .../net/Broken/RestApi/Commands/Dell.java | 9 ++- .../Broken/RestApi/Commands/Disconnect.java | 8 +- .../net/Broken/RestApi/Commands/Flush.java | 8 +- .../net/Broken/RestApi/Commands/Next.java | 8 +- .../net/Broken/RestApi/Commands/Pause.java | 8 +- .../net/Broken/RestApi/Commands/Play.java | 8 +- .../net/Broken/RestApi/Commands/Stop.java | 6 +- .../Broken/RestApi/MusicWebAPIController.java | 75 +++++++++++++------ src/main/java/net/Broken/audio/AudioM.java | 32 ++++---- .../net/Broken/audio/GuildMusicManager.java | 8 +- .../audio/Playlist/PlaylistManager.java | 4 +- .../java/net/Broken/audio/TrackScheduler.java | 12 ++- .../java/net/Broken/audio/WebLoadUtils.java | 8 +- .../Broken/audio/Youtube/YoutubeTools.java | 8 +- 21 files changed, 145 insertions(+), 113 deletions(-) diff --git a/src/main/java/net/Broken/BotListener.java b/src/main/java/net/Broken/BotListener.java index 32e4a8a..23c3ae1 100644 --- a/src/main/java/net/Broken/BotListener.java +++ b/src/main/java/net/Broken/BotListener.java @@ -7,6 +7,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.audio.AudioM; import net.dv8tion.jda.core.entities.ChannelType; import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Member; @@ -78,8 +79,7 @@ public class BotListener extends ListenerAdapter { if(event.getGuild().getAudioManager().getConnectedChannel().getMembers().size() == 1){ logger.debug("I'm alone, close audio connection."); - Music music = (Music) MainBot.commandes.get("music"); - music.audio.stop(); + AudioM.getInstance(event.getGuild()).stop(); } } } diff --git a/src/main/java/net/Broken/Commands/Music.java b/src/main/java/net/Broken/Commands/Music.java index 5df2cba..37ab05b 100644 --- a/src/main/java/net/Broken/Commands/Music.java +++ b/src/main/java/net/Broken/Commands/Music.java @@ -20,21 +20,20 @@ import java.util.List; */ public class Music implements Commande { - public AudioM audio; - Logger logger = LogManager.getLogger(); - public Music() { - audio = AudioM.getInstance(MainBot.jda.getGuilds().get(0)); - } + private Logger logger = LogManager.getLogger(); + @Override public void action(String[] args, MessageReceivedEvent event) { - + AudioM audio = AudioM.getInstance(event.getGuild()); if(args.length >= 1){ switch (args[0]){ case "play": event.getTextChannel().sendTyping().queue(); + if(args.length>=2){ if(event.getMember().getVoiceState().inVoiceChannel()){ + VoiceChannel voiceChanel = event.getMember().getVoiceState().getChannel(); logger.info("Connecting to "+voiceChanel.getName()+"..."); if(args.length ==2){ @@ -170,8 +169,4 @@ public class Music implements Commande { public boolean isNSFW() { return false; } - - public AudioM getAudioManager(){ - return audio; - } } diff --git a/src/main/java/net/Broken/RestApi/CommandInterface.java b/src/main/java/net/Broken/RestApi/CommandInterface.java index 51ed076..381f9f2 100644 --- a/src/main/java/net/Broken/RestApi/CommandInterface.java +++ b/src/main/java/net/Broken/RestApi/CommandInterface.java @@ -3,6 +3,7 @@ package net.Broken.RestApi; import net.Broken.Commands.Music; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.ResponseEntity; @@ -16,7 +17,8 @@ public interface CommandInterface { * @param musicCommande Current guild music command * @param data Received data * @param user User who submit RestApi command + * @param guild * @return HTTP Response */ - ResponseEntity action(Music musicCommande, CommandPostData data, User user); + ResponseEntity action(CommandPostData data, User user, Guild guild); } diff --git a/src/main/java/net/Broken/RestApi/Commands/Add.java b/src/main/java/net/Broken/RestApi/Commands/Add.java index 79581e6..748b414 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Add.java +++ b/src/main/java/net/Broken/RestApi/Commands/Add.java @@ -1,10 +1,10 @@ package net.Broken.RestApi.Commands; -import net.Broken.Commands.Music; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.audio.WebLoadUtils; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.ResponseEntity; @@ -13,7 +13,7 @@ import org.springframework.http.ResponseEntity; */ public class Add implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - return new WebLoadUtils(data, user, true).getResponse(); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + return new WebLoadUtils(data, user, guild, true).getResponse(); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java index 27bb667..df5b33a 100644 --- a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java +++ b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOff.java @@ -5,19 +5,17 @@ import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.audio.AudioM; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; import net.Broken.audio.TrackScheduler; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; -import org.apache.logging.log4j.LogManager; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; public class AutoFlowOff implements CommandInterface{ @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - AudioM audioM = AudioM.getInstance(null); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM audioM = AudioM.getInstance(guild); TrackScheduler scheduler = audioM.getGuildMusicManager().scheduler; scheduler.setAutoFlow(false); return new ResponseEntity<>(new CommandResponseData(data.command,"ok"), HttpStatus.OK); diff --git a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java index 7f15722..a48ed5d 100644 --- a/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java +++ b/src/main/java/net/Broken/RestApi/Commands/AutoFlowOn.java @@ -5,19 +5,17 @@ import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.audio.AudioM; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; import net.Broken.audio.TrackScheduler; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; -import org.apache.logging.log4j.LogManager; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; public class AutoFlowOn implements CommandInterface{ @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - AudioM audioM = AudioM.getInstance(null); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM audioM = AudioM.getInstance(guild); TrackScheduler scheduler = audioM.getGuildMusicManager().scheduler; scheduler.setAutoFlow(true); return new ResponseEntity<>(new CommandResponseData(data.command,"ok"), HttpStatus.OK); diff --git a/src/main/java/net/Broken/RestApi/Commands/Connect.java b/src/main/java/net/Broken/RestApi/Commands/Connect.java index d581d78..8db6fb0 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Connect.java +++ b/src/main/java/net/Broken/RestApi/Commands/Connect.java @@ -5,6 +5,7 @@ import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.entities.VoiceChannel; import org.springframework.http.HttpStatus; @@ -15,21 +16,21 @@ import org.springframework.http.ResponseEntity; */ public class Connect implements CommandInterface{ @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - AudioM audioM = AudioM.getInstance(null); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM audioM = AudioM.getInstance(guild); if(data.chanelId == null) return new ResponseEntity<>(new CommandResponseData(data.command,"Missing chanelId"),HttpStatus.BAD_REQUEST); VoiceChannel voiceChannel = null; try{ - voiceChannel = audioM.getGuild().getVoiceChannelById(data.chanelId); + voiceChannel = guild.getVoiceChannelById(data.chanelId); }catch (NumberFormatException ignored){} if(voiceChannel == null){ return new ResponseEntity<>(new CommandResponseData(data.command,"Channel Not found"), HttpStatus.BAD_REQUEST); } - audioM.getGuildAudioPlayer(musicCommande.getAudioManager().getGuild()); - audioM.getGuild().getAudioManager().openAudioConnection(audioM.getGuild().getVoiceChannelById(data.chanelId)); + audioM.getGuildAudioPlayer(); + guild.getAudioManager().openAudioConnection(guild.getVoiceChannelById(data.chanelId)); audioM.setPlayedChanel(voiceChannel); return new ResponseEntity<>(new CommandResponseData(data.command,"Accepted"),HttpStatus.OK); } diff --git a/src/main/java/net/Broken/RestApi/Commands/Dell.java b/src/main/java/net/Broken/RestApi/Commands/Dell.java index 553d879..1c232bb 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Dell.java +++ b/src/main/java/net/Broken/RestApi/Commands/Dell.java @@ -1,11 +1,12 @@ package net.Broken.RestApi.Commands; import net.Broken.Commands.Music; +import net.Broken.MainBot; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,9 +16,9 @@ import org.springframework.http.ResponseEntity; */ public class Dell implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { + public ResponseEntity action(CommandPostData data, User user, Guild guild) { if(data.url != null) { - if(musicCommande.getAudioManager().getGuildMusicManager().scheduler.remove(data.url)){ + if(AudioM.getInstance(guild).getGuildMusicManager().scheduler.remove(data.url)){ return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } else diff --git a/src/main/java/net/Broken/RestApi/Commands/Disconnect.java b/src/main/java/net/Broken/RestApi/Commands/Disconnect.java index 0b31493..6838f41 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Disconnect.java +++ b/src/main/java/net/Broken/RestApi/Commands/Disconnect.java @@ -5,7 +5,8 @@ import net.Broken.MainBot; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; -import net.Broken.audio.WebLoadUtils; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,9 +16,8 @@ import org.springframework.http.ResponseEntity; */ public class Disconnect implements CommandInterface{ @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - Music music = (Music) MainBot.commandes.get("music"); - music.audio.stop(); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM.getInstance(guild).stop(); return new ResponseEntity<>(new CommandResponseData(data.command,"Ok"), HttpStatus.OK); } diff --git a/src/main/java/net/Broken/RestApi/Commands/Flush.java b/src/main/java/net/Broken/RestApi/Commands/Flush.java index 0982661..fc4d038 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Flush.java +++ b/src/main/java/net/Broken/RestApi/Commands/Flush.java @@ -4,8 +4,8 @@ import net.Broken.Commands.Music; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,8 +15,8 @@ import org.springframework.http.ResponseEntity; */ public class Flush implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.flush(); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM.getInstance(guild).getGuildMusicManager().scheduler.flush(); return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Next.java b/src/main/java/net/Broken/RestApi/Commands/Next.java index 6b2776e..5f3031e 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Next.java +++ b/src/main/java/net/Broken/RestApi/Commands/Next.java @@ -4,8 +4,8 @@ import net.Broken.Commands.Music; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,8 +15,8 @@ import org.springframework.http.ResponseEntity; */ public class Next implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.nextTrack(); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM.getInstance(guild).getGuildMusicManager().scheduler.nextTrack(); return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Pause.java b/src/main/java/net/Broken/RestApi/Commands/Pause.java index ef43cd8..3e392d5 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Pause.java +++ b/src/main/java/net/Broken/RestApi/Commands/Pause.java @@ -4,8 +4,8 @@ import net.Broken.Commands.Music; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,8 +15,8 @@ import org.springframework.http.ResponseEntity; */ public class Pause implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.pause(); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM.getInstance(guild).getGuildMusicManager().scheduler.pause(); return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Play.java b/src/main/java/net/Broken/RestApi/Commands/Play.java index cc8b06e..afcc994 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Play.java +++ b/src/main/java/net/Broken/RestApi/Commands/Play.java @@ -4,8 +4,8 @@ import net.Broken.Commands.Music; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,8 +15,8 @@ import org.springframework.http.ResponseEntity; */ public class Play implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - musicCommande.getAudioManager().getGuildMusicManager().scheduler.resume(); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM.getInstance(guild).getGuildMusicManager().scheduler.resume(); return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } } diff --git a/src/main/java/net/Broken/RestApi/Commands/Stop.java b/src/main/java/net/Broken/RestApi/Commands/Stop.java index 576e26a..79a9af1 100644 --- a/src/main/java/net/Broken/RestApi/Commands/Stop.java +++ b/src/main/java/net/Broken/RestApi/Commands/Stop.java @@ -4,6 +4,8 @@ import net.Broken.Commands.Music; import net.Broken.RestApi.CommandInterface; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; +import net.Broken.audio.AudioM; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import org.springframework.http.HttpStatus; @@ -14,8 +16,8 @@ import org.springframework.http.ResponseEntity; */ public class Stop implements CommandInterface { @Override - public ResponseEntity action(Music musicCommande, CommandPostData data, User user) { - musicCommande.getAudioManager().stop((MessageReceivedEvent) null); + public ResponseEntity action(CommandPostData data, User user, Guild guild) { + AudioM.getInstance(guild).stop(null); return new ResponseEntity<>(new CommandResponseData(data.command, "Accepted"), HttpStatus.OK); } diff --git a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java index a2ffd6f..2179ba4 100644 --- a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java +++ b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java @@ -9,19 +9,16 @@ import net.Broken.MainBot; import net.Broken.RestApi.Data.*; import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException; import net.Broken.Tools.UserManager.UserUtils; +import net.Broken.audio.AudioM; import net.Broken.audio.FindGeneral; -import net.Broken.audio.NotConnectedException; -import net.Broken.audio.NullMusicManager; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.VoiceChannel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; @@ -42,44 +39,66 @@ public class MusicWebAPIController { @RequestMapping("/currentMusicInfo") - public CurrentMusicData getCurrentM(){ + public ResponseEntity getCurrentM(@RequestParam(value = "guild") String guildId){ + Guild guild = MainBot.jda.getGuildById(guildId); + if(guild == null ){ + logger.warn("Request whit no guild!"); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + else{ + logger.info("currentMusicInfo for " + guild.getName()); + } + Music musicCommande = (Music) MainBot.commandes.get("music"); - if(musicCommande.audio.getGuild().getAudioManager().isConnected()){ - AudioPlayer player = musicCommande.audio.getGuildMusicManager().player; + if(guild.getAudioManager().isConnected()){ + AudioPlayer player = AudioM.getInstance(guild).getGuildMusicManager().player; AudioTrack currentTrack = player.getPlayingTrack(); if(currentTrack == null) { - return new CurrentMusicData(null,0, "STOP",false, musicCommande.audio.getGuildMusicManager().scheduler.isAutoFlow()); + return new ResponseEntity<>(new CurrentMusicData(null,0, "STOP",false, AudioM.getInstance(guild).getGuildMusicManager().scheduler.isAutoFlow()),HttpStatus.OK); } - UserAudioTrackData uat = new UserAudioTrackData(musicCommande.audio.getGuildMusicManager().scheduler.getCurrentPlayingTrack()); - return new CurrentMusicData(uat, currentTrack.getPosition(), currentTrack.getState().toString(), player.isPaused(), musicCommande.audio.getGuildMusicManager().scheduler.isAutoFlow()); + UserAudioTrackData uat = new UserAudioTrackData(AudioM.getInstance(guild).getGuildMusicManager().scheduler.getCurrentPlayingTrack()); + return new ResponseEntity<>(new CurrentMusicData(uat, currentTrack.getPosition(), currentTrack.getState().toString(), player.isPaused(), AudioM.getInstance(guild).getGuildMusicManager().scheduler.isAutoFlow()),HttpStatus.OK); }else { - return new CurrentMusicData(null,0, "DISCONNECTED",false, false); + return new ResponseEntity<>(new CurrentMusicData(null,0, "DISCONNECTED",false, false),HttpStatus.OK); } } @RequestMapping("/getPlaylist") - public PlaylistData getPlaylist(){ - Music musicCommande = (Music) MainBot.commandes.get("music"); + public ResponseEntity getPlaylist(@RequestParam(value = "guild") String guildId){ + Guild guild = MainBot.jda.getGuildById(guildId); + if(guild == null ){ + logger.warn("Request whit no guild!"); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + else{ + logger.info("getPlaylist for " + guild.getName()); + } + List list = null; - list = musicCommande.getAudioManager().getGuildMusicManager().scheduler.getList(); - return new PlaylistData(list); + list = AudioM.getInstance(guild).getGuildMusicManager().scheduler.getList(); + return new ResponseEntity<>(new PlaylistData(list), HttpStatus.OK); } @RequestMapping(value = "/command", method = RequestMethod.POST) - public ResponseEntity command(@RequestBody CommandPostData data, HttpServletRequest request){ + public ResponseEntity command(@RequestBody CommandPostData data, HttpServletRequest request, @RequestParam(value = "guild") String guildId){ if(data.command != null) { if(data.token != null) { + Guild guild = MainBot.jda.getGuildById(guildId); + if(guild == null ){ + logger.warn("Request whit no guild!"); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + try { UserEntity user = userUtils.getUserWithApiToken(userRepository, data.token); - logger.info("receive command " + data.command + " from " + request.getRemoteAddr() + " USER: " + user.getName()); - Music musicCommande = (Music) MainBot.commandes.get("music"); + logger.info("Receive command " + data.command + " from " + request.getRemoteAddr() + " USER: " + user.getName() + "GUILD: " + guild.getName()); if (ApiCommandLoader.apiCommands.containsKey(data.command)) - return ApiCommandLoader.apiCommands.get(data.command).action(musicCommande, data, MainBot.jda.getUserById(user.getJdaId())); + return ApiCommandLoader.apiCommands.get(data.command).action(data, MainBot.jda.getUserById(user.getJdaId()), guild); else return new ResponseEntity<>(new CommandResponseData(data.command, "Unknown Command", "command"), HttpStatus.BAD_REQUEST); @@ -102,12 +121,20 @@ public class MusicWebAPIController { } @RequestMapping(value = "/getChanel", method = RequestMethod.GET) - public List getChanel(){ + public ResponseEntity> getChanel(@RequestParam(value = "guild") String guildId){ + Guild guild = MainBot.jda.getGuildById(guildId); + if(guild == null ){ + logger.warn("Request whit no guild!"); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + else{ + logger.info("getPlaylist for " + guild.getName()); + } List temp = new ArrayList<>(); - for(VoiceChannel aChanel : FindGeneral.find(MainBot.jda.getGuilds().get(0)).getVoiceChannels()){ + for(VoiceChannel aChanel : FindGeneral.find(guild).getVoiceChannels()){ temp.add(new ChanelData(aChanel.getName(),aChanel.getId(),aChanel.getPosition())); } - return temp; + return new ResponseEntity<>(temp, HttpStatus.OK); } diff --git a/src/main/java/net/Broken/audio/AudioM.java b/src/main/java/net/Broken/audio/AudioM.java index 0545209..4e145b4 100644 --- a/src/main/java/net/Broken/audio/AudioM.java +++ b/src/main/java/net/Broken/audio/AudioM.java @@ -22,6 +22,7 @@ import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; public class AudioM { @@ -52,14 +53,14 @@ public class AudioM { private Guild guild; private Logger logger = LogManager.getLogger(); - private static AudioM INSTANCE; + private static HashMap INSTANCES = new HashMap<>(); public static AudioM getInstance(Guild guild){ - if(INSTANCE == null){ - INSTANCE = new AudioM(guild); + if(!INSTANCES.containsKey(guild)){ + INSTANCES.put(guild, new AudioM(guild)); } - return INSTANCE; + return INSTANCES.get(guild); } @@ -80,7 +81,7 @@ public class AudioM { * @param onHead True for adding audio track on top of playlist */ public void loadAndPlay(MessageReceivedEvent event, VoiceChannel voiceChannel, final String trackUrl, int playlistLimit, boolean onHead) { - GuildMusicManager musicManager = getGuildAudioPlayer(guild); + GuildMusicManager musicManager = getGuildAudioPlayer(); playedChanel = voiceChannel; playerManager.loadItemOrdered(musicManager, trackUrl, new AudioLoadResultHandler() { @@ -187,9 +188,9 @@ public class AudioM { } - public GuildMusicManager getGuildAudioPlayer(Guild guild) { + public GuildMusicManager getGuildAudioPlayer() { if (musicManager == null) { - musicManager = new GuildMusicManager(playerManager); + musicManager = new GuildMusicManager(playerManager, guild); } guild.getAudioManager().setSendingHandler(musicManager.getSendHandler()); @@ -219,7 +220,7 @@ public class AudioM { * @param event */ public void skipTrack(MessageReceivedEvent event) { - GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); + GuildMusicManager musicManager = getGuildAudioPlayer(); musicManager.scheduler.nextTrack(); Message message = event.getTextChannel().sendMessage(EmbedMessageUtils.getMusicOk("Musique suivante!")).complete(); new MessageTimeOut(MainBot.messageTimeOut, message, event.getMessage()).start(); @@ -230,7 +231,7 @@ public class AudioM { * @param event */ public void pause(MessageReceivedEvent event) { - GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); + GuildMusicManager musicManager = getGuildAudioPlayer(); musicManager.scheduler.pause(); Message message = event.getTextChannel().sendMessage(EmbedMessageUtils.getMusicOk("Musique en pause !")).complete(); @@ -243,7 +244,7 @@ public class AudioM { * @param event */ public void resume (MessageReceivedEvent event) { - GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); + GuildMusicManager musicManager = getGuildAudioPlayer(); musicManager.scheduler.resume(); Message message = event.getTextChannel().sendMessage(EmbedMessageUtils.getMusicOk("Reprise de la piste en cour !")).complete(); @@ -255,7 +256,7 @@ public class AudioM { * @param event */ public void info(MessageReceivedEvent event) { - GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); + GuildMusicManager musicManager = getGuildAudioPlayer(); AudioTrackInfo info = musicManager.scheduler.getInfo(); UserAudioTrack userAudioTrack = musicManager.scheduler.getCurrentPlayingTrack(); @@ -264,7 +265,7 @@ public class AudioM { } public void flush(MessageReceivedEvent event){ - GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); + GuildMusicManager musicManager = getGuildAudioPlayer(); musicManager.scheduler.flush(); Message message = event.getTextChannel().sendMessage(EmbedMessageUtils.getMusicOk("RAZ de la playlist!")).complete(); new MessageTimeOut(MainBot.messageTimeOut, event.getMessage(), message).start(); @@ -275,7 +276,7 @@ public class AudioM { * @param event */ public void list(MessageReceivedEvent event){ - GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); + GuildMusicManager musicManager = getGuildAudioPlayer(); List list = musicManager.scheduler.getList(); StringBuilder resp = new StringBuilder(); if(list.size() == 0){ @@ -330,7 +331,7 @@ public class AudioM { */ public void stop () { - GuildMusicManager musicManager = getGuildAudioPlayer(guild); + GuildMusicManager musicManager = getGuildAudioPlayer(); musicManager.scheduler.stop(); musicManager.scheduler.flush(); playedChanel = null; @@ -339,8 +340,9 @@ public class AudioM { public GuildMusicManager getGuildMusicManager(){ if( musicManager == null) - musicManager = getGuildAudioPlayer(guild); + musicManager = getGuildAudioPlayer(); return musicManager; + } public Guild getGuild() { diff --git a/src/main/java/net/Broken/audio/GuildMusicManager.java b/src/main/java/net/Broken/audio/GuildMusicManager.java index 41ca494..0207fa0 100644 --- a/src/main/java/net/Broken/audio/GuildMusicManager.java +++ b/src/main/java/net/Broken/audio/GuildMusicManager.java @@ -2,6 +2,7 @@ package net.Broken.audio; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; +import net.dv8tion.jda.core.entities.Guild; /** * Holder for both the player and a track scheduler for one guild. @@ -16,14 +17,17 @@ public class GuildMusicManager { */ public final TrackScheduler scheduler; + public final Guild guild; + /** * Creates a player and a track scheduler. * @param manager Audio player manager to use for creating the player. */ - public GuildMusicManager(AudioPlayerManager manager) { + public GuildMusicManager(AudioPlayerManager manager, Guild guild) { player = manager.createPlayer(); - scheduler = new TrackScheduler(player); + scheduler = new TrackScheduler(player, guild); player.addListener(scheduler); + this.guild = guild; } /** diff --git a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java index a70b713..9eeed74 100644 --- a/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java +++ b/src/main/java/net/Broken/audio/Playlist/PlaylistManager.java @@ -7,7 +7,6 @@ import net.Broken.DB.Repository.PlaylistRepository; import net.Broken.DB.Repository.TrackRepository; import net.Broken.DB.Repository.UserRepository; import net.Broken.MainBot; -import net.Broken.RestApi.Data.CommandResponseData; import net.Broken.RestApi.Data.Playlist.AddToPlaylistData; import net.Broken.RestApi.Data.Playlist.DeleteTrackData; import net.Broken.RestApi.Data.Playlist.MoveTrackData; @@ -23,7 +22,6 @@ import org.apache.logging.log4j.Logger; import org.springframework.context.ApplicationContext; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import sun.applet.Main; import java.util.List; @@ -68,7 +66,7 @@ public class PlaylistManager { User jdaUser = MainBot.jda.getUserById(user.getJdaId()); - WebLoadUtils webLoadUtils = new WebLoadUtils(data, jdaUser, false); + WebLoadUtils webLoadUtils = new WebLoadUtils(data, jdaUser, MainBot.jda.getGuilds().get(0) , false); webLoadUtils.getResponse(); if(webLoadUtils.userAudioTrack == null){ diff --git a/src/main/java/net/Broken/audio/TrackScheduler.java b/src/main/java/net/Broken/audio/TrackScheduler.java index 72e0069..a2bbe88 100644 --- a/src/main/java/net/Broken/audio/TrackScheduler.java +++ b/src/main/java/net/Broken/audio/TrackScheduler.java @@ -9,6 +9,7 @@ import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; import net.Broken.MainBot; import net.Broken.RestApi.Data.UserAudioTrackData; import net.Broken.audio.Youtube.YoutubeTools; +import net.dv8tion.jda.core.entities.Guild; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -23,19 +24,22 @@ import java.util.concurrent.LinkedBlockingDeque; public class TrackScheduler extends AudioEventAdapter { private final AudioPlayer player; private final BlockingDeque queue; + private final Guild guild; + private UserAudioTrack currentPlayingTrack; private boolean autoFlow = false; private ArrayList history = new ArrayList<>(); - Logger logger = LogManager.getLogger(); + private Logger logger = LogManager.getLogger(); /** * @param player The audio player this scheduler uses */ - public TrackScheduler(AudioPlayer player) { + public TrackScheduler(AudioPlayer player, Guild guild) { this.player = player; player.setVolume(25); this.queue = new LinkedBlockingDeque<>(); this.currentPlayingTrack = null; + this.guild = guild; } /** @@ -177,8 +181,8 @@ public class TrackScheduler extends AudioEventAdapter { private void needAutoPlay(){ if((queue.size() < 1) && autoFlow && currentPlayingTrack != null){ logger.debug("Auto add needed!"); - AudioM audioM = AudioM.getInstance(null); - YoutubeTools youtubeTools = YoutubeTools.getInstance(null); + AudioM audioM = AudioM.getInstance(guild); + YoutubeTools youtubeTools = YoutubeTools.getInstance(); try { String id = youtubeTools.getRelatedVideo(currentPlayingTrack.getAudioTrack().getInfo().identifier, history); logger.debug("Related id: "+id); diff --git a/src/main/java/net/Broken/audio/WebLoadUtils.java b/src/main/java/net/Broken/audio/WebLoadUtils.java index 43f89ca..e52c6d8 100644 --- a/src/main/java/net/Broken/audio/WebLoadUtils.java +++ b/src/main/java/net/Broken/audio/WebLoadUtils.java @@ -7,6 +7,7 @@ import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import net.Broken.RestApi.Data.CommandPostData; import net.Broken.RestApi.Data.CommandResponseData; +import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.User; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -25,13 +26,14 @@ public class WebLoadUtils { * Submit a track or playlist to Music bot * @param data Received data from API * @param user User who submit the track + * @param guild */ - public WebLoadUtils(CommandPostData data, User user, boolean submit){ - AudioPlayerManager playerM = AudioM.getInstance(null).getPlayerManager(); + public WebLoadUtils(CommandPostData data, User user, Guild guild, boolean submit){ + AudioPlayerManager playerM = AudioM.getInstance(guild).getPlayerManager(); try { - AudioM audioM = AudioM.getInstance(null); + AudioM audioM = AudioM.getInstance(guild); playerM.loadItemOrdered(audioM.getGuildMusicManager(), data.url, new AudioLoadResultHandler() { @Override public void trackLoaded(AudioTrack track) { diff --git a/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java b/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java index 27dee1d..4d52a61 100644 --- a/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java +++ b/src/main/java/net/Broken/audio/Youtube/YoutubeTools.java @@ -20,18 +20,16 @@ public class YoutubeTools { private Logger logger = LogManager.getLogger(); - private Guild guild; private static YoutubeTools INSTANCE ; - private YoutubeTools(Guild guild){ + private YoutubeTools(){ - this.guild = guild; } - public static YoutubeTools getInstance(Guild guild){ + public static YoutubeTools getInstance(){ if(INSTANCE == null) - INSTANCE = new YoutubeTools(guild); + INSTANCE = new YoutubeTools(); return INSTANCE; } From cd511e5eeab0d030bf31ac800ed66cbdfa2bf632 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 26 Apr 2018 11:24:48 +0200 Subject: [PATCH 10/26] Multi guild change --- src/main/java/net/Broken/BotListener.java | 5 +++-- src/main/java/net/Broken/Commands/Help.java | 2 +- src/main/java/net/Broken/MainBot.java | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/Broken/BotListener.java b/src/main/java/net/Broken/BotListener.java index 23c3ae1..89cd598 100644 --- a/src/main/java/net/Broken/BotListener.java +++ b/src/main/java/net/Broken/BotListener.java @@ -42,8 +42,9 @@ public class BotListener extends ListenerAdapter { @Override public void onGuildMemberJoin(GuildMemberJoinEvent event) { logger.info(event.getUser().getName()+ "join the guild, move it!"); - new Move().exc(event.getMember(),event.getJDA().getRolesByName("Newbies",true),false,event.getJDA().getGuilds().get(0),event.getJDA().getGuilds().get(0).getManager()); + new Move().exc(event.getMember(),event.getJDA().getRolesByName("Newbies",true),false,event.getGuild(),event.getGuild().getManager()); TextChannel chanel = event.getGuild().getTextChannelsByName("accueil", true).get(0); + if(chanel != null) chanel.sendMessage("Salut "+event.getUser().getAsMention()+"! Ecris ton nom, prénom, ta promotion et ton groupe ici! Un admin te donnera accées a ton groupe!").complete(); MainBot.roleFlag = false; } @@ -55,7 +56,7 @@ public class BotListener extends ListenerAdapter { if(event.getMember().getRoles().size() == 0){ logger.info(event.getUser().getName()+ "have no roles, move it!"); - new Move().exc(event.getMember(),event.getJDA().getRolesByName("Populace",true),false,event.getJDA().getGuilds().get(0),event.getJDA().getGuilds().get(0).getManager()); + new Move().exc(event.getMember(),event.getGuild().getRolesByName("Populace",true),false,event.getGuild(),event.getGuild().getManager()); MainBot.roleFlag = false; } } diff --git a/src/main/java/net/Broken/Commands/Help.java b/src/main/java/net/Broken/Commands/Help.java index fe93065..8f5b2cb 100644 --- a/src/main/java/net/Broken/Commands/Help.java +++ b/src/main/java/net/Broken/Commands/Help.java @@ -120,7 +120,7 @@ public class Help implements Commande { boolean isAdmin; if(event.isFromType(ChannelType.PRIVATE)) - isAdmin = event.getJDA().getGuilds().get(0).getMember(event.getAuthor()).hasPermission(Permission.ADMINISTRATOR); + isAdmin = event.getGuild().getMember(event.getAuthor()).hasPermission(Permission.ADMINISTRATOR); else isAdmin = event.getMember().hasPermission(Permission.ADMINISTRATOR); diff --git a/src/main/java/net/Broken/MainBot.java b/src/main/java/net/Broken/MainBot.java index 1f096bf..181582e 100644 --- a/src/main/java/net/Broken/MainBot.java +++ b/src/main/java/net/Broken/MainBot.java @@ -111,7 +111,7 @@ public class MainBot { Commande cmdObj = commandes.get(cmd.commande); boolean isAdmin; if(cmd.event.isFromType(ChannelType.PRIVATE)){ - isAdmin = jda.getGuilds().get(0).getMember(cmd.event.getAuthor()).hasPermission(Permission.ADMINISTRATOR); + isAdmin = cmd.event.getGuild().getMember(cmd.event.getAuthor()).hasPermission(Permission.ADMINISTRATOR); } else isAdmin = cmd.event.getMember().hasPermission(Permission.ADMINISTRATOR); From 8d33c41847866f132258fadb997471449356d1c7 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 26 Apr 2018 12:01:47 +0200 Subject: [PATCH 11/26] Adding get guilds --- .../RestApi/Data/UserManager/GuildInfo.java | 11 +++++ .../Broken/RestApi/MusicWebAPIController.java | 7 ++-- .../RestApi/UserManagerAPIController.java | 42 +++++++++++++------ 3 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 src/main/java/net/Broken/RestApi/Data/UserManager/GuildInfo.java diff --git a/src/main/java/net/Broken/RestApi/Data/UserManager/GuildInfo.java b/src/main/java/net/Broken/RestApi/Data/UserManager/GuildInfo.java new file mode 100644 index 0000000..cc0f7ad --- /dev/null +++ b/src/main/java/net/Broken/RestApi/Data/UserManager/GuildInfo.java @@ -0,0 +1,11 @@ +package net.Broken.RestApi.Data.UserManager; + +public class GuildInfo { + public String name; + public String id; + + public GuildInfo(String name, String id) { + this.name = name; + this.id = id; + } +} diff --git a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java index 2179ba4..5ba423f 100644 --- a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java +++ b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java @@ -46,7 +46,7 @@ public class MusicWebAPIController { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } else{ - logger.info("currentMusicInfo for " + guild.getName()); + logger.trace("currentMusicInfo for " + guild.getName()); } Music musicCommande = (Music) MainBot.commandes.get("music"); @@ -74,7 +74,7 @@ public class MusicWebAPIController { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } else{ - logger.info("getPlaylist for " + guild.getName()); + logger.trace("getPlaylist for " + guild.getName()); } List list = null; @@ -82,6 +82,7 @@ public class MusicWebAPIController { return new ResponseEntity<>(new PlaylistData(list), HttpStatus.OK); } +// TODO change token to cookie @RequestMapping(value = "/command", method = RequestMethod.POST) public ResponseEntity command(@RequestBody CommandPostData data, HttpServletRequest request, @RequestParam(value = "guild") String guildId){ @@ -128,7 +129,7 @@ public class MusicWebAPIController { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } else{ - logger.info("getPlaylist for " + guild.getName()); + logger.trace("getPlaylist for " + guild.getName()); } List temp = new ArrayList<>(); for(VoiceChannel aChanel : FindGeneral.find(guild).getVoiceChannels()){ diff --git a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java index d0b79f7..8d66a17 100644 --- a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java +++ b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java @@ -4,25 +4,22 @@ import net.Broken.DB.Entity.PendingUserEntity; import net.Broken.DB.Entity.UserEntity; import net.Broken.DB.Repository.PendingUserRepository; import net.Broken.DB.Repository.UserRepository; -import net.Broken.RestApi.Data.UserManager.CheckResposeData; -import net.Broken.RestApi.Data.UserManager.ConfirmData; -import net.Broken.RestApi.Data.UserManager.UserConnectionData; -import net.Broken.RestApi.Data.UserManager.UserInfoData; -import net.Broken.Tools.UserManager.Exceptions.PasswordNotMatchException; -import net.Broken.Tools.UserManager.Exceptions.TokenNotMatch; -import net.Broken.Tools.UserManager.Exceptions.UserAlreadyRegistered; -import net.Broken.Tools.UserManager.Exceptions.UserNotFoundException; +import net.Broken.MainBot; +import net.Broken.RestApi.Data.UserManager.*; +import net.Broken.Tools.UserManager.Exceptions.*; import net.Broken.Tools.UserManager.UserUtils; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.User; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; /** @@ -97,5 +94,26 @@ public class UserManagerAPIController { } } + @RequestMapping(value = "/getGuilds", method = RequestMethod.GET) + public ResponseEntity> getGuilds(@CookieValue("token") String token){ + logger.debug(token); + try { + UserEntity userE = userUtils.getUserWithApiToken(userRepository, token); + User user = MainBot.jda.getUserById(userE.getJdaId()); + List temp = new ArrayList<>(); + + for (Guild guild : user.getMutualGuilds()){ + temp.add(new GuildInfo(guild.getName(), guild.getId())); + } + return new ResponseEntity<>(temp, HttpStatus.OK); + + + } catch (UnknownTokenException e) { + logger.catching(e); + return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); + } + + } + } From b530f6411642cf4176f400ccfefb526f50400426 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 26 Apr 2018 14:41:14 +0200 Subject: [PATCH 12/26] Clean web --- .../RestApi/UserManagerAPIController.java | 1 - src/main/resources/templates/header.html | 110 ++++++++++++++ src/main/resources/templates/index.html | 102 +------------ src/main/resources/templates/music.html | 100 +------------ src/main/resources/templates/register.html | 100 +------------ .../resources/templates/youtubeCallBack.html | 139 ------------------ 6 files changed, 113 insertions(+), 439 deletions(-) create mode 100644 src/main/resources/templates/header.html delete mode 100644 src/main/resources/templates/youtubeCallBack.html diff --git a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java index 8d66a17..30cdd78 100644 --- a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java +++ b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java @@ -96,7 +96,6 @@ public class UserManagerAPIController { @RequestMapping(value = "/getGuilds", method = RequestMethod.GET) public ResponseEntity> getGuilds(@CookieValue("token") String token){ - logger.debug(token); try { UserEntity userE = userUtils.getUserWithApiToken(userRepository, token); User user = MainBot.jda.getUserById(userE.getJdaId()); diff --git a/src/main/resources/templates/header.html b/src/main/resources/templates/header.html new file mode 100644 index 0000000..42a0733 --- /dev/null +++ b/src/main/resources/templates/header.html @@ -0,0 +1,110 @@ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 8685477..1e1cbf3 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -16,107 +16,7 @@ - - - - - - - - - - - - - - - - - - - - - - +
...
diff --git a/src/main/resources/templates/music.html b/src/main/resources/templates/music.html index a1a5c3f..8a6eaeb 100644 --- a/src/main/resources/templates/music.html +++ b/src/main/resources/templates/music.html @@ -16,105 +16,7 @@ - - - - - - - - - - - - - - - - - - - - - - +
...
diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html index 216500f..fa5a50c 100644 --- a/src/main/resources/templates/register.html +++ b/src/main/resources/templates/register.html @@ -14,105 +14,7 @@ - - - - - - - - - - - - - - - - - - - - - - +
...
diff --git a/src/main/resources/templates/youtubeCallBack.html b/src/main/resources/templates/youtubeCallBack.html deleted file mode 100644 index c742384..0000000 --- a/src/main/resources/templates/youtubeCallBack.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - Music Control - Discord Bot - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-

-

-
-
-
- - - - - - - - - - From 0b535dd24e68015f8b0fc84ff23d3d25ede6d23a Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 26 Apr 2018 16:58:01 +0200 Subject: [PATCH 13/26] Add multiserver on web UI --- .../Commands/{ytTest.java => Test.java} | 2 +- .../Broken/RestApi/MusicWebAPIController.java | 2 +- src/main/resources/log4j2.xml | 2 +- src/main/resources/static/js/music.js | 87 ++++++++++--------- src/main/resources/static/js/navabar.js | 60 ++++++++++++- src/main/resources/templates/header.html | 51 +++++++++-- src/main/resources/templates/index.html | 10 ++- src/main/resources/templates/music.html | 2 + 8 files changed, 161 insertions(+), 55 deletions(-) rename src/main/java/net/Broken/Commands/{ytTest.java => Test.java} (87%) diff --git a/src/main/java/net/Broken/Commands/ytTest.java b/src/main/java/net/Broken/Commands/Test.java similarity index 87% rename from src/main/java/net/Broken/Commands/ytTest.java rename to src/main/java/net/Broken/Commands/Test.java index 23c3eaa..46a38a3 100644 --- a/src/main/java/net/Broken/Commands/ytTest.java +++ b/src/main/java/net/Broken/Commands/Test.java @@ -13,7 +13,7 @@ import java.io.IOException; public class ytTest implements Commande { @Override public void action(String[] args, MessageReceivedEvent event) { - event.getJDA().getPresence().setPresence(RichPresence.listening("Noting"),false); + event.getJDA().getPresence().setPresence(RichPresence.playing("test").asRichPresence(),false); } @Override diff --git a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java index 5ba423f..3cf6c9e 100644 --- a/src/main/java/net/Broken/RestApi/MusicWebAPIController.java +++ b/src/main/java/net/Broken/RestApi/MusicWebAPIController.java @@ -96,7 +96,7 @@ public class MusicWebAPIController { try { UserEntity user = userUtils.getUserWithApiToken(userRepository, data.token); - logger.info("Receive command " + data.command + " from " + request.getRemoteAddr() + " USER: " + user.getName() + "GUILD: " + guild.getName()); + logger.info("Receive command " + data.command + " from " + request.getRemoteAddr() + " USER: " + user.getName() + " GUILD: " + guild.getName()); if (ApiCommandLoader.apiCommands.containsKey(data.command)) return ApiCommandLoader.apiCommands.get(data.command).action(data, MainBot.jda.getUserById(user.getJdaId()), guild); diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 36cd124..7b81aed 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -25,7 +25,7 @@ - + diff --git a/src/main/resources/static/js/music.js b/src/main/resources/static/js/music.js index 2846513..5600d45 100644 --- a/src/main/resources/static/js/music.js +++ b/src/main/resources/static/js/music.js @@ -12,56 +12,59 @@ var btn_flush; var btn_add; var switchAutoFlow; var loadingFlag = false; +var guild; $(document).ready(function() { + if(Cookies.get('guild') != undefined) { - btn_play = $('#btn_play'); - btn_stop = $('#btn_stop'); - btn_next = $('#btn_next'); - btn_info = $('#btn_info'); - btn_disconnect = $('#btn_disconnect'); - btn_flush = $('#flush_btn'); - btn_add = $('#add_btn'); - switchAutoFlow = $("#autoflow"); + guild = Cookies.get('guild') + btn_play = $('#btn_play'); + btn_stop = $('#btn_stop'); + btn_next = $('#btn_next'); + btn_info = $('#btn_info'); + btn_disconnect = $('#btn_disconnect'); + btn_flush = $('#flush_btn'); + btn_add = $('#add_btn'); + switchAutoFlow = $("#autoflow"); - setInterval("getCurentMusic()",1000); - $('#modalAdd').modal(); - - $('#modal_current_info').modal(); + setInterval("getCurentMusic()", 1000); + $('#modalAdd').modal(); - $('#modalChanels').modal({ - dismissible: false // Modal can be dismissed by clicking outside of the modal - }); - - modal_loading = $('#modal_loading'); - modal_loading.modal({ - dismissible: false - }); - - $('.button-collapse-1').sideNav({ - menuWidth: 400, // Default is 300 - edge: 'right', // Choose the horizontal origin - closeOnClick: false, // Closes side-nav on clicks, useful for Angular/Meteor - draggable: true // Choose whether you can drag to open on touch screens, - }); + $('#modal_current_info').modal(); - $('.dropdown-button').dropdown({ - inDuration: 300, - outDuration: 225, - constrainWidth: false, // Does not change width of dropdown to that of the activator - hover: false, // Activate on hover - gutter: 0, // Spacing from edge - belowOrigin: false, // Displays dropdown below the button - alignment: 'left', // Displays dropdown with edge aligned to the left of button - stopPropagation: false // Stops event propagation - }); + $('#modalChanels').modal({ + dismissible: false // Modal can be dismissed by clicking outside of the modal + }); - listeners(); + modal_loading = $('#modal_loading'); + modal_loading.modal({ + dismissible: false + }); + $('.button-collapse-1').sideNav({ + menuWidth: 400, // Default is 300 + edge: 'right', // Choose the horizontal origin + closeOnClick: false, // Closes side-nav on clicks, useful for Angular/Meteor + draggable: true // Choose whether you can drag to open on touch screens, + }); + + $('.dropdown-button').dropdown({ + inDuration: 300, + outDuration: 225, + constrainWidth: false, // Does not change width of dropdown to that of the activator + hover: false, // Activate on hover + gutter: 0, // Spacing from edge + belowOrigin: false, // Displays dropdown below the button + alignment: 'left', // Displays dropdown with edge aligned to the left of button + stopPropagation: false // Stops event propagation + }); + + listeners(); + } }); function getCurentMusic() { - $.get("api/music/currentMusicInfo", function (data) { + $.get("api/music/currentMusicInfo?guild=" + guild, function (data) { }).done(function (data) { state = data.state; @@ -176,7 +179,7 @@ function getCurentMusic() { } function getPlayList() { - $.get("api/music/getPlaylist", function (data) { + $.get("api/music/getPlaylist?guild=" + guild, function (data) { }).done(function (data) { data = data.list; if(data != null && data.length != 0){ @@ -237,7 +240,7 @@ function getPlayList() { } function getChannels(){ - $.get("api/music/getChanel", function (data) { + $.get("api/music/getChanel?guild=" + guild, function (data) { }).done(function (data) { console.log(data); $('#channelForm').empty(); @@ -319,7 +322,7 @@ function sendCommand(command){ type: "POST", dataType: 'json', contentType: 'application/json', - url: "/api/music/command", + url: "/api/music/command?guild=" + guild, data: JSON.stringify(command), success: function (data) { console.log(data); diff --git a/src/main/resources/static/js/navabar.js b/src/main/resources/static/js/navabar.js index ed4ab69..fce6601 100644 --- a/src/main/resources/static/js/navabar.js +++ b/src/main/resources/static/js/navabar.js @@ -7,6 +7,7 @@ var btn_submit; var btn_disconnect; var nav_name; + $(document).ready(function() { $('.button-navbar-mobile').sideNav({ menuWidth: 400, // Default is 300 @@ -15,12 +16,16 @@ $(document).ready(function() { draggable: true // Choose whether you can drag to open on touch screens, }); + $('#modal_guild').modal({ + dismissible: false // Modal can be dismissed by clicking outside of the modal + }); + nav_bar_account_link = $("#nav-bar-account"); input_name = $("#user_input"); input_psw = $("#password_input"); btn_submit = $("#btn-submit-connect"); - btn_disconnect = $("#nav-disconnect"); + btn_disconnect = $(".nav-disconnect"); nav_name = $("#nav-name"); if(Cookies.get('token') === undefined){ @@ -61,6 +66,9 @@ function connected(){ } ); nav_name.text(Cookies.get('name')); + if(Cookies.get('guild') === undefined){ + getGuild() + } } function disconnected() { @@ -132,7 +140,57 @@ function navListeners() { btn_disconnect.click(function () { Cookies.remove('token'); Cookies.remove('name'); + Cookies.remove('guild'); location.reload(); }); + $('#guild_form').change(function () { + if ($('#btn_ok_guild').hasClass("disabled")) { + $('#btn_ok_guild').removeClass("disabled"); + } + }); + + $('#btn_ok_guild').click(function () { + guild = $('input[name=guildRadio]:checked').val(); + Cookies.set('guild', guild, { expires: 31 }); + location.reload(); + + }); + + $('.nav-change-guild').click(function () { + Cookies.remove('guild'); + location.reload(); + }) +} + +function getGuild(){ + $.get("api/userManagement/getGuilds", function (data) { + }).done(function (data) { + console.log(data); + $('#guild_form').empty(); + + if(data.length === 1){ + Cookies.set('guild', data.id, { expires: 31 }); + return; + } + data.forEach(function(element){ + var template = $('#radioTemplateGuild').clone(); + template.removeAttr("id"); + template.removeAttr("style"); + var content = template.html(); + content = content.replace("@name", element.name); + content = content.replace(/@id/g, element.id); + template.html(content); + + $('#guild_form').append(template); + }); + $('#modal_guild').modal('open'); + + }).fail(function (data) { + if(!error){ + alert("Com error, please refresh."); + error = true; + } + + }); } \ No newline at end of file diff --git a/src/main/resources/templates/header.html b/src/main/resources/templates/header.html index 42a0733..4905059 100644 --- a/src/main/resources/templates/header.html +++ b/src/main/resources/templates/header.html @@ -29,12 +29,25 @@ menu
@@ -43,9 +56,10 @@ @@ -100,6 +115,32 @@
+ + + + + + + + + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 1e1cbf3..f90621c 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -3,15 +3,15 @@ - Music Control - Discord Bot + Discord Bot - - + + @@ -22,7 +22,9 @@
- + diff --git a/src/main/resources/templates/music.html b/src/main/resources/templates/music.html index 8a6eaeb..e0967c0 100644 --- a/src/main/resources/templates/music.html +++ b/src/main/resources/templates/music.html @@ -201,7 +201,9 @@ From 59813fe37b79171ee09493c39342888cf841b71a Mon Sep 17 00:00:00 2001 From: Sebastien Date: Thu, 26 Apr 2018 17:32:38 +0200 Subject: [PATCH 14/26] Add multiserver to spam --- src/main/java/net/Broken/Commands/Spam.java | 30 ++++++------- .../java/net/Broken/Commands/SpamInfo.java | 35 ++++++++-------- src/main/java/net/Broken/Commands/Test.java | 2 +- src/main/java/net/Broken/MainBot.java | 7 ++-- .../RestApi/UserManagerAPIController.java | 1 - src/main/java/net/Broken/Tools/AntiSpam.java | 30 ++++++------- .../java/net/Broken/Tools/Moderateur.java | 26 ++++++------ .../java/net/Broken/audio/WebLoadUtils.java | 2 +- src/main/resources/static/error/404.html | 42 +++++++++++-------- src/main/resources/static/js/navabar.js | 6 ++- 10 files changed, 96 insertions(+), 85 deletions(-) diff --git a/src/main/java/net/Broken/Commands/Spam.java b/src/main/java/net/Broken/Commands/Spam.java index acd366a..fa6621d 100644 --- a/src/main/java/net/Broken/Commands/Spam.java +++ b/src/main/java/net/Broken/Commands/Spam.java @@ -25,7 +25,7 @@ import java.util.Objects; * Spam admin command */ public class Spam implements Commande { - Logger logger = LogManager.getLogger(); + private Logger logger = LogManager.getLogger(); @Override public void action(String[] args, MessageReceivedEvent event) @@ -97,7 +97,7 @@ public class Spam implements Commande { /**************************** * On recupere l'utilisateur et le role cible ****************************/ - List userL = event.getMessage().getMentionedUsers(); + List userL = event.getMessage().getMentionedMembers(); /**************************** @@ -114,14 +114,14 @@ public class Spam implements Commande { new MessageTimeOut(messages,MainBot.messageTimeOut).start(); } else { - Member user = serveur.getMember(userL.get(0)); + Member user = userL.get(0); logger.info("Tentative de pardon de " + user.getEffectiveName() + " par l'utilisateur " + event.getMember().getEffectiveName()); /**************************** * virif si en spammer * ****************************/ - if (MainBot.spamUtils.containsKey(user.getUser())) { - if (MainBot.spamUtils.get(user.getUser()).isOnSpam()) { - MainBot.spamUtils.get(user.getUser()).setOnSpam(false); + if (MainBot.spamUtils.containsKey(user)) { + if (MainBot.spamUtils.get(user).isOnSpam()) { + MainBot.spamUtils.get(user).setOnSpam(false); } else { logger.warn("Utilisateur pas en spam."); Message rest = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamError(":arrow_right: Utilisateur non spammeur.","pardon")).complete(); @@ -192,9 +192,9 @@ public class Spam implements Commande { /**************************** * virif pas deja en spammer * ****************************/ - if(MainBot.spamUtils.containsKey(user.getUser())) + if(MainBot.spamUtils.containsKey(user)) { - if(!MainBot.spamUtils.get(user.getUser()).isOnSpam()) + if(!MainBot.spamUtils.get(user).isOnSpam()) { this.goSpam(user,multiStr,serveur,event); } @@ -242,7 +242,7 @@ public class Spam implements Commande { /**************************** * On recupere l'utilisateur et le role cible ****************************/ - List userL = event.getMessage().getMentionedUsers(); + List userL = event.getMessage().getMentionedMembers(); /**************************** @@ -260,14 +260,14 @@ public class Spam implements Commande { } else { - Member user = serveur.getMember(userL.get(0)); + Member user = userL.get(0); logger.info("Tentative de reset de " + user.getEffectiveName() + " par l'utilisateur " + event.getMember().getEffectiveName()); /**************************** * verif utilisteur trouver * ****************************/ - if (MainBot.spamUtils.containsKey(user.getUser())) { + if (MainBot.spamUtils.containsKey(user)) { logger.info("Reset du multiplicateur de " + user.getEffectiveName() + " réussi"); Message rest = event.getTextChannel().sendMessage(event.getAuthor().getAsMention() + "\n *Le multiplcicateur de " + user.getEffectiveName() + " a été remit a zéro.*").complete(); List messages = new ArrayList(){{ @@ -275,7 +275,7 @@ public class Spam implements Commande { add(event.getMessage()); }}; new MessageTimeOut(messages,MainBot.messageTimeOut).start(); - MainBot.spamUtils.remove(user.getUser()); + MainBot.spamUtils.remove(user); } @@ -297,7 +297,7 @@ public class Spam implements Commande { if (args[0].equals("all")) { logger.info("Reset automatique des multiplicateur."); - for (User unUser: MainBot.spamUtils.keySet() ) //=for(int i=0; i())); - MainBot.spamUtils.get(user.getUser()).setMultip(multi); + MainBot.spamUtils.put(user,new UserSpamUtils(user,new ArrayList<>())); + MainBot.spamUtils.get(user).setMultip(multi); } new AntiSpam().extermine(user,serveur,serveur.getManager(),false,event); diff --git a/src/main/java/net/Broken/Commands/SpamInfo.java b/src/main/java/net/Broken/Commands/SpamInfo.java index 99b8134..48b067f 100644 --- a/src/main/java/net/Broken/Commands/SpamInfo.java +++ b/src/main/java/net/Broken/Commands/SpamInfo.java @@ -8,6 +8,7 @@ import net.Broken.Tools.PrivateMessage; import net.Broken.Tools.UserSpamUtils; import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; @@ -24,41 +25,41 @@ import java.util.concurrent.TimeUnit; * Spam Info Command */ public class SpamInfo implements Commande{ - private HashMap threadHashMap = new HashMap<>(); + private HashMap threadHashMap = new HashMap<>(); Logger logger = LogManager.getLogger(); @Override public void action(String[] args, MessageReceivedEvent event) { - User user; + Member user; if(event.getMessage().getMentionedUsers().size() == 0){ - user = event.getAuthor(); + user = event.getMember(); } else { - user = event.getMessage().getMentionedUsers().get(0); + user = event.getMessage().getMentionedMembers().get(0); } Message message = null; if(!MainBot.spamUtils.containsKey(user)){ if(!event.isFromType(ChannelType.PRIVATE)) - message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `1`\n\t- En spam: `Non`")).complete(); + message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getEffectiveName() + ":\n\t- Multiplicateur: `1`\n\t- En spam: `Non`")).complete(); else - PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `1`\n\t- En spam: `Non`"),logger); + PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+":\n\t- Multiplicateur: `1`\n\t- En spam: `Non`"),logger); } else{ UserSpamUtils util = MainBot.spamUtils.get(user); if(!util.isOnSpam()){ if(!event.isFromType(ChannelType.PRIVATE)) - message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`")).complete(); + message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`")).complete(); else - PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`"),logger); + PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`"),logger); } else{ if(!event.isFromType(ChannelType.PRIVATE)) - message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`")).complete(); + message = event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`")).complete(); else - message = PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`"),logger); + message = PrivateMessage.send(event.getAuthor(),EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`"),logger); } } if(message != null){ @@ -139,9 +140,9 @@ public class SpamInfo implements Commande{ public UserSpamUtils util; public boolean stop; private int oldValue; - private User user; + private Member user; - public MessageUpdater(Message message,Message command, UserSpamUtils util,User user) { + public MessageUpdater(Message message,Message command, UserSpamUtils util, Member user) { this.message = message; this.util = util; this.user = user; @@ -151,14 +152,14 @@ public class SpamInfo implements Commande{ @Override public void run() { - logger.debug("Start "+user.getName()+" theard!"); + logger.debug("Start "+user.getEffectiveName()+" theard!"); if(util != null){ oldValue = util.getTimeLeft(); while (util.getTimeLeft()!=0 && !stop && util.isOnSpam()){ try { Thread.sleep(500); if(util.getTimeLeft()%5 == 0 && oldValue - util.getTimeLeft() >= 5){ - message.editMessage(EmbedMessageUtils.getSpamInfo(user.getName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`")).complete(); + message.editMessage(EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+":\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Oui`\n\t- Temps restant: `"+formatSecond(util.getTimeLeft())+"`")).complete(); oldValue = util.getTimeLeft(); } @@ -166,14 +167,14 @@ public class SpamInfo implements Commande{ e.printStackTrace(); } } - logger.debug("Kill "+user.getName()+" theard!"); + logger.debug("Kill "+user.getEffectiveName()+" theard!"); if(stop) message.editMessage(new EmbedBuilder().setColor(Color.RED).setTitle("Aborted").build()).complete(); else - message.editMessage(EmbedMessageUtils.getSpamInfo(user.getName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`")).complete(); + message.editMessage(EmbedMessageUtils.getSpamInfo(user.getEffectiveName()+"\n\t- Multiplicateur: `"+util.getMultip()+"`\n\t- En spam: `Non`")).complete(); } - logger.debug("Timer for message deletion of "+user.getName()+" stated..."); + logger.debug("Timer for message deletion of "+user.getEffectiveName()+" stated..."); threadHashMap.remove(user); List messages = new ArrayList<>(); messages.add(command); diff --git a/src/main/java/net/Broken/Commands/Test.java b/src/main/java/net/Broken/Commands/Test.java index 46a38a3..34aee15 100644 --- a/src/main/java/net/Broken/Commands/Test.java +++ b/src/main/java/net/Broken/Commands/Test.java @@ -10,7 +10,7 @@ import net.dv8tion.jda.core.events.message.MessageReceivedEvent; import java.io.IOException; -public class ytTest implements Commande { +public class Test implements Commande { @Override public void action(String[] args, MessageReceivedEvent event) { event.getJDA().getPresence().setPresence(RichPresence.playing("test").asRichPresence(),false); diff --git a/src/main/java/net/Broken/MainBot.java b/src/main/java/net/Broken/MainBot.java index 181582e..4ab4a1a 100644 --- a/src/main/java/net/Broken/MainBot.java +++ b/src/main/java/net/Broken/MainBot.java @@ -10,6 +10,7 @@ import net.Broken.audio.Youtube.YoutubeTools; import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.Permission; import net.dv8tion.jda.core.entities.ChannelType; +import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Message; import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.events.message.MessageReceivedEvent; @@ -33,10 +34,10 @@ import java.util.HashMap; public class MainBot { public static HashMap commandes = new HashMap<>(); - public static HashMap> historique =new HashMap<>(); - public static HashMap message_compteur =new HashMap<>(); + public static HashMap> historique =new HashMap<>(); + public static HashMap message_compteur =new HashMap<>(); public static boolean roleFlag = false; - public static HashMap spamUtils = new HashMap<>(); + public static HashMap spamUtils = new HashMap<>(); public static JDA jda; public static boolean ready = false; diff --git a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java index 30cdd78..2d16375 100644 --- a/src/main/java/net/Broken/RestApi/UserManagerAPIController.java +++ b/src/main/java/net/Broken/RestApi/UserManagerAPIController.java @@ -64,7 +64,6 @@ public class UserManagerAPIController { @RequestMapping(value = "/confirmAccount", method = RequestMethod.POST) public ResponseEntity confirAccount(@RequestBody ConfirmData data){ - //TODO move pending user to accepted and return right things try { PendingUserEntity pUser = userUtils.confirmCheckToken(pendingUserRepository, Integer.parseInt(data.id), data.checkToken); UserEntity user = new UserEntity(pUser, userUtils.generateApiToken()); diff --git a/src/main/java/net/Broken/Tools/AntiSpam.java b/src/main/java/net/Broken/Tools/AntiSpam.java index 6d0dddb..bf4a44b 100644 --- a/src/main/java/net/Broken/Tools/AntiSpam.java +++ b/src/main/java/net/Broken/Tools/AntiSpam.java @@ -43,37 +43,37 @@ public class AntiSpam { } // On créer un nouvelle case dans le tableau des statuts si il n'y est pas - if(!MainBot.spamUtils.containsKey(user.getUser())) + if(!MainBot.spamUtils.containsKey(user)) { List messages = new ArrayList<>(); - messages.addAll(MainBot.historique.get(user.getUser())); - MainBot.spamUtils.put(user.getUser(),new UserSpamUtils(user,messages)); + messages.addAll(MainBot.historique.get(user)); + MainBot.spamUtils.put(user,new UserSpamUtils(user,messages)); } // On verrifie que l'uttilisateur n'est pas deja en spam - if(!MainBot.spamUtils.get(user.getUser()).isOnSpam()) + if(!MainBot.spamUtils.get(user).isOnSpam()) { //l'utilisateur n'est pas deja en spam - if(MainBot.spamUtils.get(user.getUser()).getMultip() != 0) + if(MainBot.spamUtils.get(user).getMultip() != 0) { - if(MainBot.spamUtils.get(user.getUser()).getMultip()<45 && incrMulti) + if(MainBot.spamUtils.get(user).getMultip()<45 && incrMulti) { - MainBot.spamUtils.get(user.getUser()).setMultip(MainBot.spamUtils.get(user.getUser()).getMultip()*2); + MainBot.spamUtils.get(user).setMultip(MainBot.spamUtils.get(user).getMultip()*2); } } else - MainBot.spamUtils.get(user.getUser()).setMultip(1); + MainBot.spamUtils.get(user).setMultip(1); - logger.info("Punition de "+user.getEffectiveName()+" avec un multiplicateur de "+MainBot.spamUtils.get(user.getUser())); + logger.info("Punition de "+user.getEffectiveName()+" avec un multiplicateur de "+MainBot.spamUtils.get(user)); - if(!MainBot.spamUtils.get(user.getUser()).isOnSpam()) + if(!MainBot.spamUtils.get(user).isOnSpam()) { - MainBot.spamUtils.get(user.getUser()).setOnSpam(true); + MainBot.spamUtils.get(user).setOnSpam(true); List spm = guild.getRolesByName("Spammer", false); try{ move.exc(user, spm, true, guild, guildManager); - MainBot.spamUtils.get(user.getUser()).addMessage(event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamExtermine(user,MainBot.spamUtils.get(user.getUser()).getMultip())).complete()); - MainBot.spamUtils.get(user.getUser()).setMinuteur(new Minuteur(MainBot.spamUtils.get(user.getUser()).getMultip(), move.user, move.saveRoleUser, move.serveur, move.serveurManager,event)); - MainBot.spamUtils.get(user.getUser()).launchMinuteur(); + MainBot.spamUtils.get(user).addMessage(event.getTextChannel().sendMessage(EmbedMessageUtils.getSpamExtermine(user,MainBot.spamUtils.get(user.getUser()).getMultip())).complete()); + MainBot.spamUtils.get(user).setMinuteur(new Minuteur(MainBot.spamUtils.get(user).getMultip(), move.user, move.saveRoleUser, move.serveur, move.serveurManager,event)); + MainBot.spamUtils.get(user).launchMinuteur(); }catch (HierarchyException e){ Message rest = event.getTextChannel().sendMessage(EmbedMessageUtils.getMoveError("Impossible de déplacer un "+user.getRoles().get(0).getAsMention())).complete(); List messages = new ArrayList(){{ @@ -81,7 +81,7 @@ public class AntiSpam { add(event.getMessage()); }}; new MessageTimeOut(messages,MainBot.messageTimeOut).start(); - MainBot.spamUtils.get(user.getUser()).setOnSpam(false); + MainBot.spamUtils.get(user).setOnSpam(false); } } diff --git a/src/main/java/net/Broken/Tools/Moderateur.java b/src/main/java/net/Broken/Tools/Moderateur.java index c38cc0f..7da5190 100644 --- a/src/main/java/net/Broken/Tools/Moderateur.java +++ b/src/main/java/net/Broken/Tools/Moderateur.java @@ -41,19 +41,19 @@ public class Moderateur { int nbMessage = 3; int spam = 0; - if(MainBot.spamUtils.containsKey(user.getUser()) && MainBot.spamUtils.get(user.getUser()).isOnSpam()){ - MainBot.spamUtils.get(user.getUser()).addMessage(event.getMessage()); + if(MainBot.spamUtils.containsKey(user) && MainBot.spamUtils.get(user).isOnSpam()){ + MainBot.spamUtils.get(user).addMessage(event.getMessage()); } /******************************************** * si l'USER a deja envoyé un message * ********************************************/ - if(MainBot.historique.containsKey(user.getUser()))// Si le user a deja posté un message + if(MainBot.historique.containsKey(user))// Si le user a deja posté un message { /******************************************** * COPIE des infos d"historique" vers TOI[] * ********************************************/ - thisUserHistory = (ArrayList) MainBot.historique.get(user.getUser()).clone(); + thisUserHistory = (ArrayList) MainBot.historique.get(user).clone(); /******************************************** * Ajout dernier message recu + dans histo' * @@ -61,7 +61,7 @@ public class Moderateur { thisUserHistory.add(0,event.getMessage()); if(thisUserHistory.size()>nbMessage+1) thisUserHistory.remove(4); - MainBot.historique.put(user.getUser(), thisUserHistory);// On ajoute dans l'historique TOI + MainBot.historique.put(user, thisUserHistory);// On ajoute dans l'historique TOI /***************************** * ANALYSE des messages * @@ -81,7 +81,7 @@ public class Moderateur { { logger.info("\t - "+aMessage.getContentRaw()); } - MainBot.historique.put(user.getUser(), new ArrayList()); + MainBot.historique.put(user, new ArrayList()); } } else { @@ -92,7 +92,7 @@ public class Moderateur { // on ajoute le dernier message dans "historique" thisUserHistory.add(0,event.getMessage()); - MainBot.historique.put(user.getUser(), thisUserHistory); + MainBot.historique.put(user, thisUserHistory); } /********************************** * AFFICHAGE DE HISTORIQUE * @@ -104,24 +104,24 @@ public class Moderateur { /******************************************** * Comptage du nombre de message * ********************************************/ - if(MainBot.message_compteur.containsKey(user.getUser()))// Si le user a deja posté un message + if(MainBot.message_compteur.containsKey(user))// Si le user a deja posté un message { - int cpt = MainBot.message_compteur.get(user.getUser()); + int cpt = MainBot.message_compteur.get(user); cpt++; //System.out.println("compteur : "+cpt); - MainBot.message_compteur.put(user.getUser(), cpt); + MainBot.message_compteur.put(user, cpt); if(cpt > 5){ - MainBot.message_compteur.put(user.getUser(),0); + MainBot.message_compteur.put(user,0); spam = 1; logger.info("Detection de spam pour "+user.getEffectiveName()+"avec 5 message en 5seg: "); - ArrayList histo = MainBot.historique.get(user.getUser()); + ArrayList histo = MainBot.historique.get(user); for (Message aMessage:histo ) { // logger.debug("\t*"+aMessage.getContent()); } } }else{ - MainBot.message_compteur.put(user.getUser(), 1); + MainBot.message_compteur.put(user, 1); } return spam; diff --git a/src/main/java/net/Broken/audio/WebLoadUtils.java b/src/main/java/net/Broken/audio/WebLoadUtils.java index e52c6d8..01c6f94 100644 --- a/src/main/java/net/Broken/audio/WebLoadUtils.java +++ b/src/main/java/net/Broken/audio/WebLoadUtils.java @@ -39,7 +39,7 @@ public class WebLoadUtils { public void trackLoaded(AudioTrack track) { logger.info("Single Track detected from web!"); - userAudioTrack = new UserAudioTrack(user, track); //TODO + userAudioTrack = new UserAudioTrack(user, track); if(submit) audioM.play(audioM.getGuild(), audioM.getPlayedChanel(), audioM.getGuildMusicManager(), userAudioTrack, data.onHead); response = new ResponseEntity<>(new CommandResponseData("ADD", "Loaded"), HttpStatus.OK); diff --git a/src/main/resources/static/error/404.html b/src/main/resources/static/error/404.html index 125b939..c68705d 100644 --- a/src/main/resources/static/error/404.html +++ b/src/main/resources/static/error/404.html @@ -10,27 +10,22 @@ - - + + - - - - - -