Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
Matthew Cech
2019-08-07 20:47:31 -07:00
53 changed files with 933 additions and 413 deletions
+7 -1
View File
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/commons-codec-1.11.jar"/>
<classpathentry kind="lib" path="lib/commons-logging-1.2.jar"/>
<classpathentry kind="lib" path="lib/gson-2.6.2.jar"/>
@@ -20,5 +24,7 @@
<classpathentry kind="lib" path="lib/commons-collections4-4.3.jar"/>
<classpathentry kind="lib" path="lib/commons-lang3-3.9.jar"/>
<classpathentry kind="lib" path="lib/commons-text-1.6.jar"/>
<classpathentry kind="lib" path="lib/google-api-services-youtube-v3-rev212-1.25.0.jar"/>
<classpathentry kind="lib" path="lib/lavaplayer-1.3.19.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
+9 -2
View File
@@ -37,9 +37,12 @@
"Localized Commands","kittyrole",""
"Localized Commands","leaderboard",""
"Localized Commands","map",""
"Localized Commands","mod",""
"Localized Commands","music",""
"Localized Commands","perish, thenperish",""
"Localized Commands","ping",""
"Localized Commands","poll",""
"Localized Commands","raffle",""
"Localized Commands","raffleend",""
"Localized Commands","rafflejoin",""
"Localized Commands","rafflespin",""
@@ -189,16 +192,17 @@
"Localized Strings","MapSeed","Seed"
"Localized Strings","MapVersion","Using mapgen v0.1"
"Localized Strings","MapWidth",""
"Localized Strings","MusicInfo",""
"Localized Strings","PerishInfo","Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned"
"Localized Strings","PingInfo","Will respond with Pong!"
"Localized Strings","PingResponse","Pong!"
"Localized Strings","PollManageInfo","'start' will start a new poll with the query of the line you put after, 'choice' will add a choice to the poll, 'stop' will end the poll"
"Localized Strings","PollResultsInfo","Will show current results of a poll and percentages of votes per choice"
"Localized Strings","PollResultsResponse","%s people voted for %s `%s` with `%s%` !n"
"Localized Strings","PollResultsResponse","%s people voted for `%s` with `%s%%` "
"Localized Strings","PollShowChoices","And the choices are:n"
"Localized Strings","PollShowInfo","Will show the current poll running"
"Localized Strings","PollShowNoPoll","There is no poll running!"
"Localized Strings","PollShowPoll","The current poll is `%s`n"
"Localized Strings","PollShowPoll","The current poll is `%s`"
"Localized Strings","PollVoteAlreadyVoted","You already voted"
"Localized Strings","PollVoteInfo","Vote in a poll with the choice number, won't work if no poll is running, you can't change your vote once you have cast it! Be careful!"
"Localized Strings","PollVoteNoPoll","There is no poll running!"
@@ -293,9 +297,12 @@
"Command Enabler","kittyrole","1"
"Command Enabler","leaderboard","1"
"Command Enabler","map","1"
"Command Enabler","mod","1"
"Command Enabler","music","1"
"Command Enabler","perish, thenperish","1"
"Command Enabler","ping","1"
"Command Enabler","poll","1"
"Command Enabler","raffle","1"
"Command Enabler","raffleend","1"
"Command Enabler","rafflejoin","1"
"Command Enabler","rafflespin","1"
1 Type Key Value
37 Localized Commands kittyrole
38 Localized Commands leaderboard
39 Localized Commands map
40 Localized Commands mod
41 Localized Commands music
42 Localized Commands perish, thenperish
43 Localized Commands ping
44 Localized Commands poll
45 Localized Commands raffle
46 Localized Commands raffleend
47 Localized Commands rafflejoin
48 Localized Commands rafflespin
192 Localized Strings MapSeed Seed
193 Localized Strings MapVersion Using mapgen v0.1
194 Localized Strings MapWidth
195 Localized Strings MusicInfo
196 Localized Strings PerishInfo Adds a red, 'a n g e r y' overlay to your icon or the icon of a friend you mentioned
197 Localized Strings PingInfo Will respond with Pong!
198 Localized Strings PingResponse Pong!
199 Localized Strings PollManageInfo 'start' will start a new poll with the query of the line you put after, 'choice' will add a choice to the poll, 'stop' will end the poll
200 Localized Strings PollResultsInfo Will show current results of a poll and percentages of votes per choice
201 Localized Strings PollResultsResponse %s people voted for %s `%s` with `%s%` !n %s people voted for `%s` with `%s%%`
202 Localized Strings PollShowChoices And the choices are:n
203 Localized Strings PollShowInfo Will show the current poll running
204 Localized Strings PollShowNoPoll There is no poll running!
205 Localized Strings PollShowPoll The current poll is `%s`n The current poll is `%s`
206 Localized Strings PollVoteAlreadyVoted You already voted
207 Localized Strings PollVoteInfo Vote in a poll with the choice number, won't work if no poll is running, you can't change your vote once you have cast it! Be careful!
208 Localized Strings PollVoteNoPoll There is no poll running!
297 Command Enabler kittyrole 1
298 Command Enabler leaderboard 1
299 Command Enabler map 1
300 Command Enabler mod 1
301 Command Enabler music 1
302 Command Enabler perish, thenperish 1
303 Command Enabler ping 1
304 Command Enabler poll 1
305 Command Enabler raffle 1
306 Command Enabler raffleend 1
307 Command Enabler rafflejoin 1
308 Command Enabler rafflespin 1
Binary file not shown.
Binary file not shown.
@@ -22,12 +22,9 @@ public class CommandCharacterMain extends Command
@Override
public String getHelpText() { return LocStrings.stub("CharacterInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
framework.run(guild, channel, user, input.args).Call(res);
framework.run(guild, channel, user, input).Call(res);
}
}
@@ -4,16 +4,21 @@ import core.CharacterManager;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.*;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandCreate extends SubCommand
{
public SubCommandCreate(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
String [] info = input.split(",");
String [] info = input.args.split(",");
if(info.length < 3)
{
return new SubCommandFormattable (LocStrings.stub("CharacterCreateNullInfo"));
@@ -10,26 +10,27 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandEditBio extends SubCommand
{
public SubCommandEditBio(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
try
{
Long.parseLong(input.split(" ")[0]);
Long.parseLong(input.args.split(" ")[0]);
}
catch(Exception e)
{
return new SubCommandFormattable (LocStrings.stub("CharacterEditBioNotValid"));
}
KittyCharacter character = CharacterManager.instance.searchCharacter(input.split(" ")[0]).get(0);
KittyCharacter character = CharacterManager.instance.searchCharacter(input.args.split(" ")[0]).get(0);
if(character.getOwner().equals(user))
{
CharacterManager.instance.editBio(character, input.substring(input.indexOf(' ')));
CharacterManager.instance.editBio(character, input.args.substring(input.args.indexOf(' ')));
return new SubCommandFormattable (LocStrings.stub("CharacterEditBioSuccess"));
}
else
@@ -10,26 +10,27 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandEditName extends SubCommand
{
public SubCommandEditName(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
try
{
Long.parseLong(input.split(" ")[0]);
Long.parseLong(input.args.split(" ")[0]);
}
catch(Exception e)
{
return new SubCommandFormattable (LocStrings.stub("CharacterEditNameNotValid"));
}
KittyCharacter character = CharacterManager.instance.searchCharacter(input.split(" ")[0]).get(0);
KittyCharacter character = CharacterManager.instance.searchCharacter(input.args.split(" ")[0]).get(0);
if(character.getOwner().equals(user))
{
CharacterManager.instance.editName(character, input.substring(input.indexOf(' ')));
CharacterManager.instance.editName(character, input.args.substring(input.args.indexOf(' ')));
return new SubCommandFormattable (LocStrings.stub("CharacterEditNameSuccess"));
}
else
@@ -10,26 +10,27 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandEditURL extends SubCommand
{
public SubCommandEditURL(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
try
{
Long.parseLong(input.split(" ")[0]);
Long.parseLong(input.args.split(" ")[0]);
}
catch(Exception e)
{
return new SubCommandFormattable (LocStrings.stub("CharacterEditURLNotValid"));
}
KittyCharacter character = CharacterManager.instance.searchCharacter(input.split(" ")[0]).get(0);
KittyCharacter character = CharacterManager.instance.searchCharacter(input.args.split(" ")[0]).get(0);
if(character.getOwner().equals(user))
{
CharacterManager.instance.editRefImage(character, input.substring(input.indexOf(' ')));
CharacterManager.instance.editRefImage(character, input.args.substring(input.args.indexOf(' ')));
return new SubCommandFormattable (LocStrings.stub("CharacterEditURLSuccess"));
}
else
@@ -12,15 +12,16 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandSearch extends SubCommand
{
public SubCommandSearch(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
ArrayList <KittyCharacter> characters = CharacterManager.instance.searchCharacter(input);
ArrayList <KittyCharacter> characters = CharacterManager.instance.searchCharacter(input.args);
if(characters.size() < 1)
{
return new SubCommandFormattable (LocStrings.stub("CharacterSearchNoCharacterFound"));
+56 -28
View File
@@ -20,6 +20,8 @@ public class CommandBlurry extends Command
public String getHelpText() { return LocStrings.stub("BlurryInfo"); };
private static Long num = 0l;
private static float [] weights = {.00390625f, .0156625f, .0234475f, .0156625f, .00390625f};
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
@@ -53,7 +55,7 @@ public class CommandBlurry extends Command
return;
}
preProcessed = new File(filename);
applySnap(ImageIO.read(preProcessed), name);
applyBlur(ImageIO.read(preProcessed), name);
}
catch (IOException e)
{
@@ -67,51 +69,77 @@ public class CommandBlurry extends Command
ImageUtils.blockingFileDelete(postProcessed);
}
private static void applySnap(BufferedImage image, String name) throws IOException
private static void applyBlur(BufferedImage image, String name) throws IOException
{
BufferedImage blurred = ImageUtils.copyImage(image);
// Iterate over each column left to right and touch up each pixel
for(int i = 0; i < 50; ++i)
for(int i = 0; i < 10; i++)
{
for(int x = 1; x < image.getWidth() - 1; ++x)
for(int x = 0; x < image.getWidth(); ++x)
{
for(int y = 1; y < image.getHeight() - 1; ++y)
for(int y = 0; y < image.getHeight(); ++y)
{
blurred.setRGB(x, y, getColorAvg(image, x, y).getRGB());
}
}
image = ImageUtils.copyImage(blurred);
image = blurred;
}
File outputfile = new File(name);
ImageIO.write(blurred, "png", outputfile);
}
private static Color getColorAvg(BufferedImage image, int x, int y)
{
Color center = new Color(image.getRGB(x, y), true);
Color one = new Color(image.getRGB(x - 1, y), true);
Color two = new Color(image.getRGB(x - 1, y - 1), true);
Color three = new Color(image.getRGB(x, y - 1), true);
Color four = new Color(image.getRGB(x + 1, y - 1), true);
Color five = new Color(image.getRGB(x + 1, y), true);
Color six = new Color(image.getRGB(x + 1, y + 1), true);
Color seven = new Color(image.getRGB(x, y + 1), true);
Color eight = new Color(image.getRGB(x -1, y + 1), true);
Color current;
float r = 0;
float g = 0;
float b = 0;
int blue = center.getBlue() + one.getBlue() + two.getBlue() + three.getBlue() + four.getBlue() + five.getBlue() + six.getBlue() + seven.getBlue() + eight.getBlue();
int red = center.getRed() + one.getRed() + two.getRed() + three.getRed() + four.getRed() + five.getRed() + six.getRed() + seven.getRed() + eight.getRed();
int green = center.getGreen() + one.getGreen() + two.getGreen() + three.getGreen() + four.getGreen() + five.getGreen() + six.getGreen() + seven.getGreen() + eight.getGreen();
int alpha = center.getAlpha() + one.getAlpha() + two.getAlpha() + three.getAlpha() + four.getAlpha() + five.getAlpha() + six.getAlpha() + seven.getAlpha() + eight.getAlpha();
for(int xCor = -2; xCor <= 2; xCor++)
{
for(int yCor = -2; yCor <= 2; yCor++)
{
int curX = clamp(x + xCor, 0, image.getWidth() - 1);
int curY = clamp(y + yCor, 0, image.getHeight() - 1);
current = new Color(image.getRGB(curX, curY));
r += getGaus(current.getRed(), xCor, yCor);
g += getGaus(current.getGreen(), xCor, yCor);
b += getGaus(current.getBlue(), xCor, yCor);
}
}
int red = (int)r;
int green = (int)g;
int blue = (int)b;
return new Color(red, green, blue);
}
private static int clamp(int num, int min, int max)
{
if(num >= max)
return max;
if(num < min)
return min;
return num;
}
private static float getGaus(int col, int x, int y)
{
x += 2;
y+= 2;
float result = weights[x];
if(y == 2 || y == 4)
result *= 4;
if(y==3)
result *= 6;
blue /= 9;
red /= 9;
green /= 9;
alpha /= 9;
result *= col;
Color blur = new Color(red, green, blue, alpha);
return blur;
}
return result;
}
}
@@ -1,40 +0,0 @@
package commands.general;
import core.*;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandPollManage extends Command
{
public CommandPollManage(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("PollManageInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
switch(input.args.split(" ")[0].toLowerCase())
{
case "start":
res.send(guild.startPoll(input.args.substring(input.args.indexOf(' ')).trim()));
break;
case "choice":
res.send(guild.addChoiceToPoll(input.args.substring(input.args.indexOf(' ')).trim()));
break;
case "stop":
res.send(guild.endPoll());
break;
default:
break;
}
}
}
-30
View File
@@ -1,30 +0,0 @@
package commands.general;
import core.*;
import dataStructures.*;
public class CommandPollShow extends Command
{
public CommandPollShow(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("PollShowInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
if(!guild.polling)
{
res.send(LocStrings.stub("PollShowNoPoll"));
return;
}
String poll = String.format(LocStrings.stub("PollShowPoll"), guild.poll);
poll += LocStrings.stub("PollShowChoices");
for(int i = 0; i < guild.choices.size(); i++)
{
poll += (i+1) + ": `" + guild.choices.get(i).choice + "`\n";
}
res.send(poll);
}
}
-47
View File
@@ -1,47 +0,0 @@
package commands.general;
import core.*;
import dataStructures.*;
public class CommandPollVote extends Command
{
public CommandPollVote(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("PollVoteInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
if(guild.polling)
{
if(guild.hasVoted.contains(user.uniqueID))
{
res.send(LocStrings.stub("PollVoteAlreadyVoted"));
return;
}
try
{
int voteNum = Integer.parseInt(input.args)-1;
if(voteNum >= guild.choices.size() || voteNum < 0)
{
res.send(String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum));
return;
}
KittyPoll polled = guild.choices.get(voteNum);
polled.votes++;
guild.hasVoted.add(user.uniqueID);
res.send(LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!");
return;
}
catch (NumberFormatException e)
{
res.send(LocStrings.stub("PollVoteNotValidNumber"));
return;
}
}
res.send(LocStrings.stub("PollVoteNoPoll"));
}
}
@@ -1,32 +0,0 @@
package commands.general;
import core.Command;
import core.LocStrings;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandRaffleEnd extends Command
{
public CommandRaffleEnd(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("RaffleEndInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
if(guild.endRaffle())
{
res.send(LocStrings.stub("RaffleEndSuccess"));
}
else
{
res.send(LocStrings.stub("RaffleEndFailure"));
}
}
}
@@ -1,32 +0,0 @@
package commands.general;
import core.Command;
import core.LocStrings;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandRaffleJoin extends Command
{
public CommandRaffleJoin(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("RaffleJoinInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
if(guild.joinRaffle(user))
{
res.send(LocStrings.stub("RaffleJoinSuccess"));
}
else
{
res.send(LocStrings.stub("RaffleJoinFailure"));
}
}
}
@@ -1,32 +0,0 @@
package commands.general;
import core.Command;
import core.LocStrings;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandRaffleSpin extends Command
{
public CommandRaffleSpin(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("RaffleSpinInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
try
{
res.send(String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name));
}
catch(Exception e)
{
res.send(LocStrings.stub("RaffleSpinFailure"));
}
}
}
@@ -1,43 +0,0 @@
package commands.general;
import core.Command;
import core.LocStrings;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandRaffleStart extends Command
{
public CommandRaffleStart(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("RaffleStartInfo"); }
public int beanCost;
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
try
{
beanCost = Integer.parseInt(input.args);
}
catch(Exception e)
{
beanCost = 100;
}
if(guild.startRaffle(beanCost))
{
res.send(String.format(LocStrings.stub("RaffleStartSuccess"), beanCost));
}
else
{
res.send(LocStrings.stub("RaffleStartFailure"));
}
}
}
+44 -23
View File
@@ -1,15 +1,12 @@
package commands.general;
import java.awt.Color;
import java.util.Random;
import java.util.Stack;
import core.*;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
import core.Command;
import core.LocStrings;
import dataStructures.*;
public class CommandRoll extends Command
{
@@ -23,7 +20,15 @@ public class CommandRoll extends Command
{
try
{
res.send(rollDice(input.args));
KittyEmbed embed = new KittyEmbed();
embed.title = user.name +"'s roll!";
embed.descriptionText = rollDice(input.args);
Random numGen = new Random(user.name.hashCode());
float hue = numGen.nextFloat();
float sat = .7f;
float bright = .7f;
embed.color = Color.getHSBColor(hue, sat, bright);
res.send(embed);
}
catch(Exception e)
{
@@ -35,6 +40,7 @@ public class CommandRoll extends Command
{
Stack<Integer> values = new Stack<Integer>();
Stack<Character> operators = new Stack<Character>();
String steps = "";
for(int i = 0; i < thing.length(); i ++)
{
char current = thing.charAt(i);
@@ -49,7 +55,7 @@ public class CommandRoll extends Command
operators.add(current);
else
{
calculate(values, operators);
steps += "\n" + calculate(values, operators);
operators.add(current);
}
@@ -65,7 +71,7 @@ public class CommandRoll extends Command
else
{
i --;
calculate(values, operators);
steps += "\n" + calculate(values, operators);
}
continue;
@@ -73,7 +79,7 @@ public class CommandRoll extends Command
if(operators.isEmpty() || operators.peek() == '(' || !hasPrecendence(operators.peek(), current))
operators.add(current);
else
calculate(values, operators);
steps += "\n" + calculate(values, operators);
continue;
case ' ':
@@ -114,19 +120,22 @@ public class CommandRoll extends Command
while(operators.size() > 0)
{
calculate(values, operators);
steps += "\n" + calculate(values, operators);
}
return "" + values.pop();
return "Roll```" + thing + "```" + "Steps```" + steps + "```" + "Final value ```" + values.pop() +"```";
}
private void calculate(Stack<Integer> nums, Stack<Character> operators)
private String calculate(Stack<Integer> nums, Stack<Character> operators)
{
int second = nums.pop();
int first = nums.pop();
int rolls[] = null;
int value = 0;
char op = operators.pop();
switch(operators.pop())
switch(op)
{
case '+':
value = first + second;
@@ -141,27 +150,39 @@ public class CommandRoll extends Command
value = first / second;
break;
case 'd':
value = roll(first, second);
rolls = roll(first, second);
for(int i= 0; i < first; i++)
{
value += rolls[i];
}
}
nums.add(value);
if(rolls == null)
return (first + "" + op + "" + second + "=" + value);
String rollValues = "";
for(int i= 0; i < first; i++)
{
rollValues += "\uD83C\uDFB2" + rolls[i] + " ";
}
return (first + "" + op + "" + second + "=" + value + "(" + rollValues.trim() + ")");
}
private int roll(int first, int second)
private int[] roll(int first, int second)
{
int total = 0;
int roll = 0;
int dice = first;
int sides = second;
int [] rolls = new int [sides];
if(dice < 1)
return 0;
return new int[0];
for(int i = 0; dice > i; i ++)
{
roll = (int)(Math.random() * sides) + 1;
total += roll;
rolls[i] = roll;
}
return total;
return rolls;
}
private boolean hasPrecendence(char op1, char op2)
@@ -19,6 +19,7 @@ public class CommandGuildRoleMain extends Command
super(level, rating);
framework.addCommand("add", new SubCommandAdd (KittyRole.General, KittyRating.Safe));
framework.addCommand("remove", new SubCommandRemove(KittyRole.General, KittyRating.Safe));
framework.addCommand("list", new SubCommandList(KittyRole.General, KittyRating.Safe));
framework.addCommand("allowed", new SubCommandAllowed(KittyRole.Admin, KittyRating.Safe));
framework.addCommand("unallowed", new SubCommandNotAllowed(KittyRole.Admin, KittyRating.Safe));
}
@@ -26,12 +27,9 @@ public class CommandGuildRoleMain extends Command
@Override
public String getHelpText() { return LocStrings.stub("GuildRoleInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
framework.run(guild, channel, user, input.args).Call(res);
framework.run(guild, channel, user, input).Call(res);
}
}
+18 -10
View File
@@ -7,30 +7,38 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandAdd extends SubCommand
{
public SubCommandAdd(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
String role = input.split(" ")[0];
if(guild.roleList.contains(role))
String [] roles = input.args.split(",");
String role;
String formatted = "";
for(int i = 0; i < roles.length; i++)
{
if(guild.control.addRole(user.discordID, role))
role = roles[i].trim();
if(guild.roleList.contains(role))
{
return new SubCommandFormattable("ADDED RIN YOU NEED TO FIX THIS");
if(guild.control.addRole(user.discordID, role))
{
formatted += "Addded " + role + "!";
}
else
{
formatted += "Failed to add " + role + "!";
}
}
else
{
return new SubCommandFormattable("FAILED RIN YOU NEED TO FIX THIS TOO");
formatted += "You're not allowed to add " + role + "!";
}
}
else
{
return new SubCommandFormattable("NOT ALLOWED FIX THIS ONE TOO SNEP FACE");
}
return new SubCommandFormattable(formatted);
}
}
@@ -8,15 +8,16 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandAllowed extends SubCommand
{
public SubCommandAllowed(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
String [] roles = input.split(",");
String [] roles = input.args.split(",");
String role;
String formatted = "";
for(int i = 0; i < roles.length; i++)
+2 -1
View File
@@ -8,6 +8,7 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandList extends SubCommand
{
@@ -15,7 +16,7 @@ public class SubCommandList extends SubCommand
public SubCommandList(KittyRole level, KittyRating rating) { super(level, rating);}
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
String roles = "";
if(guild.roleList.isEmpty())
@@ -8,28 +8,36 @@ import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandNotAllowed extends SubCommand
{
public SubCommandNotAllowed(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
input = input.toLowerCase();
String [] roles = input.split(",");
String lowerInput = input.args.toLowerCase();
String [] roles = lowerInput.split(",");
String formatted = "";
if(roles.length < 1)
{
return new SubCommandFormattable(String.format(LocStrings.stub("GuildRoleNotAllowedNoArgs")));
}
for(String role:roles)
{
if(guild.roleList.contains(role.trim()))
{
guild.roleList.remove(role);
return new SubCommandFormattable(LocStrings.stub("GuildRoleNotAllowedSuccess"));
formatted += String.format(LocStrings.stub("GuildRoleNotAllowedSuccess"), role);
}
else
{
return new SubCommandFormattable(String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role));
formatted += String.format(LocStrings.stub("GuildRoleNotAllowedFailure"), role);
}
}
return new SubCommandFormattable(String.format(LocStrings.stub("GuildRoleNotAllowedNoArgs")));
return new SubCommandFormattable(formatted);
}
}
+2 -2
View File
@@ -10,9 +10,9 @@ public class SubCommandRemove extends SubCommand
public SubCommandRemove(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
String role = input.split(" ")[0];
String role = input.args.split(" ")[0];
String formatted = "";
if(guild.roleList.contains(role))
{
+33
View File
@@ -0,0 +1,33 @@
package commands.mod;
import core.Command;
import core.LocStrings;
import core.SubCommandFramework;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandModMain extends Command
{
SubCommandFramework framework = new SubCommandFramework();
public CommandModMain(KittyRole level, KittyRating rating)
{
super(level, rating);
framework.addCommand("kick", new SubCommandKick(KittyRole.Admin, KittyRating.Safe));
framework.addCommand("mute", new SubCommandMute(KittyRole.Admin, KittyRating.Safe));
framework.addCommand("ban", new SubCommandBan(KittyRole.Admin, KittyRating.Safe));
}
@Override
public String getHelpText() { return LocStrings.stub("GuildRoleInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
framework.run(guild, channel, user, input).Call(res);
}
}
+21
View File
@@ -0,0 +1,21 @@
package commands.mod;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandBan extends SubCommand
{
public SubCommandBan(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable(guild.control.banMember(input.mentions[0].discordID) + " ");
}
}
+25
View File
@@ -0,0 +1,25 @@
package commands.mod;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandKick extends SubCommand
{
public SubCommandKick(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
if(guild.control.kickMember(input.mentions[0].discordID))
{
return new SubCommandFormattable("Success");
}
return new SubCommandFormattable("Fail");
}
}
+21
View File
@@ -0,0 +1,21 @@
package commands.mod;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandMute extends SubCommand
{
public SubCommandMute(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable("" + guild.control.muteMember(input.mentions[0].avatarID));
}
}
+26
View File
@@ -0,0 +1,26 @@
package commands.music;
import core.Command;
import core.LocStrings;
import core.SubCommandFramework;
import dataStructures.*;
public class CommandMusicMain extends Command
{
SubCommandFramework framework = new SubCommandFramework();
public CommandMusicMain(KittyRole level, KittyRating rating)
{
super(level, rating);
framework.addCommand("join", new SubCommandJoin(KittyRole.General, KittyRating.Safe));
framework.addCommand("leave", new SubCommandLeave(KittyRole.General, KittyRating.Safe));
}
@Override
public String getHelpText() { return LocStrings.stub("MusicInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
framework.run(guild, channel, user, input).Call(res);
}
}
@@ -0,0 +1,25 @@
package commands.music;
import com.google.api.services.youtube.YouTube;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandAddTrack extends SubCommand
{
public SubCommandAddTrack(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return null;
}
}
+21
View File
@@ -0,0 +1,21 @@
package commands.music;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandJoin extends SubCommand
{
public SubCommandJoin(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable("" + guild.audio.joinChannel(input.args));
}
}
+21
View File
@@ -0,0 +1,21 @@
package commands.music;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandLeave extends SubCommand
{
public SubCommandLeave(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable("" + guild.audio.leaveChannel());
}
}
+34
View File
@@ -0,0 +1,34 @@
package commands.poll;
import core.Command;
import core.SubCommandFramework;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.Response;
import dataStructures.UserInput;
public class CommandPollMain extends Command
{
SubCommandFramework framework = new SubCommandFramework();
public CommandPollMain(KittyRole level, KittyRating rating)
{
super(level, rating);
framework.addCommand("start", new SubCommandStart(KittyRole.Mod, KittyRating.Safe));
framework.addCommand("addoption", new SubCommandAddOption(KittyRole.Mod, KittyRating.Safe));
framework.addCommand("end", new SubCommandEnd(KittyRole.Mod, KittyRating.Safe));
framework.addCommand("show", new SubCommandShow(KittyRole.General, KittyRating.Safe));
framework.addCommand("results", new SubCommandResults(KittyRole.General, KittyRating.Safe));
framework.addCommand("vote", new SubCommandVote(KittyRole.General, KittyRating.Safe));
}
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
framework.run(guild, channel, user, input).Call(res);
}
}
@@ -0,0 +1,23 @@
package commands.poll;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandAddOption extends SubCommand
{
public SubCommandAddOption(KittyRole roleLevel, KittyRating contentRating) {super(roleLevel, contentRating);}
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable (guild.addChoiceToPoll(input.args));
}
}
+23
View File
@@ -0,0 +1,23 @@
package commands.poll;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandEnd extends SubCommand
{
public SubCommandEnd(KittyRole roleLevel, KittyRating contentRating) {super(roleLevel, contentRating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable (guild.endPoll());
}
}
@@ -1,36 +1,33 @@
package commands.general;
import java.util.ArrayList;
import core.*;
import dataStructures.*;
public class CommandPollResults extends Command
{
public CommandPollResults(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public String getHelpText() { return LocStrings.stub("PollResultsInfo"); }
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
String results = "";
int totalVotes = 0;
ArrayList<KittyPoll> votes = guild.choices;
for(int i = 0; i < votes.size(); i++)
{
totalVotes += votes.get(i).votes;
}
results += "The poll was " + guild.poll + "\n";
for(int i = 0; i < votes.size(); i++)
{
results += String.format(LocStrings.stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100));
}
res.send(results);
}
}
package commands.poll;
import java.util.ArrayList;
import core.*;
import dataStructures.*;
public class SubCommandResults extends SubCommand
{
public SubCommandResults(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
String results = "";
int totalVotes = 0;
ArrayList<KittyPoll> votes = guild.choices;
for(int i = 0; i < votes.size(); i++)
{
totalVotes += votes.get(i).votes;
}
results += "The poll was " + guild.poll + "\n";
for(int i = 0; i < votes.size(); i++)
{
results += String.format(LocStrings.stub("PollResultsResponse"), votes.get(i).votes, votes.get(i).choice, (int)(((double)votes.get(i).votes) / ((double)totalVotes) * 100)) + "\n";
}
return new SubCommandFormattable (results);
}
}
+34
View File
@@ -0,0 +1,34 @@
package commands.poll;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandShow extends SubCommand
{
public SubCommandShow(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
if(!guild.polling)
{
return new SubCommandFormattable (LocStrings.stub("PollShowNoPoll"));
}
String poll = String.format(LocStrings.stub("PollShowPoll"), guild.poll);
poll += LocStrings.stub("PollShowChoices");
for(int i = 0; i < guild.choices.size(); i++)
{
poll += (i+1) + ": `" + guild.choices.get(i).choice + "`\n";
}
return new SubCommandFormattable (poll);
}
}
+23
View File
@@ -0,0 +1,23 @@
package commands.poll;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandStart extends SubCommand
{
public SubCommandStart(KittyRole roleLevel, KittyRating contentRating) {super(roleLevel, contentRating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
return new SubCommandFormattable (guild.startPoll(input.args));
}
}
+48
View File
@@ -0,0 +1,48 @@
package commands.poll;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyPoll;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandVote extends SubCommand
{
public SubCommandVote(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
if(guild.polling)
{
if(guild.hasVoted.contains(user.uniqueID))
{
return new SubCommandFormattable (LocStrings.stub("PollVoteAlreadyVoted"));
}
try
{
int voteNum = Integer.parseInt(input.args.substring(input.args.indexOf(" ")).trim())-1;
if(voteNum >= guild.choices.size() || voteNum < 0)
{
return new SubCommandFormattable (String.format(LocStrings.stub("PollVoteNotValidVote"), voteNum));
}
KittyPoll polled = guild.choices.get(voteNum);
polled.votes++;
guild.hasVoted.add(user.uniqueID);
return new SubCommandFormattable (LocStrings.stub("PollVoteSuccess") + " `" + polled.choice + "`!");
}
catch (NumberFormatException e)
{
return new SubCommandFormattable (LocStrings.stub("PollVoteNotValidNumber"));
}
}
return new SubCommandFormattable (LocStrings.stub("PollVoteNoPoll"));
}
}
@@ -0,0 +1,24 @@
package commands.raffle;
import core.Command;
import core.SubCommandFramework;
import dataStructures.*;
public class CommandRaffleMain extends Command
{
SubCommandFramework framework = new SubCommandFramework();
public CommandRaffleMain(KittyRole level, KittyRating rating)
{
super(level, rating);
framework.addCommand("start", new SubCommandStart(KittyRole.Mod, KittyRating.Safe));
framework.addCommand("spin", new SubCommandSpin(KittyRole.Mod, KittyRating.Safe));
framework.addCommand("end", new SubCommandEnd(KittyRole.Mod, KittyRating.Safe));
framework.addCommand("join", new SubCommandJoin(KittyRole.General, KittyRating.Safe));
}
@Override
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
{
framework.run(guild, channel, user, input).Call(res);
}
}
+29
View File
@@ -0,0 +1,29 @@
package commands.raffle;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandEnd extends SubCommand
{
public SubCommandEnd(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
if(guild.endRaffle())
{
return new SubCommandFormattable (LocStrings.stub("RaffleEndSuccess"));
}
else
{
return new SubCommandFormattable (LocStrings.stub("RaffleEndFailure"));
}
}
}
+29
View File
@@ -0,0 +1,29 @@
package commands.raffle;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandJoin extends SubCommand
{
public SubCommandJoin(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
if(guild.joinRaffle(user))
{
return new SubCommandFormattable (LocStrings.stub("RaffleJoinSuccess"));
}
else
{
return new SubCommandFormattable (LocStrings.stub("RaffleJoinFailure"));
}
}
}
+29
View File
@@ -0,0 +1,29 @@
package commands.raffle;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandSpin extends SubCommand
{
public SubCommandSpin(KittyRole level, KittyRating rating) { super(level, rating); }
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
try
{
return new SubCommandFormattable (String.format(LocStrings.stub("RaffleSpinSuccess"), guild.chooseRaffleWinner().name));
}
catch(Exception e)
{
return new SubCommandFormattable (LocStrings.stub("RaffleSpinFailure"));
}
}
}
+40
View File
@@ -0,0 +1,40 @@
package commands.raffle;
import core.LocStrings;
import core.SubCommand;
import core.SubCommandFormattable;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
import dataStructures.KittyRole;
import dataStructures.KittyUser;
import dataStructures.UserInput;
public class SubCommandStart extends SubCommand
{
public SubCommandStart(KittyRole level, KittyRating rating) { super(level, rating); }
public int beanCost;
@Override
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
try
{
beanCost = Integer.parseInt(input.args);
}
catch(Exception e)
{
beanCost = 100;
}
if(guild.startRaffle(beanCost))
{
return new SubCommandFormattable (String.format(LocStrings.stub("RaffleStartSuccess"), beanCost));
}
else
{
return new SubCommandFormattable (LocStrings.stub("RaffleStartFailure"));
}
}
}
+51 -10
View File
@@ -1,11 +1,56 @@
package core;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import commands.characters.CommandCharacterMain;
import commands.general.*;
import commands.general.CommandBeansShow;
import commands.general.CommandBenchmark;
import commands.general.CommandBetBeans;
import commands.general.CommandBetHistory;
import commands.general.CommandBlurry;
import commands.general.CommandBoop;
import commands.general.CommandCatch;
import commands.general.CommandChangeIndicator;
import commands.general.CommandChoose;
import commands.general.CommandColiru;
import commands.general.CommandColor;
import commands.general.CommandCrouton;
import commands.general.CommandDBFlush;
import commands.general.CommandDBStats;
import commands.general.CommandDoWork;
import commands.general.CommandEightBall;
import commands.general.CommandFetch;
import commands.general.CommandGiveBeans;
import commands.general.CommandHelp;
import commands.general.CommandHelpBuilder;
import commands.general.CommandInfo;
import commands.general.CommandInvite;
import commands.general.CommandJDoodle;
import commands.general.CommandLeaderboard;
import commands.general.CommandMap;
import commands.general.CommandPerish;
import commands.general.CommandPing;
import commands.general.CommandRPEnd;
import commands.general.CommandRPG;
import commands.general.CommandRPStart;
import commands.general.CommandRating;
import commands.general.CommandRemind;
import commands.general.CommandRole;
import commands.general.CommandRoll;
import commands.general.CommandShutdown;
import commands.general.CommandStark;
import commands.general.CommandStats;
import commands.general.CommandTeey;
import commands.general.CommandTweet;
import commands.general.CommandWolfram;
import commands.general.CommandYeet;
import commands.guildrole.CommandGuildRoleMain;
import commands.mod.CommandModMain;
import commands.music.CommandMusicMain;
import commands.poll.CommandPollMain;
import commands.raffle.CommandRaffleMain;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyRating;
@@ -70,12 +115,9 @@ public class CommandManager
this.register(LocCommands.stub("indicator"), new CommandChangeIndicator(KittyRole.Admin, KittyRating.Safe));
// Mod
this.register(LocCommands.stub("poll"), new CommandPollManage(KittyRole.Mod, KittyRating.Safe));
this.register(LocCommands.stub("givebeans"), new CommandGiveBeans(KittyRole.Mod, KittyRating.Safe));
this.register(LocCommands.stub("rpg"), new CommandRPG(KittyRole.Mod, KittyRating.Safe));
this.register(LocCommands.stub("rafflestart"), new CommandRaffleStart(KittyRole.Mod, KittyRating.Safe));
this.register(LocCommands.stub("rafflespin"), new CommandRaffleSpin(KittyRole.Mod, KittyRating.Safe));
this.register(LocCommands.stub("raffleend"), new CommandRaffleEnd(KittyRole.Mod, KittyRating.Safe));
this.register(LocCommands.stub("mod"), new CommandModMain(KittyRole.Mod, KittyRating.Safe));
// General
this.register(LocCommands.stub("fetch"), new CommandFetch(KittyRole.General, KittyRating.Safe));
@@ -88,9 +130,6 @@ public class CommandManager
this.register(LocCommands.stub("choose"), new CommandChoose(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("help"), new CommandHelp(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("info, about"), new CommandInfo(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("vote"), new CommandPollVote(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("results"), new CommandPollResults(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("showpoll"), new CommandPollShow(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("wolfram"), new CommandWolfram(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("c++, g++, cplus, cpp"), new CommandColiru(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("java, jdoodle"), new CommandJDoodle(KittyRole.General, KittyRating.Safe));
@@ -107,12 +146,14 @@ public class CommandManager
this.register(LocCommands.stub("bethistory"), new CommandBetHistory(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("crouton"), new CommandCrouton(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("benchmark, bench"), new CommandBenchmark(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("rafflejoin"), new CommandRaffleJoin(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("leaderboard"), new CommandLeaderboard(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("color, colour"), new CommandColor(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("remind"), new CommandRemind(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("role"), new CommandGuildRoleMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("character"), new CommandCharacterMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("raffle"), new CommandRaffleMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("poll"), new CommandPollMain(KittyRole.General, KittyRating.Safe));
this.register(LocCommands.stub("music"), new CommandMusicMain(KittyRole.General, KittyRating.Safe));
}
// Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands)
+9 -1
View File
@@ -7,6 +7,9 @@ import java.util.concurrent.Semaphore;
import javax.security.auth.login.LoginException;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
import core.lua.PluginManager;
import dataStructures.*;
import main.Main;
@@ -17,6 +20,7 @@ import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import offline.Ref;
import utils.AdminControl;
import utils.AudioUtils;
import utils.GlobalLog;
import utils.LogFilter;
@@ -50,6 +54,9 @@ public class ObjectBuilderFactory
// Command manager
private static CommandManager commandManager;
//Audio track manager
private static AudioPlayerManager audioPlayer = new DefaultAudioPlayerManager();
// Localization classes - these are singletons, but should be initialized before almost all other
// things so their inclusion in the factory is to ensure they're started at the correct time.
@SuppressWarnings("unused") private static LocStrings locStrings;
@@ -140,7 +147,8 @@ public class ObjectBuilderFactory
else
{
// Construct a new guild with defaults
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString);
guild = new KittyGuild(uid, new AdminControl(event.getGuild()), emotesString,
new AudioUtils(event.getGuild(), audioPlayer.createPlayer()));
DatabaseManager.instance.globalRegister(guild);
guildCache.put(uid, guild);
}
+4 -4
View File
@@ -42,12 +42,12 @@ public abstract class SubCommand
// Called by the Command manager - this will run the command
// if the issuing user has the permission to do so!
protected final void Invoke(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
protected final SubCommandFormattable Invoke(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
if(!CanCall(guild, channel, user))
return;
return null;
OnRun(guild, channel, user, input);
return OnRun(guild, channel, user, input);
}
public KittyRating Rating()
@@ -60,5 +60,5 @@ public abstract class SubCommand
return roleLevel;
}
public abstract SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, String input);
public abstract SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input);
}
+18 -5
View File
@@ -5,6 +5,7 @@ import java.util.HashMap;
import dataStructures.KittyChannel;
import dataStructures.KittyGuild;
import dataStructures.KittyUser;
import dataStructures.UserInput;
import utils.GlobalLog;
public class SubCommandFramework
@@ -25,10 +26,22 @@ public class SubCommandFramework
GlobalLog.log("Registered SubCommand " + name);
}
public SubCommandFormattable run(KittyGuild guild, KittyChannel channel, KittyUser user, String input)
public SubCommandFormattable run(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
{
System.out.print(input);
SubCommandFormattable res = commands.get(input.split(" ")[0].toLowerCase()).OnRun(guild, channel, user, input.substring(input.indexOf(" ")));
return res;
SubCommand res = commands.get(input.args.split(" ")[0].toLowerCase());
try
{
input.args = input.args.substring(input.args.indexOf(' ')).trim();
}
catch(Exception e){}
try
{
return res.Invoke(guild, channel, user, input);
}
catch(Exception e)
{
return new SubCommandFormattable("That's not a valid subcommand!");
}
}
}
}
+4 -1
View File
@@ -5,6 +5,7 @@ import java.util.ArrayList;
import core.DatabaseManager;
import core.DatabaseTrackedObject;
import utils.AdminControl;
import utils.AudioUtils;
// Context for a given guild for kittybot. Primarily designed to hold guild-specific settings.
public class KittyGuild extends DatabaseTrackedObject
@@ -21,6 +22,7 @@ public class KittyGuild extends DatabaseTrackedObject
public ArrayList<String> emoji = new ArrayList<String>();
public ArrayList <KittyPoll> choices = new ArrayList<KittyPoll>();
public AdminControl control;
public AudioUtils audio;
public ArrayList <KittyUser> raffleUsersUnchosen = new ArrayList<KittyUser>();
public ArrayList <KittyUser> raffleUsersChosen = new ArrayList<KittyUser>();
@@ -40,7 +42,7 @@ public class KittyGuild extends DatabaseTrackedObject
}
// Default content for a guild
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji)
public KittyGuild(String uniqueID, AdminControl adminControl, ArrayList <String> emoji, AudioUtils audio)
{
super(uniqueID);
this.uniqueID = uniqueID;
@@ -52,6 +54,7 @@ public class KittyGuild extends DatabaseTrackedObject
this.contentRating = KittyRating.Safe;
this.polling = false;
this.emoji = emoji;
this.audio = audio;
setCommandIndicator("!");
}
+14
View File
@@ -0,0 +1,14 @@
package network;
import com.google.api.services.youtube.YouTube;
import offline.Ref;
public class NetworkYoutube
{
private static YouTube youtube;
public NetworkYoutube()
{
}
}
+39
View File
@@ -39,4 +39,43 @@ public class AdminControl
}
return true;
}
public boolean kickMember(String memberID)
{
try
{
guildCon.kick(guild.getMemberById(memberID)).complete();
}
catch(Exception e)
{
return false;
}
return true;
}
public boolean muteMember(String memberID)
{
try
{
guildCon.setMute(guild.getMemberById(memberID), true);
return true;
}
catch(Exception e)
{
return false;
}
}
public boolean banMember(String memberID)
{
try
{
guildCon.ban(guild.getMemberById(memberID), 0).complete();
return true;
}
catch(Exception e)
{
return false;
}
}
}
+48
View File
@@ -0,0 +1,48 @@
package utils;
/***
* https://developers.google.com/youtube/v3/code_samples/code_snippets?apix_params=%7B%22part%22%3A%22snippet%22%2C%22maxResults%22%3A25%2C%22q%22%3A%22surfing%22%7D
* https://github.com/sedmelluq/LavaPlayer#jda-integration
* https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/core/entities/VoiceChannel.html
* https://developers.google.com/youtube/registering_an_application#Create_API_Keys
*/
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.VoiceChannel;
import net.dv8tion.jda.core.managers.AudioManager;
public class AudioUtils
{
private Guild guild;
AudioManager audio;
AudioPlayer player;
public AudioUtils(Guild guild)
{
this.guild = guild;
audio = guild.getAudioManager();
}
public boolean joinChannel(String channelName)
{
VoiceChannel channel = null;
channel = guild.getVoiceChannelsByName(channelName, true).get(0);
if(channel != null)
{
audio.openAudioConnection(channel);
return true;
}
return false;
}
public boolean leaveChannel()
{
if(audio.isConnected())
{
audio.closeAudioConnection();
return true;
}
return false;
}
}