= Merging

This commit is contained in:
Matthew Cech
2020-02-09 21:06:37 -08:00
parent de2f3f4515
commit bcc7959c00
10 changed files with 199 additions and 114 deletions
+1
View File
@@ -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);
}
}
+18
View File
@@ -0,0 +1,18 @@
package commands.music;
public class MusicThread extends Thread
{
public MusicThread()
{
}
//Called when spawned
@Override
public void run()
{
}
}
+2 -15
View File
@@ -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,17 +17,8 @@ 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);
}
+1
View File
@@ -17,6 +17,7 @@ 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));
}
+8 -14
View File
@@ -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();
@@ -165,7 +166,7 @@ public class ObjectBuilderFactory
else
{
// Construct a new guild with defaults
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString, new AudioUtils(event.getGuild(), playerManager));
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);
+4 -20
View File
@@ -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;
this.mature = false;
}
// @Override
// public String serialize()
// {
// return "";
// }
//
// @Override
// public void deSerialzie(String string)
// {
//
// }
}
+6 -2
View File
@@ -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)
+68 -3
View File
@@ -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;
}
}
+63 -5
View File
@@ -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
@@ -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;
}
}
}
+21 -48
View File
@@ -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)
@@ -85,8 +86,11 @@ 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
{
if(!playlist.isEmpty() || nowPlaying != null)
String response ="";
for(AudioTrack track:playlist)
{
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;
}
}