= Merging
This commit is contained in:
@@ -27,6 +27,7 @@ public class CommandMusicMain extends Command
|
||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||
{
|
||||
SubCommandFormattable scf = framework.run(guild, channel, user, input);
|
||||
System.out.println("SCF: " + scf.resString);
|
||||
scf.Call(res);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package commands.music;
|
||||
|
||||
public class MusicThread extends Thread
|
||||
{
|
||||
public MusicThread()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//Called when spawned
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,9 +1,5 @@
|
||||
package commands.music;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
|
||||
import core.SubCommand;
|
||||
import core.SubCommandFormattable;
|
||||
import dataStructures.KittyChannel;
|
||||
@@ -21,18 +17,9 @@ public class SubCommandPlaylist extends SubCommand
|
||||
@Override
|
||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||
{
|
||||
ArrayList <AudioTrack> playlist = guild.audio.getPlaylist();
|
||||
String stringPlaylist = "";
|
||||
|
||||
for(AudioTrack track : playlist)
|
||||
{
|
||||
stringPlaylist += (playlist.indexOf(track) + 1) + ": " + track.getInfo().title + "\n";
|
||||
}
|
||||
if(stringPlaylist.equals(""))
|
||||
{
|
||||
return new SubCommandFormattable("Nothing Queued!");
|
||||
}
|
||||
// ArrayList<AudioTrack> playlist = guild.audio.getPlaylist();
|
||||
String stringPlaylist = guild.audio.getPlaylist(guild.audio.player);
|
||||
return new SubCommandFormattable(stringPlaylist);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,8 @@ public class SubCommandStop extends SubCommand
|
||||
@Override
|
||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||
{
|
||||
|
||||
return new SubCommandFormattable(guild.audio.stopPlayer(guild.audio.player));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import dataStructures.KittyCore;
|
||||
import dataStructures.KittyGuild;
|
||||
import dataStructures.KittyRating;
|
||||
import dataStructures.KittyRole;
|
||||
import dataStructures.KittyStartupMode;
|
||||
import dataStructures.KittyUser;
|
||||
import main.Main;
|
||||
import net.dv8tion.jda.core.AccountType;
|
||||
@@ -142,8 +141,10 @@ public class ObjectBuilderFactory
|
||||
|
||||
List<Emote> emotes = event.getGuild().getEmotes();
|
||||
ArrayList<String> emotesString = new ArrayList<String>();
|
||||
HashMap<Long, KittyChannel> channels = new HashMap<Long, KittyChannel>();
|
||||
String emote;
|
||||
String emoteFix;
|
||||
channels.put(Long.getLong(uid), extractChannel(event));
|
||||
for(int i = 0; i < emotes.size(); i++)
|
||||
{
|
||||
emote = emotes.get(i).toString();
|
||||
@@ -164,8 +165,8 @@ public class ObjectBuilderFactory
|
||||
}
|
||||
else
|
||||
{
|
||||
// Construct a new guild with defaults
|
||||
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild(), playerManager));
|
||||
// Construct a new guild with defaults
|
||||
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild(), playerManager), channels);
|
||||
DatabaseManager.instance.globalRegister(guild);
|
||||
guildCache.put(uid, guild);
|
||||
}
|
||||
@@ -223,14 +224,13 @@ public class ObjectBuilderFactory
|
||||
public static KittyChannel extractChannel(GuildMessageReceivedEvent event)
|
||||
{
|
||||
lazyInit();
|
||||
|
||||
String channelID = event.getChannel().getId();
|
||||
String guildID = event.getGuild().getId();
|
||||
KittyChannel channel = null;
|
||||
|
||||
synchronized(channelCache)
|
||||
{
|
||||
KittyChannel cachedChannel = channelCache.get(channelID);
|
||||
boolean mature;
|
||||
|
||||
if(cachedChannel != null)
|
||||
{
|
||||
@@ -238,8 +238,8 @@ public class ObjectBuilderFactory
|
||||
}
|
||||
else
|
||||
{
|
||||
KittyGuild cachedGuild = guildCache.get(guildID);
|
||||
channel = new KittyChannel(channelID, cachedGuild);
|
||||
mature = event.getChannel().isNSFW();
|
||||
channel = new KittyChannel(channelID, mature);
|
||||
channelCache.put(channelID, channel);
|
||||
}
|
||||
}
|
||||
@@ -383,15 +383,9 @@ public class ObjectBuilderFactory
|
||||
{
|
||||
lazyInit();
|
||||
|
||||
// Determine token based on config. Default to test token.
|
||||
String tokenToUse = Ref.TestToken;
|
||||
if(ConfigGlobals.getStartupMode() == KittyStartupMode.Release)
|
||||
tokenToUse = Ref.Token;
|
||||
|
||||
// Construct bot based on token
|
||||
kitty = new JDABuilder(AccountType.BOT)
|
||||
.setToken(tokenToUse).buildBlocking();
|
||||
kitty.getPresence().setGame(Game.playing("with a laser pointer"));
|
||||
.setToken(Ref.TestToken).buildBlocking();
|
||||
kitty.getPresence().setGame(Game.playing("with digital yarn"));
|
||||
kitty.addEventListener(new Main());
|
||||
|
||||
return new KittyCore(kitty);
|
||||
|
||||
@@ -1,31 +1,15 @@
|
||||
package dataStructures;
|
||||
|
||||
//import core.DatabaseTrackedObject;
|
||||
|
||||
public class KittyChannel //extends DatabaseTrackedObject
|
||||
public class KittyChannel
|
||||
{
|
||||
public String uniqueID;
|
||||
public KittyGuild guild;
|
||||
public boolean mature;
|
||||
|
||||
//public KittyRating rating;
|
||||
//public bool isVoice;
|
||||
|
||||
public KittyChannel(String uniqueID, KittyGuild guild)
|
||||
public KittyChannel(String uniqueID, boolean mature)
|
||||
{
|
||||
//super(uniqueID);
|
||||
this.uniqueID = uniqueID;
|
||||
this.guild = guild;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public String serialize()
|
||||
// {
|
||||
// return "";
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void deSerialzie(String string)
|
||||
// {
|
||||
//
|
||||
// }
|
||||
}
|
||||
this.mature = false;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package dataStructures;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import core.DatabaseManager;
|
||||
import core.DatabaseTrackedObject;
|
||||
@@ -21,6 +22,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
||||
public ArrayList<String> hasVoted = new ArrayList<String>();
|
||||
public ArrayList<String> emoji = new ArrayList<String>();
|
||||
public ArrayList <KittyPoll> choices = new ArrayList<KittyPoll>();
|
||||
public HashMap <Long, KittyChannel> channels;
|
||||
public AdminControl control;
|
||||
public AudioUtils audio;
|
||||
public ArrayList <KittyUser> raffleUsersUnchosen = new ArrayList<KittyUser>();
|
||||
@@ -42,7 +44,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
||||
}
|
||||
|
||||
// Default content for a guild
|
||||
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji, AudioUtils audio)
|
||||
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||
{
|
||||
|
||||
super(uniqueID);
|
||||
@@ -56,11 +58,12 @@ public class KittyGuild extends DatabaseTrackedObject
|
||||
this.polling = false;
|
||||
this.emoji = emoji;
|
||||
this.audio = audio;
|
||||
this.channels = channels;
|
||||
setCommandIndicator("!");
|
||||
}
|
||||
|
||||
// Explicit constructor
|
||||
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner, String uniqueID, AudioUtils audio)
|
||||
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner, String uniqueID, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||
{
|
||||
super(uniqueID);
|
||||
this.uniqueID = uniqueID;
|
||||
@@ -73,6 +76,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
||||
this.polling = false;
|
||||
this.guildOwner = guildOwner;
|
||||
this.audio = audio;
|
||||
this.channels = channels;
|
||||
}
|
||||
|
||||
public String startPoll(String poll)
|
||||
|
||||
@@ -14,6 +14,7 @@ public class NetworkDerpi
|
||||
{
|
||||
public String image;
|
||||
public String tags;
|
||||
public String score;
|
||||
}
|
||||
|
||||
private class InitialRequest
|
||||
@@ -29,16 +30,26 @@ public class NetworkDerpi
|
||||
String res = HTTPUtils.sendGETRequest(mainURL + query + "&random_image=1&key=" + Ref.derpiKey);
|
||||
if(res != null)
|
||||
{
|
||||
InitialRequest obj;
|
||||
// Use class evaluation on an array of the response object to be able to hold multiple.
|
||||
InitialRequest obj = jsonParser_.fromJson(res, InitialRequest.class);
|
||||
try
|
||||
{
|
||||
obj = jsonParser_.fromJson(res, InitialRequest.class);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if(res != null)
|
||||
{
|
||||
|
||||
String res2 = HTTPUtils.sendGETRequest("https://derpibooru.org/" + obj.id + ".json");
|
||||
image.editPostURL("<https://derpibooru.org/" + obj.id +">");
|
||||
image.editPostURL("https://derpibooru.org/" + obj.id);
|
||||
DerpiResponseObject imageObj = jsonParser_.fromJson(res2, DerpiResponseObject.class);
|
||||
|
||||
image.editImageURL("https:" + imageObj.image.substring(0, imageObj.image.indexOf('_')) + imageObj.image.substring(imageObj.image.lastIndexOf('.')));
|
||||
image.editImageURL("https:" + imageObj.image.substring(0, imageObj.image.indexOf('_')) +
|
||||
imageObj.image.substring(imageObj.image.lastIndexOf('.')));
|
||||
if(imageObj.tags.contains("artist:"))
|
||||
{
|
||||
String [] sepTags = imageObj.tags.split(",");
|
||||
@@ -54,8 +65,20 @@ public class NetworkDerpi
|
||||
artists += sepTags[i].substring(sepTags[i].indexOf(":")+1);
|
||||
}
|
||||
}
|
||||
image.editAuthorImage("https://derpicdn.net/favicon.ico");
|
||||
|
||||
image.editArtist(artists);
|
||||
String tags = "";
|
||||
for(int i = 0; i < sepTags.length && i < 15; i++)
|
||||
{
|
||||
if(!sepTags[i].contains("artist:"))
|
||||
{
|
||||
tags += sepTags[i];
|
||||
}
|
||||
}
|
||||
|
||||
image.editFooterText("[Tags]" + tags);
|
||||
image.editDescriptionText("Score: " + imageObj.score);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -66,4 +89,46 @@ public class NetworkDerpi
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
public GenericImage getDerpiByID(String id)
|
||||
{
|
||||
GenericImage image = new GenericImage(" ", " ", " ");
|
||||
String artists = "";
|
||||
image.editAuthorImage("https://derpicdn.net/favicon.ico");
|
||||
String res;
|
||||
try
|
||||
{
|
||||
res = HTTPUtils.sendGETRequest("https://derpibooru.org/" + id + ".json");
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
DerpiResponseObject imageObj = jsonParser_.fromJson(res, DerpiResponseObject.class);
|
||||
if(imageObj.tags.contains("artist:"))
|
||||
{
|
||||
String [] sepTags = imageObj.tags.split(",");
|
||||
for(int i = 0; i < sepTags.length; i++)
|
||||
{
|
||||
if(sepTags[i].contains("artist:"))
|
||||
{
|
||||
if(!artists.equals(""))
|
||||
{
|
||||
artists += " and ";
|
||||
}
|
||||
artists += sepTags[i].substring(sepTags[i].indexOf(":")+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(artists != "")
|
||||
image.editArtist(artists);
|
||||
else
|
||||
image.editArtist("Artist Unknown!");
|
||||
|
||||
image.editFooterText("[Tags]" + imageObj.tags);
|
||||
image.editDescriptionText("Score: " + imageObj.score);
|
||||
image.editImageURL("https:" + imageObj.image.substring(0, imageObj.image.indexOf('_')) +
|
||||
imageObj.image.substring(imageObj.image.lastIndexOf('.')));
|
||||
return image;
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
package network;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import dataStructures.GenericImage;
|
||||
import offline.Ref;
|
||||
import utils.*;
|
||||
import utils.HTTPUtils;
|
||||
|
||||
/**
|
||||
* This is the e6 request class, designed for form and parse requests that
|
||||
* use the e6 API, and is entirely static.
|
||||
* This is the e621 request class, designed for form and parse requests that
|
||||
* use the e621 API, and is entirely static.
|
||||
*
|
||||
* If you ever find this class randomly not working,
|
||||
* it may be a good idea to make sure the user agent string is set in
|
||||
@@ -17,7 +18,7 @@ import utils.*;
|
||||
* @author Wisp
|
||||
* Edited by Rin
|
||||
*/
|
||||
public class NetworkE6
|
||||
public class NetworkE6
|
||||
{
|
||||
///////////////////////////////////////
|
||||
// Internal JSON class and variables //
|
||||
@@ -26,6 +27,7 @@ public class NetworkE6
|
||||
private static final String API_ROOT = "https://e621.net/post/index.json?";
|
||||
private static int maxSearchResults_ = 10;
|
||||
private static String[] blacklist = Ref.e621Blacklist;
|
||||
|
||||
private class E6ResponseObject
|
||||
{
|
||||
// public varaibles matching the case and the type we want for JSON.
|
||||
@@ -35,6 +37,8 @@ public class NetworkE6
|
||||
public String id;
|
||||
public String tags;
|
||||
public String [] artist;
|
||||
public String [] sources;
|
||||
public String score;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +49,6 @@ public class NetworkE6
|
||||
// Requests a specific image, then returns a few.
|
||||
public GenericImage getE6(String input)
|
||||
{
|
||||
|
||||
GenericImage image = new GenericImage("","","");
|
||||
boolean blacklisted;
|
||||
// Clean up request and replace problematic characters for the query string.
|
||||
@@ -60,6 +63,7 @@ public class NetworkE6
|
||||
, "tags=order:random%20" + input + "&limit=" + maxSearchResults_);
|
||||
|
||||
|
||||
|
||||
if(res != null)
|
||||
{
|
||||
// Use class evaluation on an array of the response imageObject to be able to hold multiple.
|
||||
@@ -80,13 +84,14 @@ public class NetworkE6
|
||||
{
|
||||
if(imageObj[i].tags.contains(blacklist[j]))
|
||||
{
|
||||
System.out.println("BLACKLISTED " + blacklist[j]);
|
||||
blacklisted = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(blacklisted)
|
||||
{
|
||||
continue;
|
||||
return null;
|
||||
}
|
||||
// We will always have a file URL. That's a given.
|
||||
image.editImageURL(imageObj[i].file_url);
|
||||
@@ -95,6 +100,59 @@ public class NetworkE6
|
||||
image.editArtist(imageObj[i].artist[0]);
|
||||
else
|
||||
image.editArtist("Artist Not Found!");
|
||||
|
||||
image.editAuthorImage("https://e621.net/favicon.ico");
|
||||
|
||||
String sources = "";
|
||||
|
||||
if(imageObj[i].sources != null)
|
||||
{
|
||||
for(int k = 0; k < imageObj[i].sources.length; k ++)
|
||||
{
|
||||
if(!imageObj[i].sources[k].endsWith(imageObj[i].file_url.substring(imageObj[i].file_url.lastIndexOf('.'))))
|
||||
{
|
||||
String source = imageObj[i].sources[k];
|
||||
if(source.contains("//www."))
|
||||
{
|
||||
source = source.substring(source.indexOf(".") + 1);
|
||||
source = source.substring(0, source.indexOf('.'));
|
||||
}
|
||||
else
|
||||
{
|
||||
source = source.substring(source.indexOf("/") + 2);
|
||||
source = source.substring(0, source.indexOf('.'));
|
||||
}
|
||||
sources += " [" + source + "](" + imageObj[i].sources[k] + ") ";
|
||||
}
|
||||
}
|
||||
image.editDescriptionText("Score: " + imageObj[i].score + "\n**Source:**" + sources);
|
||||
}
|
||||
else
|
||||
{
|
||||
image.editDescriptionText("Score: " + imageObj[i].score);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(imageObj[i].tags.split(" ").length > 15)
|
||||
{
|
||||
String [] splitTags = imageObj[i].tags.split(" ");
|
||||
String descTags = "";
|
||||
for(int o = 0; o < 15; o++)
|
||||
{
|
||||
descTags += splitTags[o] + ", ";
|
||||
}
|
||||
image.editFooterText("[Tags] " + descTags + " etc.");
|
||||
}
|
||||
else
|
||||
{
|
||||
image.editFooterText("[Tags] " + imageObj[i].tags.replace(" ", ", "));
|
||||
}
|
||||
|
||||
if(image.output().authorText != null)
|
||||
{
|
||||
return image;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package utils.audio;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
|
||||
@@ -20,7 +21,7 @@ public class AudioUtils
|
||||
public AudioManager am;
|
||||
public final AudioPlayer player;
|
||||
public final AudioPlayerManager playerManager;
|
||||
private ArrayList <AudioTrack> playlist = new ArrayList<AudioTrack>();
|
||||
private Queue <AudioTrack> playlist = new LinkedList<>();
|
||||
|
||||
|
||||
public AudioUtils(Guild guild, AudioPlayerManager playerManager)
|
||||
@@ -84,9 +85,12 @@ public class AudioUtils
|
||||
}
|
||||
|
||||
public class SmallAudio implements AudioLoadResultHandler
|
||||
{
|
||||
{
|
||||
private AudioPlayer player;
|
||||
|
||||
private SmallAudio(AudioPlayer player)
|
||||
{
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Override public void loadFailed(FriendlyException arg0) { }
|
||||
@@ -100,6 +104,14 @@ public class AudioUtils
|
||||
{
|
||||
playlist.add(track);
|
||||
}
|
||||
do
|
||||
{
|
||||
if(player.getPlayingTrack() == null)
|
||||
{
|
||||
player.startTrack(playlist.poll(), false);
|
||||
}
|
||||
}
|
||||
while(!playlist.isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,21 +120,13 @@ public class AudioUtils
|
||||
{
|
||||
guild.getAudioManager().setSendingHandler(new AudioPlayerSendHandler(player));
|
||||
playerManager.loadItemOrdered(player, videoURL, new SmallAudio(player));
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {}
|
||||
if(player.getPlayingTrack() == null)
|
||||
{
|
||||
MusicController control = new MusicController(player, playlist);
|
||||
control.start();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public String skipVideo(AudioPlayer player)
|
||||
{
|
||||
player.stopTrack();
|
||||
return "Skipped";
|
||||
return null;
|
||||
}
|
||||
|
||||
public String stopPlayer(AudioPlayer player)
|
||||
@@ -132,44 +136,13 @@ public class AudioUtils
|
||||
return "Stopped";
|
||||
}
|
||||
|
||||
public ArrayList<AudioTrack> getPlaylist()
|
||||
public String getPlaylist(AudioPlayer player)
|
||||
{
|
||||
return playlist;
|
||||
}
|
||||
}
|
||||
|
||||
class MusicController extends Thread
|
||||
{
|
||||
AudioPlayer player;
|
||||
private ArrayList <AudioTrack> playlist;
|
||||
|
||||
public MusicController(AudioPlayer player, ArrayList <AudioTrack> playlist)
|
||||
{
|
||||
this.player = player;
|
||||
this.playlist = playlist;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
AudioTrack nowPlaying = null;
|
||||
do
|
||||
String response ="";
|
||||
for(AudioTrack track:playlist)
|
||||
{
|
||||
if(!playlist.isEmpty() || nowPlaying != null)
|
||||
{
|
||||
if(player.getPlayingTrack() == null)
|
||||
{
|
||||
if(playlist.isEmpty())
|
||||
nowPlaying = null;
|
||||
else
|
||||
{
|
||||
nowPlaying = playlist.get(0);
|
||||
playlist.remove(0);
|
||||
}
|
||||
player.startTrack(nowPlaying, false);
|
||||
}
|
||||
}
|
||||
response += track.getInfo().title;
|
||||
}
|
||||
while(!playlist.isEmpty() || player.getPlayingTrack() != null);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user