Compare commits
83
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d481fec0af | ||
|
|
127bdb74fb | ||
|
|
2b53b01178 | ||
|
|
36445d618c | ||
|
|
c168ef8ecb | ||
|
|
f6b35109bf | ||
|
|
e3ddf5d10e | ||
|
|
03d03e629d | ||
|
|
59009a2408 | ||
|
|
37ecb12ae1 | ||
|
|
0e92eb5075 | ||
|
|
edaf312a93 | ||
|
|
2872ab8b03 | ||
|
|
6ddb0fc532 | ||
|
|
20a16f2c74 | ||
|
|
67f1e083e9 | ||
|
|
b917a3b4ee | ||
|
|
39abf08b35 | ||
|
|
d86adaf3e2 | ||
|
|
cab2370f89 | ||
|
|
d0d2b9498d | ||
|
|
4c4835e342 | ||
|
|
844edc8084 | ||
|
|
2981a7bdc4 | ||
|
|
6ff38f09eb | ||
|
|
ef4b216cb3 | ||
|
|
0d3c16c4da | ||
|
|
99e3566188 | ||
|
|
0728370bf2 | ||
|
|
fa5057ea9e | ||
|
|
02f9b09199 | ||
|
|
9ec1198969 | ||
|
|
dc56532ed0 | ||
|
|
22f8e0b9df | ||
|
|
3e48056b15 | ||
|
|
6be6bd4033 | ||
|
|
462f23274e | ||
|
|
1a2366f5ee | ||
|
|
a77725791a | ||
|
|
c0f0b16892 | ||
|
|
d5346b3727 | ||
|
|
26b258bdcb | ||
|
|
bcc7959c00 | ||
|
|
de2f3f4515 | ||
|
|
c8061770ed | ||
|
|
10c0fa58b2 | ||
|
|
35c74e89f4 | ||
|
|
2c6091a258 | ||
|
|
86d7e58838 | ||
|
|
0d4015fff0 | ||
|
|
3a03793124 | ||
|
|
46cf6f8c97 | ||
|
|
a63afd3a2b | ||
|
|
d15336f4b6 | ||
|
|
d63a531a81 | ||
|
|
c8af9da196 | ||
|
|
595b1e3958 | ||
|
|
d6fd5ae436 | ||
|
|
74a5750824 | ||
|
|
7f2251732e | ||
|
|
ee60721897 | ||
|
|
d656ccb323 | ||
|
|
6e7b6fce29 | ||
|
|
55487a017e | ||
|
|
c7ed9785dc | ||
|
|
7b179b10ee | ||
|
|
bd1bcc1bd3 | ||
|
|
462bb58ead | ||
|
|
6a84f3759a | ||
|
|
dfbf646abc | ||
|
|
12e0ec98bd | ||
|
|
0ff71abfb0 | ||
|
|
94a3f1afcd | ||
|
|
4d36bb0cb9 | ||
|
|
248814b9e3 | ||
|
|
a1fa8b29b2 | ||
|
|
4ed18b8acc | ||
|
|
afb27df33d | ||
|
|
8cfa25a51b | ||
|
|
bbbb138f5e | ||
|
|
343308c433 | ||
|
|
52fdaefe75 | ||
|
|
a73fca7851 |
+4
-2
@@ -12,7 +12,6 @@
|
|||||||
<classpathentry kind="lib" path="lib/httpclient-4.5.5.jar"/>
|
<classpathentry kind="lib" path="lib/httpclient-4.5.5.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/httpcore-4.4.9.jar"/>
|
<classpathentry kind="lib" path="lib/httpcore-4.4.9.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/WolframAlpha-1.1.jar"/>
|
<classpathentry kind="lib" path="lib/WolframAlpha-1.1.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/JDA-3.7.1_385-withDependencies.jar"/>
|
|
||||||
<classpathentry kind="lib" path="lib/sqlite-jdbc-3.23.1.jar"/>
|
<classpathentry kind="lib" path="lib/sqlite-jdbc-3.23.1.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/slf4j-jdk14-1.7.25.jar"/>
|
<classpathentry kind="lib" path="lib/slf4j-jdk14-1.7.25.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/twitter4j-core-4.0.7-javadoc.jar"/>
|
<classpathentry kind="lib" path="lib/twitter4j-core-4.0.7-javadoc.jar"/>
|
||||||
@@ -24,7 +23,10 @@
|
|||||||
<classpathentry kind="lib" path="lib/commons-collections4-4.3.jar"/>
|
<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-lang3-3.9.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/commons-text-1.6.jar"/>
|
<classpathentry kind="lib" path="lib/commons-text-1.6.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/google-http-client-1.32.0.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/google-api-services-youtube-v3-rev212-1.25.0.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="lib" path="lib/nanohttpd-2.3.1.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/LavaPlayerJar-1.3.50-jar-with-dependencies.jar"/>
|
||||||
|
<classpathentry kind="lib" path="lib/JDA-4.2.0_168-withDependencies.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|||||||
@@ -68,3 +68,5 @@ rP\.txt
|
|||||||
*.log
|
*.log
|
||||||
|
|
||||||
cloc\.exe
|
cloc\.exe
|
||||||
|
|
||||||
|
beanImage.png
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
+23
-8
@@ -1,4 +1,6 @@
|
|||||||
"Type","Key","Value"
|
"Type","Key","Value"
|
||||||
|
"Globals","mode (dev or release)","dev"
|
||||||
|
"Globals","activity","with a laser pointer"
|
||||||
"Localized Commands","beans",""
|
"Localized Commands","beans",""
|
||||||
"Localized Commands","benchmark, bench",""
|
"Localized Commands","benchmark, bench",""
|
||||||
"Localized Commands","bet",""
|
"Localized Commands","bet",""
|
||||||
@@ -16,10 +18,12 @@
|
|||||||
"Localized Commands","dbstats",""
|
"Localized Commands","dbstats",""
|
||||||
"Localized Commands","defaultdance",""
|
"Localized Commands","defaultdance",""
|
||||||
"Localized Commands","derp",""
|
"Localized Commands","derp",""
|
||||||
"Localized Commands","dew",""
|
"Localized Commands","derpi",""
|
||||||
|
"Localized Commands","e6",""
|
||||||
"Localized Commands","e621",""
|
"Localized Commands","e621",""
|
||||||
"Localized Commands","eightball, 8ball",""
|
"Localized Commands","eightball, 8ball",""
|
||||||
"Localized Commands","fetch",""
|
"Localized Commands","fetch",""
|
||||||
|
"Localized Commands","getsauce",""
|
||||||
"Localized Commands","givebeans",""
|
"Localized Commands","givebeans",""
|
||||||
"Localized Commands","help",""
|
"Localized Commands","help",""
|
||||||
"Localized Commands","indicator",""
|
"Localized Commands","indicator",""
|
||||||
@@ -47,13 +51,15 @@
|
|||||||
"Localized Commands","stats",""
|
"Localized Commands","stats",""
|
||||||
"Localized Commands","teey",""
|
"Localized Commands","teey",""
|
||||||
"Localized Commands","tony, stark, dontfeelgood, dontfeelsogood","tony, stark, dontfeelgood, dontfeelsogood, snap"
|
"Localized Commands","tony, stark, dontfeelgood, dontfeelsogood","tony, stark, dontfeelgood, dontfeelsogood, snap"
|
||||||
|
"Localized Commands","tradebeans, trade",""
|
||||||
"Localized Commands","tweet",""
|
"Localized Commands","tweet",""
|
||||||
"Localized Commands","vote",""
|
"Localized Commands","vote",""
|
||||||
"Localized Commands","weh",""
|
|
||||||
"Localized Commands","wolfram",""
|
"Localized Commands","wolfram",""
|
||||||
"Localized Commands","work",""
|
"Localized Commands","work",""
|
||||||
"Localized Commands","yeet",""
|
"Localized Commands","yeet",""
|
||||||
"Localized Strings","AddGuildRoleFailure","Failed to add %s to %s"
|
"Localized Strings","AddGuildRoleFailure","Failed to add %s to %s"
|
||||||
|
"Localized Strings","BeansImageBottomText","BEANS"
|
||||||
|
"Localized Strings","BeansImageTopText","YOU HAVE"
|
||||||
"Localized Strings","BeansShowDisplay","You have %s beans!"
|
"Localized Strings","BeansShowDisplay","You have %s beans!"
|
||||||
"Localized Strings","BeansShowInfo","Displays how many beans you have"
|
"Localized Strings","BeansShowInfo","Displays how many beans you have"
|
||||||
"Localized Strings","BeansShowMentioned","I took a look and %sbeans!"
|
"Localized Strings","BeansShowMentioned","I took a look and %sbeans!"
|
||||||
@@ -62,12 +68,13 @@
|
|||||||
"Localized Strings","BetBeansInfo","Allows you to bet your beans, set your amount after the command! Warning! House always wins!nSets of 3 will get 2x, 4 will get 10x, and 5 will get 1000x"
|
"Localized Strings","BetBeansInfo","Allows you to bet your beans, set your amount after the command! Warning! House always wins!nSets of 3 will get 2x, 4 will get 10x, and 5 will get 1000x"
|
||||||
"Localized Strings","BetBeansLose","Sorry, you didn't win, try again!"
|
"Localized Strings","BetBeansLose","Sorry, you didn't win, try again!"
|
||||||
"Localized Strings","BetBeansLowBet","Please bet with at least 20 beans!"
|
"Localized Strings","BetBeansLowBet","Please bet with at least 20 beans!"
|
||||||
"Localized Strings","BetBeansMinThreshold","50"
|
"Localized Strings","BetBeansMinThreshold",""
|
||||||
"Localized Strings","BetBeansNotEnough","You don't have enough beans!"
|
"Localized Strings","BetBeansNotEnough","You don't have enough beans!"
|
||||||
"Localized Strings","BetBeansNotValid","That's not a valid bet!"
|
"Localized Strings","BetBeansNotValid","That's not a valid bet!"
|
||||||
"Localized Strings","BetBeansWin","You won %s beans!"
|
"Localized Strings","BetBeansWin","You won %s beans!"
|
||||||
"Localized Strings","BetHistoryInfo","Gives how many beans I've ~~stolen~~ won from your bets!"
|
"Localized Strings","BetHistoryInfo","Gives how many beans I've ~~stolen~~ won from your bets!"
|
||||||
"Localized Strings","BetHistoryOutput","I have %s treats from betting!"
|
"Localized Strings","BetHistoryOptionalPNGPath",""
|
||||||
|
"Localized Strings","BetHistoryOutput","I have %s beans from betting!"
|
||||||
"Localized Strings","BlurryInfo","Blurs your icon or the icon of a friend you mentioned"
|
"Localized Strings","BlurryInfo","Blurs your icon or the icon of a friend you mentioned"
|
||||||
"Localized Strings","BoopInfo","Kitty will react with a counter"
|
"Localized Strings","BoopInfo","Kitty will react with a counter"
|
||||||
"Localized Strings","BoopMultiple","%s booped several others - %s!"
|
"Localized Strings","BoopMultiple","%s booped several others - %s!"
|
||||||
@@ -110,9 +117,10 @@
|
|||||||
"Localized Strings","DBFlushInfo","Takes all objects queued for the database and writes them to the database, then says how many were written."
|
"Localized Strings","DBFlushInfo","Takes all objects queued for the database and writes them to the database, then says how many were written."
|
||||||
"Localized Strings","DBStatsInfo","Shows current statistics for the database"
|
"Localized Strings","DBStatsInfo","Shows current statistics for the database"
|
||||||
"Localized Strings","DefaultDanceInfo","y'all know forknife, get ready to dance, or make a friend dance with @!"
|
"Localized Strings","DefaultDanceInfo","y'all know forknife, get ready to dance, or make a friend dance with @!"
|
||||||
"Localized Strings","DewInfo","A fun little dev experiment!"
|
"Localized Strings","DerpiError",""
|
||||||
"Localized Strings","DoWorkFinished","I finished with my work! :D"
|
"Localized Strings","DoWorkFinished","I finished with my work! :D"
|
||||||
"Localized Strings","DoWorkInfo","Occupies a core for a few seconds"
|
"Localized Strings","DoWorkInfo","Occupies a core for a few seconds"
|
||||||
|
"Localized Strings","E6Blacklisted","I can't show that image ;3; (it may be blacklisted)"
|
||||||
"Localized Strings","EightBallError","Hmm? You'll need to ask a question!"
|
"Localized Strings","EightBallError","Hmm? You'll need to ask a question!"
|
||||||
"Localized Strings","EightBallInfo","Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges."
|
"Localized Strings","EightBallInfo","Answers a yes or no question! Warning: Kitty can not actually tell the future, she claims no responsibility for any lion mauling, lack of lottery wins, or felony charges."
|
||||||
"Localized Strings","EightBallMaybe1","Reply hazy, try again."
|
"Localized Strings","EightBallMaybe1","Reply hazy, try again."
|
||||||
@@ -143,6 +151,7 @@
|
|||||||
"Localized Strings","FetchInfo","Throw a custom emote and I'll try to bring it back.... maybe"
|
"Localized Strings","FetchInfo","Throw a custom emote and I'll try to bring it back.... maybe"
|
||||||
"Localized Strings","FetchRunAway","*Runs away and doesn't return for a long time*"
|
"Localized Strings","FetchRunAway","*Runs away and doesn't return for a long time*"
|
||||||
"Localized Strings","FetchStare","*Stares at %s*"
|
"Localized Strings","FetchStare","*Stares at %s*"
|
||||||
|
"Localized Strings","GetSauceInfo",""
|
||||||
"Localized Strings","GiveBeansInfo","Gives beans to the mentioned users!"
|
"Localized Strings","GiveBeansInfo","Gives beans to the mentioned users!"
|
||||||
"Localized Strings","GiveBeansInvalid","That's not a valid number!"
|
"Localized Strings","GiveBeansInvalid","That's not a valid number!"
|
||||||
"Localized Strings","GiveBeansNoneMentioned","You didn't mention anyone!"
|
"Localized Strings","GiveBeansNoneMentioned","You didn't mention anyone!"
|
||||||
@@ -182,7 +191,11 @@
|
|||||||
"Localized Strings","MapVersion","Using mapgen v0.1"
|
"Localized Strings","MapVersion","Using mapgen v0.1"
|
||||||
"Localized Strings","MapWidth",""
|
"Localized Strings","MapWidth",""
|
||||||
"Localized Strings","ModInfo","Mod is a super command for admin or mod use only!\n\t`mod ban @user` will ban a user from the server\n\t`mod kick @user` will kick the user from the server"
|
"Localized Strings","ModInfo","Mod is a super command for admin or mod use only!\n\t`mod ban @user` will ban a user from the server\n\t`mod kick @user` will kick the user from the server"
|
||||||
|
"Localized Strings","MusicAddTrack",""
|
||||||
"Localized Strings","MusicInfo",""
|
"Localized Strings","MusicInfo",""
|
||||||
|
"Localized Strings","MusicVolChanged","Volume set to %s!"
|
||||||
|
"Localized Strings","MusicVolCurrent","Volume is at %s!"
|
||||||
|
"Localized Strings","MusicVolOOB",""
|
||||||
"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","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","PingInfo","Will respond with Pong!"
|
||||||
"Localized Strings","PingResponse","Pong!"
|
"Localized Strings","PingResponse","Pong!"
|
||||||
@@ -238,13 +251,13 @@
|
|||||||
"Localized Strings","TeeyInfo","Teey yourself back into existance, or teey a friend with @!"
|
"Localized Strings","TeeyInfo","Teey yourself back into existance, or teey a friend with @!"
|
||||||
"Localized Strings","TradeBeansInfo","Give your friends some of your beans! Just don't forget to @ them!"
|
"Localized Strings","TradeBeansInfo","Give your friends some of your beans! Just don't forget to @ them!"
|
||||||
"Localized Strings","TradeBeansIntParseError","That's not a real number! D:"
|
"Localized Strings","TradeBeansIntParseError","That's not a real number! D:"
|
||||||
|
"Localized Strings","TradeBeansMultipleUsersTagged",""
|
||||||
"Localized Strings","TradeBeansNoTargetError","Don't forget to tag who you want to give the beans to!"
|
"Localized Strings","TradeBeansNoTargetError","Don't forget to tag who you want to give the beans to!"
|
||||||
"Localized Strings","TradeBeansNotEnoughError","You can't give more beans than you have!"
|
"Localized Strings","TradeBeansNotEnoughError","You can't give more beans than you have!"
|
||||||
"Localized Strings","TradeBeansStealingBeans","Hey %s! Stealing is wrong! Let's see how you like it! *steals 10 beans*"
|
"Localized Strings","TradeBeansStealingBeans","Hey %s! Stealing is wrong! Let's see how you like it! *steals 10 beans*"
|
||||||
"Localized Strings","TradeBeansSuccess","%s gave %s %s beans!"
|
"Localized Strings","TradeBeansSuccess","%s gave %s %s beans!"
|
||||||
"Localized Strings","TweetError","Tweet command failed!"
|
"Localized Strings","TweetError","Tweet command failed!"
|
||||||
"Localized Strings","TweetInfo","Kitty will tweet to her personal twitter account"
|
"Localized Strings","TweetInfo","Kitty will tweet to her personal twitter account"
|
||||||
"Localized Strings","WehInfo","Weh"
|
|
||||||
"Localized Strings","WolframError","Something went wrong!"
|
"Localized Strings","WolframError","Something went wrong!"
|
||||||
"Localized Strings","WolframInfo","Will query wolframalpha with your question and give a full image output of the answer"
|
"Localized Strings","WolframInfo","Will query wolframalpha with your question and give a full image output of the answer"
|
||||||
"Localized Strings","WolframNoArgs","You need to provide some arguments!"
|
"Localized Strings","WolframNoArgs","You need to provide some arguments!"
|
||||||
@@ -272,10 +285,12 @@
|
|||||||
"Command Enabler","dbstats","1"
|
"Command Enabler","dbstats","1"
|
||||||
"Command Enabler","defaultdance","1"
|
"Command Enabler","defaultdance","1"
|
||||||
"Command Enabler","derp","1"
|
"Command Enabler","derp","1"
|
||||||
"Command Enabler","dew","1"
|
"Command Enabler","derpi","1"
|
||||||
|
"Command Enabler","e6","1"
|
||||||
"Command Enabler","e621","1"
|
"Command Enabler","e621","1"
|
||||||
"Command Enabler","eightball, 8ball","1"
|
"Command Enabler","eightball, 8ball","1"
|
||||||
"Command Enabler","fetch","1"
|
"Command Enabler","fetch","1"
|
||||||
|
"Command Enabler","getsauce","1"
|
||||||
"Command Enabler","givebeans","1"
|
"Command Enabler","givebeans","1"
|
||||||
"Command Enabler","guildroleadd","1"
|
"Command Enabler","guildroleadd","1"
|
||||||
"Command Enabler","guildroleallowed","1"
|
"Command Enabler","guildroleallowed","1"
|
||||||
@@ -314,9 +329,9 @@
|
|||||||
"Command Enabler","stats","1"
|
"Command Enabler","stats","1"
|
||||||
"Command Enabler","teey","1"
|
"Command Enabler","teey","1"
|
||||||
"Command Enabler","tony, stark, dontfeelgood, dontfeelsogood","1"
|
"Command Enabler","tony, stark, dontfeelgood, dontfeelsogood","1"
|
||||||
|
"Command Enabler","tradebeans, trade","1"
|
||||||
"Command Enabler","tweet","1"
|
"Command Enabler","tweet","1"
|
||||||
"Command Enabler","vote","1"
|
"Command Enabler","vote","1"
|
||||||
"Command Enabler","weh","1"
|
|
||||||
"Command Enabler","wolfram","1"
|
"Command Enabler","wolfram","1"
|
||||||
"Command Enabler","work","1"
|
"Command Enabler","work","1"
|
||||||
"Command Enabler","yeet","1"
|
"Command Enabler","yeet","1"
|
||||||
|
|||||||
|
Binary file not shown.
@@ -0,0 +1,22 @@
|
|||||||
|
function plugin(message, user)
|
||||||
|
local index;
|
||||||
|
local concat;
|
||||||
|
if(string.find(message, "https://derpicdn.net/img"))then
|
||||||
|
if(string.find(message, "view/"))then
|
||||||
|
index = string.find(message, "/[^/]*$");
|
||||||
|
return "!derpi ID:" .. string.sub(message, index + 1, string.find(message, ".[^.]*$")-1);
|
||||||
|
else
|
||||||
|
if(string.find(message, "download/"))then
|
||||||
|
index = string.find(message, "_");
|
||||||
|
concat = string.sub(message, 0, index-1);
|
||||||
|
return "!derpi ID:" .. string.sub(concat, string.find(message, "/[^/]*$") + 1);
|
||||||
|
else
|
||||||
|
index = string.find(message, "/[^/]*$");
|
||||||
|
concat = string.sub(message, 0, index - 1);
|
||||||
|
index = string.find(concat, "/[^/]*$");
|
||||||
|
|
||||||
|
return "!derpi ID:" .. string.sub(concat, index + 1);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
function plugin(message, user)
|
||||||
|
if(string.find(message, "https://static1.e621.net/data") or string.find(message, "https://static1.e926.net/data"))then
|
||||||
|
if(string.find(message, " "))then
|
||||||
|
message = string.sub(message, 0, string.find(message, " "));
|
||||||
|
end
|
||||||
|
return "!e6 md5:" .. string.sub(message, string.find(message, "/[^/]*$") + 1 ,string.find(message, ".[^.]*$") - 1);
|
||||||
|
end
|
||||||
|
end
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,138 @@
|
|||||||
|
package commands.beans;
|
||||||
|
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.FontMetrics;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
import core.Command;
|
||||||
|
import core.Constants;
|
||||||
|
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 CommandBeansShow extends Command
|
||||||
|
{
|
||||||
|
public CommandBeansShow(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHelpText() { return LocStrings.stub("BeansShowInfo"); };
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
|
{
|
||||||
|
if(input.mentions == null)
|
||||||
|
{
|
||||||
|
//res.send("" + user.getBeans());
|
||||||
|
try {
|
||||||
|
res.sendFile(combineImages(user.getBeans()), "png");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.getBeans()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String mentionedBeans = "";
|
||||||
|
for(KittyUser mentioned:input.mentions)
|
||||||
|
{
|
||||||
|
mentionedBeans += mentioned.name + " has " + mentioned.getBeans() + " ";
|
||||||
|
}
|
||||||
|
res.send(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private File combineImages(long beans) throws IOException
|
||||||
|
{
|
||||||
|
// Acquire images
|
||||||
|
BufferedImage imageBase = ImageIO.read(new File(Constants.AssetDirectory + "beans/BeansBG.png"));
|
||||||
|
BufferedImage thouBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/thouBean.png"));
|
||||||
|
BufferedImage hunBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/hunBean.png"));
|
||||||
|
BufferedImage tenBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/tenBean.png"));
|
||||||
|
BufferedImage oneBean = ImageIO.read(new File(Constants.AssetDirectory + "beans/oneBean.png"));
|
||||||
|
|
||||||
|
final int baseWidth = imageBase.getWidth();
|
||||||
|
final int baseHeight = imageBase.getHeight();
|
||||||
|
|
||||||
|
long calcBean = beans;
|
||||||
|
|
||||||
|
long thousands = beans / 1000;
|
||||||
|
calcBean = beans % 1000;
|
||||||
|
long hundreds = (calcBean / 100);
|
||||||
|
calcBean = calcBean % 100;
|
||||||
|
long tens = (calcBean / 10);
|
||||||
|
calcBean = calcBean % 10;
|
||||||
|
long ones = calcBean;
|
||||||
|
|
||||||
|
BufferedImage beanImage = new BufferedImage(baseWidth, baseHeight, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
Graphics beanGraphics = beanImage.getGraphics();
|
||||||
|
Rectangle rect = new Rectangle(0, 0, baseWidth, baseHeight);
|
||||||
|
beanGraphics.drawImage(imageBase,0,0,null);
|
||||||
|
|
||||||
|
for(int i = 0; i < ones; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - oneBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - oneBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(oneBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < tens; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - tenBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - tenBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(tenBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < hundreds; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - hunBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - hunBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(hunBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < thousands; i++)
|
||||||
|
{
|
||||||
|
int x = (int)(Math.random() * (baseWidth - thouBean.getWidth())) + 1;
|
||||||
|
int y = (int)(Math.random() * (baseHeight - thouBean.getHeight())) + 1;
|
||||||
|
beanGraphics.drawImage(thouBean, x, y, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
Font font = null;
|
||||||
|
font = Font.createFont(Font.TRUETYPE_FONT, new File(Constants.AssetDirectory +"fonts/B612Mono-Regular.ttf"));
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Font beanFont = new Font("font", Font.BOLD, 45);
|
||||||
|
beanGraphics.setFont(beanFont);
|
||||||
|
|
||||||
|
drawCenteredString(beanGraphics, LocStrings.stub("BeansImageTopText"), rect, beanFont, .25);
|
||||||
|
drawCenteredString(beanGraphics, "" + beans, rect, beanFont, .5);
|
||||||
|
drawCenteredString(beanGraphics, LocStrings.stub("BeansImageBottomText"), rect, beanFont, .75);
|
||||||
|
|
||||||
|
ImageIO.write(beanImage, "PNG", new File("beanImage.png"));
|
||||||
|
return new File("beanImage.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawCenteredString(Graphics beanGraphics, String text, Rectangle rect, Font font, double segment)
|
||||||
|
{
|
||||||
|
FontMetrics metrics = beanGraphics.getFontMetrics(font);
|
||||||
|
|
||||||
|
int x = rect.x + (rect.width - metrics.stringWidth(text)) / 2;
|
||||||
|
int y = (int)(rect.y + ((rect.height - metrics.getHeight()) * segment) + metrics.getAscent());
|
||||||
|
|
||||||
|
beanGraphics.drawString(text, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.beans;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ public class CommandBetBeans extends Command
|
|||||||
{
|
{
|
||||||
String call = "";
|
String call = "";
|
||||||
|
|
||||||
int min = 50;
|
int min = 20;
|
||||||
int bet = 0;
|
int bet = 0;
|
||||||
int win = 0;
|
int win = 0;
|
||||||
|
|
||||||
@@ -36,7 +36,8 @@ public class CommandBetBeans extends Command
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
GlobalLog.log(LogFilter.Command, "Betting took place, but a value was not specified in the config file so 50 was used as the minimum bet threshold. Consider specifying BetBeansMinThreshold.");
|
GlobalLog.log(LogFilter.Command, "Betting took place, but a value was not specified in the config file "
|
||||||
|
+ "so 50 was used as the minimum bet threshold. Consider specifying BetBeansMinThreshold.");
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
+21
-1
@@ -1,4 +1,6 @@
|
|||||||
package commands.general;
|
package commands.beans;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -9,6 +11,8 @@ import dataStructures.KittyRole;
|
|||||||
import dataStructures.KittyUser;
|
import dataStructures.KittyUser;
|
||||||
import dataStructures.Response;
|
import dataStructures.Response;
|
||||||
import dataStructures.UserInput;
|
import dataStructures.UserInput;
|
||||||
|
import utils.GlobalLog;
|
||||||
|
import utils.LogFilter;
|
||||||
|
|
||||||
public class CommandBetHistory extends Command
|
public class CommandBetHistory extends Command
|
||||||
{
|
{
|
||||||
@@ -20,6 +24,22 @@ public class CommandBetHistory extends Command
|
|||||||
@Override
|
@Override
|
||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
{
|
{
|
||||||
|
// Send primary response
|
||||||
res.send(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.get()));
|
res.send(String.format(LocStrings.stub("BetHistoryOutput"), guild.beans.get()));
|
||||||
|
|
||||||
|
// Look up extra information to see if we ahve a flair image
|
||||||
|
String optional = LocStrings.stub("BetHistoryOptionalPNGPath");
|
||||||
|
if(optional != null && optional.length() > 0)
|
||||||
|
{
|
||||||
|
File responseImage = new File(optional);
|
||||||
|
if(responseImage.exists())
|
||||||
|
{
|
||||||
|
res.sendFile(responseImage, ".png");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GlobalLog.warn(LogFilter.Command, "Optional PNG image for bet history was specified, but the file could not be found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.beans;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
+16
-2
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.beans;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -25,16 +25,30 @@ public class CommandTradeBeans extends Command
|
|||||||
res.send(LocStrings.stub("TradeBeansNoTargetError"));
|
res.send(LocStrings.stub("TradeBeansNoTargetError"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(input.mentions.length > 1)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("TradeBeansMultipleUsersTagged"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int beans = 0;
|
int beans = 0;
|
||||||
try {
|
|
||||||
|
try
|
||||||
|
{
|
||||||
beans = Integer.parseInt(input.args.split(" ")[0]);
|
beans = Integer.parseInt(input.args.split(" ")[0]);
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
beans = Integer.parseInt(input.args.split(" ")[1]);
|
||||||
|
}
|
||||||
|
catch(Exception eInner)
|
||||||
{
|
{
|
||||||
res.send(LocStrings.stub("TradeBeansIntParseError"));
|
res.send(LocStrings.stub("TradeBeansIntParseError"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(user.getBeans() < beans)
|
if(user.getBeans() < beans)
|
||||||
{
|
{
|
||||||
@@ -2,11 +2,11 @@ package commands.benchmark;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import commands.benchmark.core.BenchmarkCommand;
|
import core.benchmark.BenchmarkCommand;
|
||||||
import commands.benchmark.core.BenchmarkEntry;
|
import core.benchmark.BenchmarkEntry;
|
||||||
import commands.benchmark.core.BenchmarkFormattable;
|
import core.benchmark.BenchmarkFormattable;
|
||||||
import commands.benchmark.core.BenchmarkInput;
|
import core.benchmark.BenchmarkInput;
|
||||||
import commands.benchmark.core.BenchmarkManager;
|
import core.benchmark.BenchmarkManager;
|
||||||
|
|
||||||
public class BenchmarkCommandCompare extends BenchmarkCommand
|
public class BenchmarkCommandCompare extends BenchmarkCommand
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,11 +2,7 @@ package commands.benchmark;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import commands.benchmark.core.BenchmarkCommand;
|
import core.benchmark.*;
|
||||||
import commands.benchmark.core.BenchmarkEntry;
|
|
||||||
import commands.benchmark.core.BenchmarkFormattable;
|
|
||||||
import commands.benchmark.core.BenchmarkInput;
|
|
||||||
import commands.benchmark.core.BenchmarkManager;
|
|
||||||
|
|
||||||
public class BenchmarkCommandFind extends BenchmarkCommand
|
public class BenchmarkCommandFind extends BenchmarkCommand
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ package commands.benchmark;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import commands.benchmark.core.BenchmarkCommand;
|
import core.benchmark.BenchmarkCommand;
|
||||||
import commands.benchmark.core.BenchmarkEntry;
|
import core.benchmark.BenchmarkEntry;
|
||||||
import commands.benchmark.core.BenchmarkFormattable;
|
import core.benchmark.BenchmarkFormattable;
|
||||||
import commands.benchmark.core.BenchmarkInput;
|
import core.benchmark.BenchmarkInput;
|
||||||
import commands.benchmark.core.BenchmarkManager;
|
import core.benchmark.BenchmarkManager;
|
||||||
import dataStructures.KittyEmbed;
|
import dataStructures.KittyEmbed;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.Constants;
|
import core.Constants;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import core.*;
|
import core.*;
|
||||||
import dataStructures.KittyChannel;
|
import dataStructures.KittyChannel;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.DatabaseManager;
|
import core.DatabaseManager;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.dev;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package commands.dew;
|
|
||||||
|
|
||||||
import commands.dew.core.impl.DewCore;
|
|
||||||
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 CommandDew extends Command
|
|
||||||
{
|
|
||||||
public static DewCore core;
|
|
||||||
SubCommandFramework framework = new SubCommandFramework();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getHelpText() { return LocStrings.stub("DewInfo"); }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
|
||||||
{
|
|
||||||
framework.run(guild, channel, user, input).Call(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CommandDew(KittyRole level, KittyRating rating)
|
|
||||||
{
|
|
||||||
super(level, rating);
|
|
||||||
|
|
||||||
core = new DewCore(framework);
|
|
||||||
|
|
||||||
framework.addCommand("luatest", new CommandDewLuaTest(KittyRole.Dev, KittyRating.Safe));
|
|
||||||
framework.addCommand("realm", new CommandDewRealm(KittyRole.Dev, KittyRating.Safe));
|
|
||||||
framework.addCommand("w", new CommandDewInput("w", KittyRole.Dev, KittyRating.Safe));
|
|
||||||
framework.addCommand("a", new CommandDewInput("a", KittyRole.Dev, KittyRating.Safe));
|
|
||||||
framework.addCommand("s", new CommandDewInput("s", KittyRole.Dev, KittyRating.Safe));
|
|
||||||
framework.addCommand("d", new CommandDewInput("d", KittyRole.Dev, KittyRating.Safe));
|
|
||||||
framework.addCommand("capture", new CommandDewCapture(KittyRole.Dev, KittyRating.Safe));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package commands.dew;
|
|
||||||
|
|
||||||
import commands.dew.adapter.KittyAdapterDewPlayer;
|
|
||||||
import commands.dew.core.impl.DewCore;
|
|
||||||
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 CommandDewCapture extends SubCommand
|
|
||||||
{
|
|
||||||
public CommandDewCapture(KittyRole roleLevel, KittyRating contentRating)
|
|
||||||
{
|
|
||||||
super(roleLevel, contentRating);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
|
||||||
{
|
|
||||||
KittyAdapterDewPlayer player = DewCore.getOrCreate(user);
|
|
||||||
DewCore.playersCaptured.add(player);
|
|
||||||
return null;//new SubCommandFormattable("captured input for " + user.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
package commands.dew;
|
|
||||||
|
|
||||||
import commands.dew.adapter.KittyAdapterDewPlayer;
|
|
||||||
import commands.dew.core.impl.DewCore;
|
|
||||||
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 CommandDewInput extends SubCommand
|
|
||||||
{
|
|
||||||
String letter = "";
|
|
||||||
public CommandDewInput(String letter, KittyRole roleLevel, KittyRating contentRating)
|
|
||||||
{
|
|
||||||
super(roleLevel, contentRating);
|
|
||||||
this.letter = letter.toLowerCase();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
|
||||||
{
|
|
||||||
KittyAdapterDewPlayer player = DewCore.getOrCreate(user);
|
|
||||||
|
|
||||||
int x = player.getRealmX();
|
|
||||||
int y = player.getRealmY();
|
|
||||||
|
|
||||||
switch(letter)
|
|
||||||
{
|
|
||||||
case "w": player.setRealmPos(x, y - 1); break;
|
|
||||||
case "a": player.setRealmPos(x - 1, y); break;
|
|
||||||
case "s": player.setRealmPos(x, y + 1); break;
|
|
||||||
case "d": player.setRealmPos(x + 1, y); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new SubCommandFormattable(DewCore.drawWorld(player));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
package commands.dew;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import commands.dew.core.data.*;
|
|
||||||
import commands.dew.core.impl.DewLuaCore;
|
|
||||||
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 CommandDewLuaTest extends SubCommand
|
|
||||||
{
|
|
||||||
public CommandDewLuaTest(KittyRole roleLevel, KittyRating contentRating)
|
|
||||||
{
|
|
||||||
super(roleLevel, contentRating);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String asCodeBlock(String string)
|
|
||||||
{
|
|
||||||
return "```lua\n" + string + "```";
|
|
||||||
}
|
|
||||||
|
|
||||||
private String asCodeLine(String string)
|
|
||||||
{
|
|
||||||
return "`" + string + "`";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
|
||||||
{
|
|
||||||
String out = "";
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
out += "**Testing writing...\n**";
|
|
||||||
DewRealm m = new DewRealm();
|
|
||||||
m.id = UUID.randomUUID().toString();
|
|
||||||
String out1 = DewLuaCore.toLua(m);
|
|
||||||
out += asCodeBlock(out1);
|
|
||||||
|
|
||||||
String out2 = DewLuaCore.toLua(new DewMovementInfo());
|
|
||||||
out += asCodeBlock(out2);
|
|
||||||
|
|
||||||
out += "**Testing Reading...**\n";
|
|
||||||
|
|
||||||
DewRealm map = new DewRealm();
|
|
||||||
DewLuaCore.fromLua(map, out1);
|
|
||||||
out += "ID from 1st write: " + asCodeLine(map.id) + "\n";
|
|
||||||
|
|
||||||
DewMovementInfo move = new DewMovementInfo();
|
|
||||||
DewLuaCore.fromLua(move, out2);
|
|
||||||
out += "Qualified type test: " + asCodeLine(move.toString()) + "\n";
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace(System.err);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return new SubCommandFormattable(out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package commands.dew;
|
|
||||||
|
|
||||||
import commands.dew.adapter.KittyAdapterDewPlayer;
|
|
||||||
import commands.dew.core.impl.DewCore;
|
|
||||||
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 CommandDewRealm extends SubCommand
|
|
||||||
{
|
|
||||||
public CommandDewRealm(KittyRole roleLevel, KittyRating contentRating)
|
|
||||||
{
|
|
||||||
super(roleLevel, contentRating);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
|
||||||
{
|
|
||||||
KittyAdapterDewPlayer player = DewCore.getOrCreate(user);
|
|
||||||
|
|
||||||
String out = DewCore.drawWorld(player);
|
|
||||||
|
|
||||||
return new SubCommandFormattable(out);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
package commands.dew.adapter;
|
|
||||||
|
|
||||||
import commands.dew.core.api.IDewPlayer;
|
|
||||||
import commands.dew.core.data.DewRealm;
|
|
||||||
import dataStructures.KittyUser;
|
|
||||||
|
|
||||||
public class KittyAdapterDewPlayer implements IDewPlayer
|
|
||||||
{
|
|
||||||
private KittyUser user;
|
|
||||||
private String realmID;
|
|
||||||
private int x;
|
|
||||||
private int y;
|
|
||||||
|
|
||||||
public KittyAdapterDewPlayer(DewRealm realm, KittyUser user, int x, int y)
|
|
||||||
{
|
|
||||||
this.user = user;
|
|
||||||
this.realmID = realm.id;
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getVisual()
|
|
||||||
{
|
|
||||||
return user.name.length() >= 1 ? user.name.substring(0, 1) : "@";
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isUser(KittyUser user)
|
|
||||||
{
|
|
||||||
return user.uniqueID == user.uniqueID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRealmPos(int x, int y)
|
|
||||||
{
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////
|
|
||||||
// Interface requirements //
|
|
||||||
////////////////////////////
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName()
|
|
||||||
{
|
|
||||||
return user.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getUniqueID()
|
|
||||||
{
|
|
||||||
return user.uniqueID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCurrentRealmID()
|
|
||||||
{
|
|
||||||
return realmID;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getRealmX()
|
|
||||||
{
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getRealmY()
|
|
||||||
{
|
|
||||||
return y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package commands.dew.core.api;
|
|
||||||
|
|
||||||
public interface IDewCore {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package commands.dew.core.api;
|
|
||||||
|
|
||||||
public interface IDewEntity
|
|
||||||
{
|
|
||||||
public String getUniqueID();
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package commands.dew.core.api;
|
|
||||||
|
|
||||||
public interface IDewLuaCore
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package commands.dew.core.api;
|
|
||||||
|
|
||||||
public interface IDewLuaSerializable<T>
|
|
||||||
{
|
|
||||||
// Type info for derived class encoded in T
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package commands.dew.core.api;
|
|
||||||
|
|
||||||
// Commands are standalone pieces of data that contain only structures.
|
|
||||||
// Each command is simplistic and represents an action in the game world.
|
|
||||||
// Format:
|
|
||||||
/*
|
|
||||||
return
|
|
||||||
{
|
|
||||||
name="SomeCommand",
|
|
||||||
data={
|
|
||||||
-- some object here --
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
public interface IDewMessage<T>
|
|
||||||
{
|
|
||||||
public String getMessageName();
|
|
||||||
public T getData();
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package commands.dew.core.api;
|
|
||||||
|
|
||||||
public interface IDewPlayer extends IDewEntity
|
|
||||||
{
|
|
||||||
public String getName();
|
|
||||||
public String getCurrentRealmID();
|
|
||||||
public int getRealmX();
|
|
||||||
public int getRealmY();
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package commands.dew.core.data;
|
|
||||||
|
|
||||||
public enum DewMapTile
|
|
||||||
{
|
|
||||||
// Assign multiples of 2 for flag purposes
|
|
||||||
Default(0), Grass(1), Tree(2);
|
|
||||||
|
|
||||||
private final int value;
|
|
||||||
private DewMapTile(int value)
|
|
||||||
{
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getValue()
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package commands.dew.core.data;
|
|
||||||
|
|
||||||
import commands.dew.core.api.IDewLuaSerializable;
|
|
||||||
|
|
||||||
// Treat all data objects as structs for the purposes of this.
|
|
||||||
public class DewMovementInfo implements IDewLuaSerializable<DewMovementInfo>
|
|
||||||
{
|
|
||||||
public String entityID;
|
|
||||||
public int x;
|
|
||||||
public int y;
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package commands.dew.core.data;
|
|
||||||
|
|
||||||
import commands.dew.core.api.IDewLuaSerializable;
|
|
||||||
|
|
||||||
public final class DewRealm implements IDewLuaSerializable<DewRealm>
|
|
||||||
{
|
|
||||||
public String id = "0";
|
|
||||||
public int[][] map = new int[12][24]; // [Rows][Columns]
|
|
||||||
}
|
|
||||||
@@ -1,174 +0,0 @@
|
|||||||
package commands.dew.core.impl;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import commands.dew.adapter.KittyAdapterDewPlayer;
|
|
||||||
import commands.dew.core.data.DewMapTile;
|
|
||||||
import commands.dew.core.data.DewRealm;
|
|
||||||
import core.SubCommandFormattable;
|
|
||||||
import core.SubCommandFramework;
|
|
||||||
import dataStructures.KittyChannel;
|
|
||||||
import dataStructures.KittyGuild;
|
|
||||||
import dataStructures.KittyUser;
|
|
||||||
import dataStructures.Response;
|
|
||||||
import dataStructures.UserInput;
|
|
||||||
import utils.GlobalLog;
|
|
||||||
import utils.LogFilter;
|
|
||||||
|
|
||||||
public class DewCore
|
|
||||||
{
|
|
||||||
// TODO: Make realm and players both per-realm
|
|
||||||
public static String responseHeader = "[Dewdrop Forest]";
|
|
||||||
public static DewRealm realm;
|
|
||||||
public static List<KittyAdapterDewPlayer> players;
|
|
||||||
public static List<KittyAdapterDewPlayer> playersCaptured;
|
|
||||||
private static SubCommandFramework framework;
|
|
||||||
|
|
||||||
public DewCore(SubCommandFramework framework)
|
|
||||||
{
|
|
||||||
DewCore.framework = framework;
|
|
||||||
DewCore.realm = new DewRealm();
|
|
||||||
DewCore.players = new ArrayList<KittyAdapterDewPlayer>();
|
|
||||||
DewCore.playersCaptured = new ArrayList<KittyAdapterDewPlayer>();
|
|
||||||
|
|
||||||
for(int y = 0; y < realm.map.length; ++y)
|
|
||||||
{
|
|
||||||
for(int x = 0; x < realm.map[y].length; ++x)
|
|
||||||
{
|
|
||||||
realm.map[y][x] = DewMapTile.Grass.getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns false if not captured, true if captured.
|
|
||||||
public static boolean ProcessIfCaptured(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput baseInput, Response res)
|
|
||||||
{
|
|
||||||
// Search for a captured player.
|
|
||||||
KittyAdapterDewPlayer player = null;
|
|
||||||
for(KittyAdapterDewPlayer p : playersCaptured)
|
|
||||||
{
|
|
||||||
if(p.getUniqueID() == user.uniqueID)
|
|
||||||
{
|
|
||||||
player = p;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we didn't find that the person is captured, return false since we don't need to do anything.
|
|
||||||
if(player == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// See if we run anything - also, check to see if we need to exit.
|
|
||||||
boolean didRun = false;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
UserInput toEdit = new UserInput(baseInput);
|
|
||||||
String key = toEdit.message.toLowerCase().trim();
|
|
||||||
toEdit.key = key;
|
|
||||||
toEdit.args = key;
|
|
||||||
switch(key)
|
|
||||||
{
|
|
||||||
case "cap":
|
|
||||||
case "capture":
|
|
||||||
case "uncapture":
|
|
||||||
case "stop":
|
|
||||||
case "quit":
|
|
||||||
case "exit":
|
|
||||||
playersCaptured.remove(player);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SubCommandFormattable f = framework.run(guild, channel, user, toEdit);
|
|
||||||
|
|
||||||
if(f != null)
|
|
||||||
{
|
|
||||||
Response.GetLastMessage((String last) -> {
|
|
||||||
if(last.contains(responseHeader))
|
|
||||||
Response.EditLastMessage(f.resString);
|
|
||||||
});
|
|
||||||
didRun = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
GlobalLog.error(LogFilter.Command, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(didRun)
|
|
||||||
{
|
|
||||||
baseInput.deleteOriginInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
return didRun;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static KittyAdapterDewPlayer getOrCreate(KittyUser user)
|
|
||||||
{
|
|
||||||
for(KittyAdapterDewPlayer player : players)
|
|
||||||
{
|
|
||||||
if(player.getUniqueID() == user.uniqueID)
|
|
||||||
{
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KittyAdapterDewPlayer player = new KittyAdapterDewPlayer(realm, user, 10, 10);
|
|
||||||
players.add(player);
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String drawWorld(KittyAdapterDewPlayer player)
|
|
||||||
{
|
|
||||||
// Build empty world buffer
|
|
||||||
String[][] worldBuffer = new String[realm.map.length][realm.map[0].length];
|
|
||||||
|
|
||||||
// Build world
|
|
||||||
for(int y = 0; y < realm.map.length; ++y)
|
|
||||||
{
|
|
||||||
for(int x = 0; x < realm.map[y].length; ++x)
|
|
||||||
{
|
|
||||||
switch(DewMapTile.values()[realm.map[y][x]])
|
|
||||||
{
|
|
||||||
case Grass:
|
|
||||||
worldBuffer[y][x] = ",";
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
worldBuffer[y][x] = " ";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build players
|
|
||||||
for(KittyAdapterDewPlayer p : players)
|
|
||||||
{
|
|
||||||
worldBuffer[p.getRealmY()][p.getRealmX()] = p.getVisual();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw world
|
|
||||||
String out = "";
|
|
||||||
out += responseHeader + "\n";
|
|
||||||
out += "**Realm ID - ** `" + realm.id + "`\n";
|
|
||||||
|
|
||||||
for(int y = 0; y < worldBuffer.length; ++y)
|
|
||||||
{
|
|
||||||
out += "`";
|
|
||||||
|
|
||||||
for(int x = 0; x < worldBuffer[y].length; ++x)
|
|
||||||
{
|
|
||||||
out += worldBuffer[y][x];
|
|
||||||
}
|
|
||||||
|
|
||||||
out += "`";
|
|
||||||
out += "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
out += "**Stats**\n";
|
|
||||||
out += "`Player Name` - `" + player.getName() + "`\n";
|
|
||||||
out += "`Player Icon` - `" + player.getVisual() + "`\n";
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
package commands.dew.core.impl;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.luaj.vm2.Globals;
|
|
||||||
import org.luaj.vm2.LuaValue;
|
|
||||||
import org.luaj.vm2.Varargs;
|
|
||||||
import org.luaj.vm2.lib.jse.JsePlatform;
|
|
||||||
import commands.dew.core.api.IDewLuaCore;
|
|
||||||
import commands.dew.core.api.IDewLuaSerializable;
|
|
||||||
|
|
||||||
public class DewLuaCore implements IDewLuaCore
|
|
||||||
{
|
|
||||||
private static Globals globalLuaCore = null;
|
|
||||||
|
|
||||||
public static String toLua(IDewLuaSerializable<?> item)
|
|
||||||
{
|
|
||||||
return toLua(item, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String tab(int num)
|
|
||||||
{
|
|
||||||
String line = "";
|
|
||||||
|
|
||||||
for(int i = 0; i < num; ++i)
|
|
||||||
line += "\t";
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String toLua(IDewLuaSerializable<?> item, int tabs)
|
|
||||||
{
|
|
||||||
String out = tab(tabs) + "return {\n";
|
|
||||||
|
|
||||||
// Set up type information
|
|
||||||
out += tab(tabs + 1) + "type=\"" + item.getClass().getTypeName() + "\",\n";
|
|
||||||
|
|
||||||
|
|
||||||
// Set up data information
|
|
||||||
out += tab(tabs + 1) + "data={\n";
|
|
||||||
|
|
||||||
// Write data
|
|
||||||
Field[] fields = item.getClass().getDeclaredFields();
|
|
||||||
for(int i = 0; i < fields.length; ++i)
|
|
||||||
{
|
|
||||||
Field current = fields[i];
|
|
||||||
try
|
|
||||||
{
|
|
||||||
String line = "";
|
|
||||||
String fieldType = current.getType().toString().toLowerCase();
|
|
||||||
|
|
||||||
line += tab(tabs + 2);
|
|
||||||
line += current.getName() + "=";
|
|
||||||
|
|
||||||
switch(fieldType)
|
|
||||||
{
|
|
||||||
case "int":
|
|
||||||
line += "" + current.get(item);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "class java.lang.string":
|
|
||||||
String content = (String)current.get(item);
|
|
||||||
|
|
||||||
if(content == null || content.length() == 0)
|
|
||||||
line += "\"\"";
|
|
||||||
else
|
|
||||||
line += "\"" + content + "\"";
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
// wrong name
|
|
||||||
case "dewmaptile ":
|
|
||||||
line += "\"" + current.get(item).toString() + "\"";
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
line += "nil";
|
|
||||||
System.err.print("Type could not be foramtted as lua: " + fieldType + "\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're not the last line, add a comma.
|
|
||||||
if(i != fields.length - 1)
|
|
||||||
line += ",";
|
|
||||||
|
|
||||||
out += line + "\n";
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace(System.err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
out += tab(tabs + 1) + "}\n";
|
|
||||||
out += tab(tabs)+ "}\n";
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked" })
|
|
||||||
public static <T> void fromLua(T obj, String lua)
|
|
||||||
{
|
|
||||||
if(globalLuaCore == null)
|
|
||||||
{
|
|
||||||
globalLuaCore = JsePlatform.standardGlobals();
|
|
||||||
}
|
|
||||||
|
|
||||||
LuaValue luaResult = globalLuaCore.load(lua).call();
|
|
||||||
String type = luaResult.get("type").toString();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LuaValue data = luaResult.get("data");
|
|
||||||
Class<T> concreteClass = (Class<T>) Class.forName(type);
|
|
||||||
|
|
||||||
for(Field field : concreteClass.getDeclaredFields())
|
|
||||||
{
|
|
||||||
String name = field.getName();
|
|
||||||
LuaValue value = data.get(name);
|
|
||||||
|
|
||||||
if(!value.isnil())
|
|
||||||
{
|
|
||||||
String fieldType = field.getType().toString().toLowerCase();
|
|
||||||
switch(fieldType)
|
|
||||||
{
|
|
||||||
case "int":
|
|
||||||
field.set(obj, value.toint());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "class java.lang.string":
|
|
||||||
field.set(obj, value.toString());
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Not the right name
|
|
||||||
case "dewmaptile":
|
|
||||||
default:
|
|
||||||
System.err.print("Could not set field of type: " + fieldType + "\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
System.err.println("Field was not in lua: " + name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace(System.err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package commands.dew.core.messages;
|
|
||||||
|
|
||||||
import commands.dew.core.api.IDewLuaSerializable;
|
|
||||||
|
|
||||||
public class DewMessageMovement implements IDewLuaSerializable<DewMessageMovement>
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package commands.general;
|
|
||||||
|
|
||||||
import core.Command;
|
|
||||||
import core.LocStrings;
|
|
||||||
import dataStructures.*;
|
|
||||||
|
|
||||||
public class CommandBeansShow extends Command
|
|
||||||
{
|
|
||||||
public CommandBeansShow(KittyRole level, KittyRating rating) { super(level, rating); }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getHelpText() { return LocStrings.stub("BeansShowInfo"); };
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
|
||||||
{
|
|
||||||
if(input.mentions == null)
|
|
||||||
res.send(String.format(LocStrings.stub("BeansShowDisplay"), user.getBeans()));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
String mentionedBeans = "";
|
|
||||||
for(KittyUser mentioned:input.mentions)
|
|
||||||
{
|
|
||||||
mentionedBeans += mentioned.name + " has " + mentioned.getBeans() + " ";
|
|
||||||
}
|
|
||||||
res.send(String.format(LocStrings.stub("BeansShowMentioned"), mentionedBeans));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
package commands.benchmark;
|
package commands.general;
|
||||||
|
|
||||||
import commands.benchmark.core.BenchmarkFormattable;
|
|
||||||
import commands.benchmark.core.BenchmarkFramework;
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
|
import core.benchmark.BenchmarkFormattable;
|
||||||
|
import core.benchmark.BenchmarkFramework;
|
||||||
import dataStructures.KittyChannel;
|
import dataStructures.KittyChannel;
|
||||||
import dataStructures.KittyGuild;
|
import dataStructures.KittyGuild;
|
||||||
import dataStructures.KittyRating;
|
import dataStructures.KittyRating;
|
||||||
@@ -68,22 +68,23 @@ public class CommandBoop extends Command
|
|||||||
{
|
{
|
||||||
if(input.mentions == null)
|
if(input.mentions == null)
|
||||||
{
|
{
|
||||||
|
// No one is booped, just the bot!
|
||||||
boopTracker.applyBoop();
|
boopTracker.applyBoop();
|
||||||
res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.howMany()));
|
res.send(String.format(LocStrings.stub("BoopStandard"), user.name, boopTracker.howMany()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// When someone boops one other person
|
||||||
if(input.mentions.length == 1)
|
if(input.mentions.length == 1)
|
||||||
{
|
{
|
||||||
boopTracker.applyBoop();
|
|
||||||
res.send(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name));
|
res.send(String.format(LocStrings.stub("BoopPerson"), user.name, input.mentions[0].name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A number of people have been booped
|
||||||
String booped = "";
|
String booped = "";
|
||||||
for(int i = 0; i < input.mentions.length; i++)
|
for(int i = 0; i < input.mentions.length; i++)
|
||||||
{
|
{
|
||||||
boopTracker.applyBoop();
|
|
||||||
if(i < input.mentions.length-1)
|
if(i < input.mentions.length-1)
|
||||||
booped += input.mentions[i].name + ", ";
|
booped += input.mentions[i].name + ", ";
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -27,12 +27,20 @@ public class CommandChoose extends Command
|
|||||||
|
|
||||||
String [] choices = input.args.split(",");
|
String [] choices = input.args.split(",");
|
||||||
|
|
||||||
if(choices.length == 1)
|
if(choices.length <= 1)
|
||||||
{
|
{
|
||||||
res.send(LocStrings.stub("ChooseOne"));
|
res.send(LocStrings.stub("ChooseOne"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < choices.length; i ++)
|
||||||
|
{
|
||||||
|
if (choices[i].equals(""))
|
||||||
|
{
|
||||||
|
choices[i] = "KittyBot is the best!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
res.send(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString()));
|
res.send(String.format(LocStrings.stub("ChooseChoice"), (choices[(int) (Math.random()*choices.length)]).toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -31,28 +31,8 @@ public class CommandColor extends Command
|
|||||||
@Override
|
@Override
|
||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
{
|
{
|
||||||
if(input.args == null || input.args.length() == 0)
|
|
||||||
{
|
|
||||||
res.send(LocStrings.stub("ColorNotSearchable"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String toFind = null;
|
|
||||||
String[] split = input.args.split(" ");
|
|
||||||
|
|
||||||
if(split.length >= 1)
|
|
||||||
toFind = split[0];
|
|
||||||
|
|
||||||
// First, try and parse out the color to make sure we can even get it.
|
// First, try and parse out the color to make sure we can even get it.
|
||||||
ColorData colorData = null;
|
ColorData colorData = theColorAPI.lookupHex(input.args);
|
||||||
if(toFind == null)
|
|
||||||
{
|
|
||||||
colorData = theColorAPI.lookupHex(input.args.trim());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
colorData = theColorAPI.lookupHex(toFind.trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify the color was even found
|
// Verify the color was even found
|
||||||
if(colorData == null)
|
if(colorData == null)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import core.Command;
|
|||||||
import core.Constants;
|
import core.Constants;
|
||||||
import core.DatabaseManager;
|
import core.DatabaseManager;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
import core.ObjectBuilderFactory;
|
import core.ObjectBuilder;
|
||||||
import dataStructures.KittyChannel;
|
import dataStructures.KittyChannel;
|
||||||
import dataStructures.KittyEmbed;
|
import dataStructures.KittyEmbed;
|
||||||
import dataStructures.KittyGuild;
|
import dataStructures.KittyGuild;
|
||||||
@@ -98,7 +98,7 @@ public class CommandLeaderboard extends Command
|
|||||||
{
|
{
|
||||||
// Only now that we've sorted do we do the full construction and caching of users
|
// Only now that we've sorted do we do the full construction and caching of users
|
||||||
Pair<Long, String> userPair = users.get(i);
|
Pair<Long, String> userPair = users.get(i);
|
||||||
KittyUser cachedUser = ObjectBuilderFactory.getKittyUser(guildID, userPair.Second);
|
KittyUser cachedUser = ObjectBuilder.getKittyUser(guildID, userPair.Second);
|
||||||
|
|
||||||
if(cachedUser == null)
|
if(cachedUser == null)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import java.util.Stack;
|
|||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
import dataStructures.*;
|
import dataStructures.*;
|
||||||
import utils.GlobalLog;
|
|
||||||
import utils.LogFilter;
|
|
||||||
|
|
||||||
public class CommandRoll extends Command
|
public class CommandRoll extends Command
|
||||||
{
|
{
|
||||||
@@ -24,7 +22,9 @@ public class CommandRoll extends Command
|
|||||||
{
|
{
|
||||||
KittyEmbed embed = new KittyEmbed();
|
KittyEmbed embed = new KittyEmbed();
|
||||||
embed.title = user.name +"'s roll!";
|
embed.title = user.name +"'s roll!";
|
||||||
|
System.out.println("HERE");
|
||||||
embed.descriptionText = rollDice(input.args);
|
embed.descriptionText = rollDice(input.args);
|
||||||
|
System.out.println("THERE");
|
||||||
Random numGen = new Random(user.name.hashCode());
|
Random numGen = new Random(user.name.hashCode());
|
||||||
float hue = numGen.nextFloat();
|
float hue = numGen.nextFloat();
|
||||||
float sat = .7f;
|
float sat = .7f;
|
||||||
@@ -34,7 +34,6 @@ public class CommandRoll extends Command
|
|||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
GlobalLog.error(LogFilter.Command, e);
|
|
||||||
res.send(LocStrings.stub("RollError"));
|
res.send(LocStrings.stub("RollError"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,10 +43,11 @@ public class CommandRoll extends Command
|
|||||||
Stack<Integer> values = new Stack<Integer>();
|
Stack<Integer> values = new Stack<Integer>();
|
||||||
Stack<Character> operators = new Stack<Character>();
|
Stack<Character> operators = new Stack<Character>();
|
||||||
String steps = "";
|
String steps = "";
|
||||||
|
|
||||||
for(int i = 0; i < thing.length(); i ++)
|
for(int i = 0; i < thing.length(); i ++)
|
||||||
{
|
{
|
||||||
char current = thing.charAt(i);
|
char current = thing.charAt(i);
|
||||||
|
System.out.println("ROLLING");
|
||||||
switch(current)
|
switch(current)
|
||||||
{
|
{
|
||||||
case '+':
|
case '+':
|
||||||
@@ -125,9 +125,12 @@ public class CommandRoll extends Command
|
|||||||
{
|
{
|
||||||
steps += "\n" + calculate(values, operators);
|
steps += "\n" + calculate(values, operators);
|
||||||
}
|
}
|
||||||
|
if(steps != "")
|
||||||
|
{
|
||||||
return "Roll```" + thing + "```" + "Steps```" + steps + "```" + "Final value ```" + values.pop() +"```";
|
return "Roll```" + thing + "```" + "Steps```" + steps + "```" + "Final value ```" + values.pop() +"```";
|
||||||
}
|
}
|
||||||
|
return "That's not a roll that's just " + values.pop() +"!";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private String calculate(Stack<Integer> nums, Stack<Character> operators)
|
private String calculate(Stack<Integer> nums, Stack<Character> operators)
|
||||||
@@ -173,18 +176,18 @@ public class CommandRoll extends Command
|
|||||||
|
|
||||||
private int[] roll(int first, int second)
|
private int[] roll(int first, int second)
|
||||||
{
|
{
|
||||||
int numberOfDice = first;
|
int roll = 0;
|
||||||
int diceSideCount = second;
|
int dice = first;
|
||||||
int [] rolls = new int[numberOfDice];
|
int sides = second;
|
||||||
|
int [] rolls = new int [dice];
|
||||||
|
|
||||||
GlobalLog.log("number: " + numberOfDice + " diceSides: " + diceSideCount);
|
if(dice < 1)
|
||||||
|
|
||||||
if(numberOfDice < 1)
|
|
||||||
return new int[0];
|
return new int[0];
|
||||||
|
for(int i = 0; dice > i; i ++)
|
||||||
for(int i = 0; i < numberOfDice; i++)
|
{
|
||||||
rolls[i] = (int)(Math.random() * diceSideCount + 1);
|
roll = (int)(Math.random() * sides) + 1;
|
||||||
|
rolls[i] = roll;
|
||||||
|
}
|
||||||
return rolls;
|
return rolls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,29 +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 CommandWeh extends Command {
|
|
||||||
|
|
||||||
public String getHelpText() { return LocStrings.stub("WehInfo"); }
|
|
||||||
|
|
||||||
public CommandWeh(KittyRole roleLevel, KittyRating contentRating) {
|
|
||||||
super(roleLevel, contentRating);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
// The format for reutrning an emoji is: <:name:ID#>
|
|
||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
|
||||||
{
|
|
||||||
res.send("<:weh:548301646929723393>");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.images;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -2,6 +2,7 @@ package commands.music;
|
|||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
|
import core.SubCommandFormattable;
|
||||||
import core.SubCommandFramework;
|
import core.SubCommandFramework;
|
||||||
import dataStructures.*;
|
import dataStructures.*;
|
||||||
|
|
||||||
@@ -13,14 +14,20 @@ public class CommandMusicMain extends Command
|
|||||||
super(level, rating);
|
super(level, rating);
|
||||||
framework.addCommand("join", new SubCommandJoin(KittyRole.General, KittyRating.Safe));
|
framework.addCommand("join", new SubCommandJoin(KittyRole.General, KittyRating.Safe));
|
||||||
framework.addCommand("leave", new SubCommandLeave(KittyRole.General, KittyRating.Safe));
|
framework.addCommand("leave", new SubCommandLeave(KittyRole.General, KittyRating.Safe));
|
||||||
|
framework.addCommand("add", new SubCommandAddTrack(KittyRole.General, KittyRating.Safe));
|
||||||
|
framework.addCommand("skip", new SubCommandSkip(KittyRole.General, KittyRating.Safe));
|
||||||
|
framework.addCommand("stop", new SubCommandStop(KittyRole.General, KittyRating.Safe));
|
||||||
|
framework.addCommand("playlist", new SubCommandPlaylist(KittyRole.General, KittyRating.Safe));
|
||||||
|
framework.addCommand("volume", new SubCommandVolume(KittyRole.General, KittyRating.Safe));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHelpText() { return LocStrings.stub("MusicInfo"); }
|
public String getHelpText() {return LocStrings.stub("MusicInfo"); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
{
|
{
|
||||||
framework.run(guild, channel, user, input).Call(res);
|
SubCommandFormattable scf = framework.run(guild, channel, user, input);
|
||||||
|
scf.Call(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package commands.music;
|
package commands.music;
|
||||||
|
|
||||||
|
import core.LocStrings;
|
||||||
import core.SubCommand;
|
import core.SubCommand;
|
||||||
import core.SubCommandFormattable;
|
import core.SubCommandFormattable;
|
||||||
import dataStructures.KittyChannel;
|
import dataStructures.KittyChannel;
|
||||||
@@ -8,14 +9,25 @@ import dataStructures.KittyRating;
|
|||||||
import dataStructures.KittyRole;
|
import dataStructures.KittyRole;
|
||||||
import dataStructures.KittyUser;
|
import dataStructures.KittyUser;
|
||||||
import dataStructures.UserInput;
|
import dataStructures.UserInput;
|
||||||
|
import network.NetworkYoutube;
|
||||||
|
|
||||||
public class SubCommandAddTrack extends SubCommand
|
public class SubCommandAddTrack extends SubCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public SubCommandAddTrack(KittyRole level, KittyRating rating) { super(level, rating); }
|
public SubCommandAddTrack(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
|
||||||
|
NetworkYoutube YT = new NetworkYoutube();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||||
{
|
{
|
||||||
return null;
|
//Get track from Youtube
|
||||||
|
String video = input.args;
|
||||||
|
if(!(video.startsWith("https://www.youtube") || video.startsWith("https://www.youtu.be")))
|
||||||
|
{
|
||||||
|
video = YT.getYT(video);
|
||||||
|
}
|
||||||
|
guild.audio.playVideo(video);
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicAddTrack"), video));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package commands.music;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
|
|
||||||
|
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 SubCommandPlaylist extends SubCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
public SubCommandPlaylist(KittyRole roleLevel, KittyRating contentRating) {super(roleLevel, contentRating); }
|
||||||
|
|
||||||
|
@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!");
|
||||||
|
}
|
||||||
|
return new SubCommandFormattable(stringPlaylist);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
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 SubCommandSkip extends SubCommand
|
||||||
|
{
|
||||||
|
public SubCommandSkip(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||||
|
{
|
||||||
|
return new SubCommandFormattable(guild.audio.skipVideo(guild.audio.player));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
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 SubCommandStop extends SubCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
public SubCommandStop(KittyRole roleLevel, KittyRating contentRating) {super(roleLevel, contentRating);}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||||
|
{
|
||||||
|
return new SubCommandFormattable(guild.audio.stopPlayer(guild.audio.player));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package commands.music;
|
||||||
|
|
||||||
|
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 SubCommandVolume extends SubCommand
|
||||||
|
{
|
||||||
|
public SubCommandVolume(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public SubCommandFormattable OnRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input)
|
||||||
|
{
|
||||||
|
int newVol = guild.audio.getVolume(guild.audio.player);
|
||||||
|
if(input.args != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newVol = Integer.parseInt(input.args);
|
||||||
|
if(newVol > 100 || newVol <1)
|
||||||
|
{
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicVolOOB")));
|
||||||
|
}
|
||||||
|
guild.audio.changeVolume(guild.audio.player, newVol);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicVolCurrent"), newVol));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return new SubCommandFormattable(String.format(LocStrings.stub("MusicVolChanged"), newVol));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.network;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package commands.network;
|
||||||
|
|
||||||
|
import core.Command;
|
||||||
|
import core.LocStrings;
|
||||||
|
import dataStructures.KittyChannel;
|
||||||
|
import dataStructures.KittyEmbed;
|
||||||
|
import dataStructures.KittyGuild;
|
||||||
|
import dataStructures.KittyRating;
|
||||||
|
import dataStructures.KittyRole;
|
||||||
|
import dataStructures.KittyUser;
|
||||||
|
import dataStructures.Response;
|
||||||
|
import dataStructures.UserInput;
|
||||||
|
import network.NetworkDerpi;
|
||||||
|
|
||||||
|
public class CommandDerpi extends Command
|
||||||
|
{
|
||||||
|
NetworkDerpi searcher = new NetworkDerpi();
|
||||||
|
KittyEmbed response;
|
||||||
|
|
||||||
|
// Required constructor
|
||||||
|
public CommandDerpi(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHelpText() { return "Will search derpibooru for the tags entered, if KittyBot's content filter allows it"; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
|
{
|
||||||
|
if(guild.contentRating == KittyRating.Filtered)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response = searcher.getDerpi(input.args.replace(',', ' ') + " safe").output();
|
||||||
|
res.send(response);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("DerpiError"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(input.args == null || input.args.length() == 0)
|
||||||
|
res.send("DerpiNoSearchError");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response = searcher.getDerpi(input.args).output();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res.send(response);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("DerpiError"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(input.args.startsWith("ID:"))
|
||||||
|
{
|
||||||
|
response = searcher.getDerpiByID(input.args.substring(input.args.indexOf(':'))).output();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res.send(response);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("DerpiError"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
package commands.network;
|
||||||
|
|
||||||
|
import core.Command;
|
||||||
|
import core.LocStrings;
|
||||||
|
import dataStructures.*;
|
||||||
|
import network.NetworkE6;
|
||||||
|
|
||||||
|
public class CommandE6 extends Command
|
||||||
|
{
|
||||||
|
NetworkE6 searcher = new NetworkE6();
|
||||||
|
KittyEmbed response;
|
||||||
|
GenericImage image;
|
||||||
|
|
||||||
|
public CommandE6(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHelpText()
|
||||||
|
{
|
||||||
|
String toRet = "Will search e6";
|
||||||
|
toRet += "21 for the tags entered, if KittyBot's content filter allows it";
|
||||||
|
return toRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
|
{
|
||||||
|
if(guild.contentRating == KittyRating.Filtered)
|
||||||
|
{
|
||||||
|
image = searcher.getE6(input.args + " rating:safe", "");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response = image.output();
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("E6Blacklisted"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if(response.bodyImageURL == null)
|
||||||
|
{
|
||||||
|
Exception e = new Exception();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
res.send(response);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("E6Blacklisted"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(input.args == null || input.args.length() == 0)
|
||||||
|
res.send("E6NoSearchError");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response = searcher.getE6(input.args, "").output();
|
||||||
|
res.send(response);
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send(LocStrings.stub("E6Blacklisted"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package commands.network;
|
||||||
|
|
||||||
|
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;
|
||||||
|
import network.NetworkSauceNAO;
|
||||||
|
|
||||||
|
public class CommandGetSauce extends Command
|
||||||
|
{
|
||||||
|
NetworkSauceNAO sauce = new NetworkSauceNAO();
|
||||||
|
|
||||||
|
public CommandGetSauce(KittyRole level, KittyRating rating) { super(level, rating); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHelpText() { return LocStrings.stub("GetSauceInfo"); };
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRun(KittyGuild guild, KittyChannel channel, KittyUser user, UserInput input, Response res)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res.send(sauce.getSauce(input.args).output());
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
res.send("Image not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.network;
|
||||||
|
|
||||||
import core.Command;
|
import core.Command;
|
||||||
import core.LocStrings;
|
import core.LocStrings;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package commands.general;
|
package commands.network;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -4,13 +4,37 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import commands.benchmark.CommandBenchmark;
|
import commands.beans.CommandBeansShow;
|
||||||
|
import commands.beans.CommandBetBeans;
|
||||||
|
import commands.beans.CommandBetHistory;
|
||||||
|
import commands.beans.CommandGiveBeans;
|
||||||
|
import commands.beans.CommandTradeBeans;
|
||||||
import commands.characters.CommandCharacterMain;
|
import commands.characters.CommandCharacterMain;
|
||||||
import commands.dew.CommandDew;
|
import commands.dev.CommandDBFlush;
|
||||||
|
import commands.dev.CommandDBStats;
|
||||||
|
import commands.dev.CommandDoWork;
|
||||||
|
import commands.dev.CommandHelpBuilder;
|
||||||
|
import commands.dev.CommandInvite;
|
||||||
|
import commands.dev.CommandShutdown;
|
||||||
|
import commands.dev.CommandStats;
|
||||||
|
import commands.dev.CommandTweet;
|
||||||
import commands.general.*;
|
import commands.general.*;
|
||||||
import commands.guildrole.CommandGuildRoleMain;
|
import commands.guildrole.CommandGuildRoleMain;
|
||||||
|
import commands.images.CommandBlurry;
|
||||||
|
import commands.images.CommandCatch;
|
||||||
|
import commands.images.CommandDefaultDance;
|
||||||
|
import commands.images.CommandPerish;
|
||||||
|
import commands.images.CommandStark;
|
||||||
|
import commands.images.CommandTeey;
|
||||||
|
import commands.images.CommandYeet;
|
||||||
import commands.mod.CommandModMain;
|
import commands.mod.CommandModMain;
|
||||||
import commands.music.CommandMusicMain;
|
import commands.music.CommandMusicMain;
|
||||||
|
import commands.network.CommandColiru;
|
||||||
|
import commands.network.CommandDerpi;
|
||||||
|
import commands.network.CommandE6;
|
||||||
|
import commands.network.CommandGetSauce;
|
||||||
|
import commands.network.CommandJDoodle;
|
||||||
|
import commands.network.CommandWolfram;
|
||||||
import commands.poll.CommandPollMain;
|
import commands.poll.CommandPollMain;
|
||||||
import commands.raffle.CommandRaffleMain;
|
import commands.raffle.CommandRaffleMain;
|
||||||
import dataStructures.*;
|
import dataStructures.*;
|
||||||
@@ -64,7 +88,6 @@ public class CommandManager
|
|||||||
this.register(LocCommands.stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe));
|
this.register(LocCommands.stub("tweet"), new CommandTweet(KittyRole.Dev, KittyRating.Safe));
|
||||||
this.register(LocCommands.stub("dbflush"), new CommandDBFlush(KittyRole.Dev, KittyRating.Safe));
|
this.register(LocCommands.stub("dbflush"), new CommandDBFlush(KittyRole.Dev, KittyRating.Safe));
|
||||||
this.register(LocCommands.stub("dbstats"), new CommandDBStats(KittyRole.Dev, KittyRating.Safe));
|
this.register(LocCommands.stub("dbstats"), new CommandDBStats(KittyRole.Dev, KittyRating.Safe));
|
||||||
this.register(LocCommands.stub("dew"), new CommandDew(KittyRole.Dev, KittyRating.Safe));
|
|
||||||
|
|
||||||
// Admin
|
// Admin
|
||||||
this.register(LocCommands.stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe));
|
this.register(LocCommands.stub("rating"), new CommandRating(KittyRole.Admin, KittyRating.Safe));
|
||||||
@@ -110,7 +133,11 @@ public class CommandManager
|
|||||||
this.register(LocCommands.stub("poll"), new CommandPollMain(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));
|
this.register(LocCommands.stub("music"), new CommandMusicMain(KittyRole.General, KittyRating.Safe));
|
||||||
this.register(LocCommands.stub("defaultdance"), new CommandDefaultDance(KittyRole.General, KittyRating.Safe));
|
this.register(LocCommands.stub("defaultdance"), new CommandDefaultDance(KittyRole.General, KittyRating.Safe));
|
||||||
this.register(LocCommands.stub("weh"), new CommandWeh(KittyRole.General, KittyRating.Safe));
|
this.register(LocCommands.stub("getsauce"), new CommandGetSauce(KittyRole.General, KittyRating.Safe));
|
||||||
|
this.register(LocCommands.stub("tradebeans, trade"), new CommandTradeBeans(KittyRole.General, KittyRating.Safe));
|
||||||
|
|
||||||
|
this.register(LocCommands.stub("e6"), new CommandE6(KittyRole.General, KittyRating.Filtered));
|
||||||
|
this.register(LocCommands.stub("derpi"), new CommandDerpi(KittyRole.General, KittyRating.Filtered));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands)
|
// Allows the command manager to keep track of a command. Takes a pair (the un-localized and localzied commands)
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public class Config
|
|||||||
sections = new Vector<IConfigSection>();
|
sections = new Vector<IConfigSection>();
|
||||||
|
|
||||||
// Add all sections
|
// Add all sections
|
||||||
|
sections.add(new ConfigGlobals());
|
||||||
sections.add(new LocCommands());
|
sections.add(new LocCommands());
|
||||||
sections.add(new LocStrings());
|
sections.add(new LocStrings());
|
||||||
sections.add(new CommandEnabler());
|
sections.add(new CommandEnabler());
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
package core;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import dataStructures.KittyStartupMode;
|
||||||
|
import utils.GlobalLog;
|
||||||
|
|
||||||
|
// Want to add a single item to the config file? This is where that lives.
|
||||||
|
public class ConfigGlobals implements IConfigSection
|
||||||
|
{
|
||||||
|
// Defined const variables
|
||||||
|
public static final String header = "Globals";
|
||||||
|
public static ConfigGlobals instance;
|
||||||
|
|
||||||
|
|
||||||
|
// A pile of variables being manually tracked/serialized to the config file
|
||||||
|
private static final String startupStyleKey = "mode (dev or release)";
|
||||||
|
private KittyStartupMode startupStyleValue = KittyStartupMode.Dev;
|
||||||
|
|
||||||
|
private static final String activityKey = "activity";
|
||||||
|
private String activityValue = "with a laser pointer"; // Appears as "Playing with a laser pointer"
|
||||||
|
|
||||||
|
// Singleton Constructor - explode if there's a problem.
|
||||||
|
public ConfigGlobals()
|
||||||
|
{
|
||||||
|
if(instance == null)
|
||||||
|
{
|
||||||
|
instance = this;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GlobalLog.error("Attempted to initialize a second config globals! Probably don't do this!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSectionTitle()
|
||||||
|
{
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static KittyStartupMode getStartupMode()
|
||||||
|
{
|
||||||
|
return instance.startupStyleValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getActivity()
|
||||||
|
{
|
||||||
|
return instance.activityValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void consume(List<ConfigItem> pairs)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < pairs.size(); ++i)
|
||||||
|
{
|
||||||
|
String key = pairs.get(i).key;
|
||||||
|
String value = pairs.get(i).value;
|
||||||
|
|
||||||
|
// Parse startup style
|
||||||
|
if(key.equalsIgnoreCase(startupStyleKey))
|
||||||
|
{
|
||||||
|
startupStyleValue = KittyStartupMode.Dev;
|
||||||
|
|
||||||
|
if(value.equalsIgnoreCase(KittyStartupMode.Release.name()))
|
||||||
|
{
|
||||||
|
startupStyleValue = KittyStartupMode.Release;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(value.equalsIgnoreCase(KittyStartupMode.PoguRelease.name()))
|
||||||
|
{
|
||||||
|
startupStyleValue = KittyStartupMode.PoguRelease;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse text for 'playing'
|
||||||
|
if(key.equalsIgnoreCase(activityKey))
|
||||||
|
{
|
||||||
|
activityValue = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we change any globals, update anything we need to.
|
||||||
|
if(ObjectBuilder.getHasInitialized())
|
||||||
|
{
|
||||||
|
ObjectBuilder.updateActivity();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ConfigItem> produce()
|
||||||
|
{
|
||||||
|
List<ConfigItem> items = new ArrayList<ConfigItem>();
|
||||||
|
items.add(new ConfigItem(getSectionTitle(), startupStyleKey, startupStyleValue.name().toLowerCase()));
|
||||||
|
items.add(new ConfigItem(getSectionTitle(), activityKey, activityValue));
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,9 +6,9 @@ import utils.StringUtils;
|
|||||||
// perform any parsing past naming columns, and just holds the raw data.
|
// perform any parsing past naming columns, and just holds the raw data.
|
||||||
public class ConfigItem
|
public class ConfigItem
|
||||||
{
|
{
|
||||||
public String type;
|
public String type; // The section this specific key/value pair belongs to. This almost certainly will appear in multiple places.
|
||||||
public String key;
|
public String key; // A unique key for a given lookup value for the specified section. Keys, within sections, are unique.
|
||||||
public String value;
|
public String value; // The value assocaited with the key.
|
||||||
public static final int items = 3;
|
public static final int items = 3;
|
||||||
public static final String[] header = {"Type","Key","Value"};
|
public static final String[] header = {"Type","Key","Value"};
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import dataStructures.Pair;
|
|||||||
public class LocCommands extends BaseLocFile implements IConfigSection
|
public class LocCommands extends BaseLocFile implements IConfigSection
|
||||||
{
|
{
|
||||||
// Defined const variables
|
// Defined const variables
|
||||||
public static final String HeaderName = "Localized Commands";
|
public static final String header = "Localized Commands";
|
||||||
public static final String function = "LocCommands.stub";
|
public static final String function = "LocCommands.stub";
|
||||||
|
|
||||||
// Instance
|
// Instance
|
||||||
@@ -20,7 +20,7 @@ public class LocCommands extends BaseLocFile implements IConfigSection
|
|||||||
// Constructor
|
// Constructor
|
||||||
public LocCommands()
|
public LocCommands()
|
||||||
{
|
{
|
||||||
super(HeaderName, function);
|
super(header, function);
|
||||||
|
|
||||||
GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName());
|
GlobalLog.log(LogFilter.Core, "Initializing " + this.getClass().getSimpleName());
|
||||||
|
|
||||||
|
|||||||
@@ -7,28 +7,43 @@ import java.util.concurrent.Semaphore;
|
|||||||
|
|
||||||
import javax.security.auth.login.LoginException;
|
import javax.security.auth.login.LoginException;
|
||||||
|
|
||||||
|
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers;
|
||||||
|
|
||||||
//import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
//import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
|
||||||
//import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
//import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
|
||||||
|
|
||||||
import core.lua.PluginManager;
|
import core.lua.PluginManager;
|
||||||
import dataStructures.*;
|
import dataStructures.KittyChannel;
|
||||||
|
import dataStructures.KittyCore;
|
||||||
|
import dataStructures.KittyGuild;
|
||||||
|
import dataStructures.KittyRating;
|
||||||
|
import dataStructures.KittyRole;
|
||||||
|
import dataStructures.KittyStartupMode;
|
||||||
|
import dataStructures.KittyUser;
|
||||||
import main.Main;
|
import main.Main;
|
||||||
import net.dv8tion.jda.core.AccountType;
|
import net.dv8tion.jda.api.AccountType;
|
||||||
import net.dv8tion.jda.core.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.core.JDABuilder;
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
import net.dv8tion.jda.core.entities.*;
|
import net.dv8tion.jda.api.entities.Activity;
|
||||||
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
import net.dv8tion.jda.api.entities.Emote;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.User;
|
||||||
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
import offline.Ref;
|
import offline.Ref;
|
||||||
import utils.AdminControl;
|
import utils.AdminControl;
|
||||||
//import utils.AudioUtils;
|
//import utils.AudioUtils;
|
||||||
import utils.GlobalLog;
|
import utils.GlobalLog;
|
||||||
import utils.LogFilter;
|
import utils.LogFilter;
|
||||||
|
import utils.audio.AudioUtils;
|
||||||
|
|
||||||
// NOTE(wisp): Isolated factory to assist with storage and caching if needed.
|
// NOTE: Isolated factory to assist with storage and caching if needed.
|
||||||
// This also minimizes the number of places JDA interacts with our codebase.
|
// This also minimizes the number of places JDA interacts with our codebase.
|
||||||
// As it stands, if the object name begins with Kitty, it's constructed here.
|
// As it stands, if the object name begins with Kitty, it's constructed here.
|
||||||
// TODO: Make all methods ID based instead of event based
|
// TODO: Make all methods ID based instead of event based
|
||||||
public class ObjectBuilderFactory
|
public class ObjectBuilder
|
||||||
{
|
{
|
||||||
// Key: guild string id, Value: guild information
|
// Key: guild string id, Value: guild information
|
||||||
private static HashMap<String, KittyGuild> guildCache;
|
private static HashMap<String, KittyGuild> guildCache;
|
||||||
@@ -55,7 +70,7 @@ public class ObjectBuilderFactory
|
|||||||
private static CommandManager commandManager;
|
private static CommandManager commandManager;
|
||||||
|
|
||||||
//Audio track manager
|
//Audio track manager
|
||||||
// private static AudioPlayerManager audioPlayer = new DefaultAudioPlayerManager();
|
private static AudioPlayerManager playerManager = new DefaultAudioPlayerManager();
|
||||||
|
|
||||||
// Localization classes - these are singletons, but should be initialized before almost all other
|
// 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.
|
// things so their inclusion in the factory is to ensure they're started at the correct time.
|
||||||
@@ -67,15 +82,20 @@ public class ObjectBuilderFactory
|
|||||||
|
|
||||||
// Lazy initialization multithreaded mutex stuff to prevent explosions.
|
// Lazy initialization multithreaded mutex stuff to prevent explosions.
|
||||||
// TODO: Investigate using 'synchronized' instead potentially
|
// TODO: Investigate using 'synchronized' instead potentially
|
||||||
private static boolean hasInitialized;
|
private static Boolean hasInitialized = false;
|
||||||
private static Semaphore initMutex = new Semaphore(1);
|
private static Semaphore initMutex = new Semaphore(1);
|
||||||
private static JDA kitty;
|
private static JDA kitty;
|
||||||
|
|
||||||
// This is it, this is how the lazy init starts!
|
// This is it, this is how the lazy init starts!
|
||||||
private static void lazyInit()
|
private static void lazyInit()
|
||||||
|
{
|
||||||
|
synchronized(hasInitialized)
|
||||||
{
|
{
|
||||||
if(hasInitialized)
|
if(hasInitialized)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -90,17 +110,23 @@ public class ObjectBuilderFactory
|
|||||||
database = null;
|
database = null;
|
||||||
stats = null;
|
stats = null;
|
||||||
|
|
||||||
|
AudioSourceManagers.registerRemoteSources(playerManager);
|
||||||
|
AudioSourceManagers.registerLocalSource(playerManager);
|
||||||
|
|
||||||
// Start by reading from things that are external. Because
|
// Start by reading from things that are external. Because
|
||||||
// we require these things to be resolved before the rest of the application,
|
// we require these things to be resolved before the rest of
|
||||||
// we place them here.
|
// the application, we place them here.
|
||||||
config = new Config();
|
config = new Config();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
initMutex.release();
|
initMutex.release();
|
||||||
|
synchronized(hasInitialized)
|
||||||
|
{
|
||||||
hasInitialized = true;
|
hasInitialized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch(InterruptedException ie)
|
catch(InterruptedException ie)
|
||||||
{
|
{
|
||||||
GlobalLog.error(LogFilter.Core, "Issue during object builder lazy initialization."
|
GlobalLog.error(LogFilter.Core, "Issue during object builder lazy initialization."
|
||||||
@@ -108,6 +134,14 @@ public class ObjectBuilderFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean getHasInitialized()
|
||||||
|
{
|
||||||
|
synchronized(hasInitialized)
|
||||||
|
{
|
||||||
|
return hasInitialized;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////
|
////////////////////////
|
||||||
// Extraction Methods //
|
// Extraction Methods //
|
||||||
////////////////////////
|
////////////////////////
|
||||||
@@ -124,8 +158,10 @@ public class ObjectBuilderFactory
|
|||||||
|
|
||||||
List<Emote> emotes = event.getGuild().getEmotes();
|
List<Emote> emotes = event.getGuild().getEmotes();
|
||||||
ArrayList<String> emotesString = new ArrayList<String>();
|
ArrayList<String> emotesString = new ArrayList<String>();
|
||||||
|
HashMap<Long, KittyChannel> channels = new HashMap<Long, KittyChannel>();
|
||||||
String emote;
|
String emote;
|
||||||
String emoteFix;
|
String emoteFix;
|
||||||
|
channels.put(Long.getLong(uid), extractChannel(event));
|
||||||
for(int i = 0; i < emotes.size(); i++)
|
for(int i = 0; i < emotes.size(); i++)
|
||||||
{
|
{
|
||||||
emote = emotes.get(i).toString();
|
emote = emotes.get(i).toString();
|
||||||
@@ -147,7 +183,8 @@ public class ObjectBuilderFactory
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Construct a new guild with defaults
|
// 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(), playerManager), channels);
|
||||||
DatabaseManager.instance.globalRegister(guild);
|
DatabaseManager.instance.globalRegister(guild);
|
||||||
guildCache.put(uid, guild);
|
guildCache.put(uid, guild);
|
||||||
}
|
}
|
||||||
@@ -156,6 +193,8 @@ public class ObjectBuilderFactory
|
|||||||
return guild;
|
return guild;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Explicitly locks: guildCache
|
// Explicitly locks: guildCache
|
||||||
public static KittyRole extractRole(GuildMessageReceivedEvent event)
|
public static KittyRole extractRole(GuildMessageReceivedEvent event)
|
||||||
{
|
{
|
||||||
@@ -166,7 +205,7 @@ public class ObjectBuilderFactory
|
|||||||
// allowed to use the bot at a general level.
|
// allowed to use the bot at a general level.
|
||||||
KittyRole role = KittyRole.General;
|
KittyRole role = KittyRole.General;
|
||||||
|
|
||||||
if(event.getAuthor().getId() == event.getGuild().getOwner().getUser().getId())
|
if(event.getAuthor().getId() == event.getGuild().getOwnerId())
|
||||||
{
|
{
|
||||||
role = KittyRole.Admin;
|
role = KittyRole.Admin;
|
||||||
}
|
}
|
||||||
@@ -205,14 +244,13 @@ public class ObjectBuilderFactory
|
|||||||
public static KittyChannel extractChannel(GuildMessageReceivedEvent event)
|
public static KittyChannel extractChannel(GuildMessageReceivedEvent event)
|
||||||
{
|
{
|
||||||
lazyInit();
|
lazyInit();
|
||||||
|
|
||||||
String channelID = event.getChannel().getId();
|
String channelID = event.getChannel().getId();
|
||||||
String guildID = event.getGuild().getId();
|
|
||||||
KittyChannel channel = null;
|
KittyChannel channel = null;
|
||||||
|
|
||||||
synchronized(channelCache)
|
synchronized(channelCache)
|
||||||
{
|
{
|
||||||
KittyChannel cachedChannel = channelCache.get(channelID);
|
KittyChannel cachedChannel = channelCache.get(channelID);
|
||||||
|
boolean mature;
|
||||||
|
|
||||||
if(cachedChannel != null)
|
if(cachedChannel != null)
|
||||||
{
|
{
|
||||||
@@ -220,8 +258,8 @@ public class ObjectBuilderFactory
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
KittyGuild cachedGuild = guildCache.get(guildID);
|
mature = event.getChannel().isNSFW();
|
||||||
channel = new KittyChannel(channelID, cachedGuild);
|
channel = new KittyChannel(channelID, mature);
|
||||||
channelCache.put(channelID, channel);
|
channelCache.put(channelID, channel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -365,13 +403,34 @@ public class ObjectBuilderFactory
|
|||||||
{
|
{
|
||||||
lazyInit();
|
lazyInit();
|
||||||
|
|
||||||
kitty = new JDABuilder(AccountType.BOT).setToken(Ref.TestToken).buildBlocking();
|
// Determine token based on config. Default to test token.
|
||||||
kitty.getPresence().setGame(Game.playing("with digital yarn"));
|
String tokenToUse = Ref.TestToken;
|
||||||
|
switch(ConfigGlobals.getStartupMode())
|
||||||
|
{
|
||||||
|
case Release: tokenToUse = Ref.Token; break;
|
||||||
|
case PoguRelease: tokenToUse = Ref.PoguToken; break;
|
||||||
|
default: tokenToUse = Ref.TestToken; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct bot based on token using the JDA Builder
|
||||||
|
JDABuilder builder = JDABuilder.createDefault(tokenToUse);
|
||||||
|
kitty = builder.build();
|
||||||
|
|
||||||
|
// Set activity, and add primariy event listener.
|
||||||
|
updateActivity();
|
||||||
kitty.addEventListener(new Main());
|
kitty.addEventListener(new Main());
|
||||||
|
|
||||||
return new KittyCore(kitty);
|
return new KittyCore(kitty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Updates the bots current activity based on the globals value.
|
||||||
|
public static void updateActivity()
|
||||||
|
{
|
||||||
|
String activity = ConfigGlobals.getActivity();
|
||||||
|
GlobalLog.log(LogFilter.Core, "Updating activity to " + activity);
|
||||||
|
kitty.getPresence().setActivity(Activity.playing(activity));
|
||||||
|
}
|
||||||
|
|
||||||
// Default construction of the command manager. In order to remotely resolve command enabling
|
// Default construction of the command manager. In order to remotely resolve command enabling
|
||||||
// and disabling, what we do is construct the commands with a localized pair that is checked against
|
// and disabling, what we do is construct the commands with a localized pair that is checked against
|
||||||
// the CommandEnabler object passed in. In theory, we could have multiple CommandManagers, tho we can
|
// the CommandEnabler object passed in. In theory, we could have multiple CommandManagers, tho we can
|
||||||
+2
-2
@@ -107,12 +107,12 @@ public class Stats
|
|||||||
|
|
||||||
public int getGuildCount()
|
public int getGuildCount()
|
||||||
{
|
{
|
||||||
return ObjectBuilderFactory.getGuildCount();
|
return ObjectBuilder.getGuildCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUserCount()
|
public int getUserCount()
|
||||||
{
|
{
|
||||||
return ObjectBuilderFactory.getUserCount();
|
return ObjectBuilder.getUserCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Command> getAllCommands()
|
public ArrayList<Command> getAllCommands()
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import dataStructures.KittyGuild;
|
|||||||
import dataStructures.KittyUser;
|
import dataStructures.KittyUser;
|
||||||
import dataStructures.UserInput;
|
import dataStructures.UserInput;
|
||||||
import utils.GlobalLog;
|
import utils.GlobalLog;
|
||||||
import utils.LogFilter;
|
|
||||||
|
|
||||||
public class SubCommandFramework
|
public class SubCommandFramework
|
||||||
{
|
{
|
||||||
@@ -42,14 +41,10 @@ public class SubCommandFramework
|
|||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
GlobalLog.error(LogFilter.Command, e);
|
|
||||||
|
|
||||||
String help = Stats.instance.getHelpText(input.key);
|
String help = Stats.instance.getHelpText(input.key);
|
||||||
|
|
||||||
if(help != null)
|
if(help != null)
|
||||||
return new SubCommandFormattable(help);
|
return new SubCommandFormattable(help);
|
||||||
|
return new SubCommandFormattable("Something has gone very wrong.");
|
||||||
return new SubCommandFormattable("Whoops! Internal subcommand error!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
public abstract class BenchmarkCommand
|
public abstract class BenchmarkCommand
|
||||||
{
|
{
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
public class BenchmarkEntry
|
public class BenchmarkEntry
|
||||||
{
|
{
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
import dataStructures.KittyEmbed;
|
import dataStructures.KittyEmbed;
|
||||||
import dataStructures.Response;
|
import dataStructures.Response;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import commands.benchmark.*;
|
import commands.benchmark.*;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
import utils.StringUtils;
|
import utils.StringUtils;
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
import utils.GlobalLog;
|
import utils.GlobalLog;
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package commands.benchmark.core;
|
package core.benchmark;
|
||||||
|
|
||||||
public enum BenchmarkType
|
public enum BenchmarkType
|
||||||
{
|
{
|
||||||
@@ -1,40 +1,57 @@
|
|||||||
package dataStructures;
|
package dataStructures;
|
||||||
|
|
||||||
// This is a structure representing an image reponse for handing around.
|
import java.awt.Color;
|
||||||
|
|
||||||
|
// This is a structure representing an image response for handing around.
|
||||||
public class GenericImage
|
public class GenericImage
|
||||||
{
|
{
|
||||||
private String artist;
|
private KittyEmbed response= new KittyEmbed();
|
||||||
private String postURL;
|
|
||||||
private String imageURL;
|
|
||||||
|
|
||||||
public GenericImage(String artist, String postURL, String imageURL)
|
public GenericImage(String artist, String postURL, String imageURL)
|
||||||
{
|
{
|
||||||
this.artist = artist;
|
response.authorText = null;
|
||||||
this.postURL = postURL;
|
response.color = new Color(0,0,0);
|
||||||
this.imageURL = imageURL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editArtist(String artist)
|
public void editArtist(String artist)
|
||||||
{
|
{
|
||||||
this.artist = artist;
|
response.authorText = artist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editAuthorImage(String URL)
|
||||||
|
{
|
||||||
|
response.authorImage = URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editPostURL(String postURL)
|
public void editPostURL(String postURL)
|
||||||
{
|
{
|
||||||
this.postURL = postURL;
|
response.authorLink = postURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editImageURL(String imageURL)
|
public void editImageURL(String imageURL)
|
||||||
{
|
{
|
||||||
this.imageURL = imageURL;
|
response.imageURL = imageURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString()
|
public void editDescriptionText(String score)
|
||||||
{
|
{
|
||||||
if(imageURL.isEmpty())
|
response.descriptionText = score;
|
||||||
{
|
|
||||||
return "I couldn't find anything! Please try again!";
|
|
||||||
}
|
}
|
||||||
return "Artist: " + artist + "\n<" + postURL.trim() + ">\n" + imageURL;
|
|
||||||
|
public void editFooterText(String tags)
|
||||||
|
{
|
||||||
|
response.footerText = tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KittyEmbed output()
|
||||||
|
{
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid()
|
||||||
|
{
|
||||||
|
if(response.title != null)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,15 @@
|
|||||||
package dataStructures;
|
package dataStructures;
|
||||||
|
|
||||||
//import core.DatabaseTrackedObject;
|
|
||||||
|
|
||||||
public class KittyChannel //extends DatabaseTrackedObject
|
public class KittyChannel
|
||||||
{
|
{
|
||||||
public String uniqueID;
|
public String uniqueID;
|
||||||
public KittyGuild guild;
|
public boolean mature;
|
||||||
|
|
||||||
//public KittyRating rating;
|
public KittyChannel(String uniqueID, boolean mature)
|
||||||
//public bool isVoice;
|
|
||||||
|
|
||||||
public KittyChannel(String uniqueID, KittyGuild guild)
|
|
||||||
{
|
{
|
||||||
//super(uniqueID);
|
//super(uniqueID);
|
||||||
this.uniqueID = uniqueID;
|
this.uniqueID = uniqueID;
|
||||||
this.guild = guild;
|
this.mature = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public String serialize()
|
|
||||||
// {
|
|
||||||
// return "";
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void deSerialzie(String string)
|
|
||||||
// {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package dataStructures;
|
package dataStructures;
|
||||||
|
|
||||||
import net.dv8tion.jda.core.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
|
|
||||||
public class KittyCore
|
public class KittyCore
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package dataStructures;
|
package dataStructures;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
import core.DatabaseManager;
|
import core.DatabaseManager;
|
||||||
import core.DatabaseTrackedObject;
|
import core.DatabaseTrackedObject;
|
||||||
import utils.AdminControl;
|
import utils.AdminControl;
|
||||||
import utils.AudioUtils;
|
import utils.audio.AudioUtils;
|
||||||
|
|
||||||
// Context for a given guild for kittybot. Primarily designed to hold guild-specific settings.
|
// Context for a given guild for kittybot. Primarily designed to hold guild-specific settings.
|
||||||
public class KittyGuild extends DatabaseTrackedObject
|
public class KittyGuild extends DatabaseTrackedObject
|
||||||
@@ -21,6 +22,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
public ArrayList<String> hasVoted = new ArrayList<String>();
|
public ArrayList<String> hasVoted = new ArrayList<String>();
|
||||||
public ArrayList<String> emoji = new ArrayList<String>();
|
public ArrayList<String> emoji = new ArrayList<String>();
|
||||||
public ArrayList <KittyPoll> choices = new ArrayList<KittyPoll>();
|
public ArrayList <KittyPoll> choices = new ArrayList<KittyPoll>();
|
||||||
|
public HashMap <Long, KittyChannel> channels;
|
||||||
public AdminControl control;
|
public AdminControl control;
|
||||||
public AudioUtils audio;
|
public AudioUtils audio;
|
||||||
public ArrayList <KittyUser> raffleUsersUnchosen = new ArrayList<KittyUser>();
|
public ArrayList <KittyUser> raffleUsersUnchosen = new ArrayList<KittyUser>();
|
||||||
@@ -42,8 +44,10 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Default content for a guild
|
// 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, HashMap<Long, KittyChannel> channels)
|
||||||
{
|
{
|
||||||
|
|
||||||
super(uniqueID);
|
super(uniqueID);
|
||||||
this.uniqueID = uniqueID;
|
this.uniqueID = uniqueID;
|
||||||
roleList = new KittyTrackedVector(roleListName, uniqueID);
|
roleList = new KittyTrackedVector(roleListName, uniqueID);
|
||||||
@@ -54,11 +58,14 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
this.contentRating = KittyRating.Safe;
|
this.contentRating = KittyRating.Safe;
|
||||||
this.polling = false;
|
this.polling = false;
|
||||||
this.emoji = emoji;
|
this.emoji = emoji;
|
||||||
|
this.audio = audio;
|
||||||
|
this.channels = channels;
|
||||||
setCommandIndicator("!");
|
setCommandIndicator("!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Explicit constructor
|
// Explicit constructor
|
||||||
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner, String uniqueID)
|
public KittyGuild(String commandIndicator, KittyRating contentRating, KittyUser guildOwner,
|
||||||
|
String uniqueID, AudioUtils audio, HashMap<Long, KittyChannel> channels)
|
||||||
{
|
{
|
||||||
super(uniqueID);
|
super(uniqueID);
|
||||||
this.uniqueID = uniqueID;
|
this.uniqueID = uniqueID;
|
||||||
@@ -70,6 +77,8 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
this.contentRating = contentRating;
|
this.contentRating = contentRating;
|
||||||
this.polling = false;
|
this.polling = false;
|
||||||
this.guildOwner = guildOwner;
|
this.guildOwner = guildOwner;
|
||||||
|
this.audio = audio;
|
||||||
|
this.channels = channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String startPoll(String poll)
|
public String startPoll(String poll)
|
||||||
@@ -123,7 +132,7 @@ public class KittyGuild extends DatabaseTrackedObject
|
|||||||
{
|
{
|
||||||
if(!raffleUsersChosen.contains(user) && !raffleUsersUnchosen.contains(user) && user.getBeans() > raffleCost && raffling)
|
if(!raffleUsersChosen.contains(user) && !raffleUsersUnchosen.contains(user) && user.getBeans() > raffleCost && raffling)
|
||||||
{
|
{
|
||||||
user.changeBeans(raffleCost);
|
user.changeBeans(-raffleCost);
|
||||||
raffleUsersUnchosen.add(user);
|
raffleUsersUnchosen.add(user);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package dataStructures;
|
||||||
|
|
||||||
|
public enum KittyStartupMode
|
||||||
|
{
|
||||||
|
Dev(1), Release(2), PoguRelease(3);
|
||||||
|
|
||||||
|
private final int value;
|
||||||
|
private KittyStartupMode(int value)
|
||||||
|
{
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue()
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package dataStructures;
|
|
||||||
|
|
||||||
public class KittyTrackedResponse
|
|
||||||
{
|
|
||||||
// TODO: Fill this out!
|
|
||||||
}
|
|
||||||
@@ -2,15 +2,13 @@ package dataStructures;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import net.dv8tion.jda.core.JDA;
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
import net.dv8tion.jda.core.MessageBuilder;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.core.entities.Message;
|
import net.dv8tion.jda.api.MessageBuilder;
|
||||||
import net.dv8tion.jda.core.entities.TextChannel;
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
import net.dv8tion.jda.core.events.message.guild.*;
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
|
||||||
import net.dv8tion.jda.core.requests.restaction.MessageAction;
|
import net.dv8tion.jda.api.utils.AttachmentOption;
|
||||||
import net.dv8tion.jda.core.EmbedBuilder;
|
|
||||||
import utils.GlobalLog;
|
import utils.GlobalLog;
|
||||||
import utils.LogFilter;
|
import utils.LogFilter;
|
||||||
|
|
||||||
@@ -19,9 +17,6 @@ import utils.LogFilter;
|
|||||||
// commands aren't exposed to the GuildMessageReceivedEvent then we should be fine.
|
// commands aren't exposed to the GuildMessageReceivedEvent then we should be fine.
|
||||||
public class Response
|
public class Response
|
||||||
{
|
{
|
||||||
// Last message
|
|
||||||
private static Message lastSentMessage = new MessageBuilder().append(" ").build();
|
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
private GuildMessageReceivedEvent event;
|
private GuildMessageReceivedEvent event;
|
||||||
private final int discordMessageMax = 2000;
|
private final int discordMessageMax = 2000;
|
||||||
@@ -78,10 +73,14 @@ public class Response
|
|||||||
embed.setThumbnail(thumbPath);
|
embed.setThumbnail(thumbPath);
|
||||||
message.setEmbed(embed.build());
|
message.setEmbed(embed.build());
|
||||||
|
|
||||||
|
GlobalLog.log("We're trying to send a response that has a locally defined thumbnail file...");
|
||||||
|
|
||||||
File thumbImage = new File(thumbName);
|
File thumbImage = new File(thumbName);
|
||||||
if(thumbImage.exists())
|
if(thumbImage.exists())
|
||||||
{
|
{
|
||||||
respond(event.getChannel().sendFile(thumbImage, thumbName, message.build()));
|
// Used to eb as follows:
|
||||||
|
//event.getChannel().sendFile(thumbImage, thumbName, message.build()).queue();
|
||||||
|
event.getChannel().sendMessage(message.build()).queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -89,7 +88,7 @@ public class Response
|
|||||||
if(embedInfo.thumbnailURL != null)
|
if(embedInfo.thumbnailURL != null)
|
||||||
embed.setThumbnail(embedInfo.thumbnailURL);
|
embed.setThumbnail(embedInfo.thumbnailURL);
|
||||||
|
|
||||||
respond(event.getChannel().sendMessage(embed.build()));
|
event.getChannel().sendMessage(embed.build()).queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,11 +98,11 @@ public class Response
|
|||||||
GlobalLog.log(LogFilter.Response, "Sending response: " + toRespondWith);
|
GlobalLog.log(LogFilter.Response, "Sending response: " + toRespondWith);
|
||||||
if(toRespondWith.length() > discordMessageMax)
|
if(toRespondWith.length() > discordMessageMax)
|
||||||
{
|
{
|
||||||
respond(event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!"));
|
event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
respond(event.getChannel().sendMessage(toRespondWith));
|
event.getChannel().sendMessage(toRespondWith).queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,11 +113,11 @@ public class Response
|
|||||||
channel = kitty.getTextChannelById(Long.parseLong(channelID));
|
channel = kitty.getTextChannelById(Long.parseLong(channelID));
|
||||||
if(toRespondWith.length() > discordMessageMax)
|
if(toRespondWith.length() > discordMessageMax)
|
||||||
{
|
{
|
||||||
respond(channel.sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!"));
|
channel.sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!").queue();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
respond(channel.sendMessage(toRespondWith));
|
channel.sendMessage(toRespondWith).queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,11 +127,11 @@ public class Response
|
|||||||
GlobalLog.log(LogFilter.Response, "Sending immediate response: " + toRespondWith);
|
GlobalLog.log(LogFilter.Response, "Sending immediate response: " + toRespondWith);
|
||||||
if(toRespondWith.length() > discordMessageMax)
|
if(toRespondWith.length() > discordMessageMax)
|
||||||
{
|
{
|
||||||
respondImmediate(event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!"));
|
event.getChannel().sendMessage(toRespondWith.substring(0, kittyMessageMax) + "\n\nI think that's enough!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
respondImmediate(event.getChannel().sendMessage(toRespondWith));
|
event.getChannel().sendMessage(toRespondWith).complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,75 +139,20 @@ public class Response
|
|||||||
public void sendFile(File toRespondWith, String extension)
|
public void sendFile(File toRespondWith, String extension)
|
||||||
{
|
{
|
||||||
GlobalLog.log(LogFilter.Response, "Sending file response");
|
GlobalLog.log(LogFilter.Response, "Sending file response");
|
||||||
respond(event.getChannel().sendFile(toRespondWith, "return." + extension));
|
event.getChannel().sendFile(toRespondWith, "return." + extension).queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Queues an input stream response to the channel that issued the command.
|
// Queues an input stream response to the channel that issued the command.
|
||||||
public void sendFile(InputStream in, String extension)
|
public void sendFile(InputStream in, String extension)
|
||||||
{
|
{
|
||||||
GlobalLog.log(LogFilter.Response, "Sending input stream response");
|
GlobalLog.log(LogFilter.Response, "Sending input stream response");
|
||||||
respond(event.getChannel().sendFile(in, "return." + extension));
|
event.getChannel().sendFile(in, "return." + extension).queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////
|
//Sends Kittybot as an object
|
||||||
// Message Management //
|
//WARNING: THIS WILL EDIT THE ENTIRE BOT, DO NOT USE LIGHTLY
|
||||||
////////////////////////
|
public JDA getKitty()
|
||||||
|
|
||||||
// Blast that message out and don't do anything else on this thread until sent.
|
|
||||||
// BLOCKING
|
|
||||||
protected void respondImmediate(MessageAction toSend)
|
|
||||||
{
|
{
|
||||||
synchronized(lastSentMessage)
|
return kitty;
|
||||||
{
|
|
||||||
lastSentMessage = toSend.complete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// thread-safe assignment. Assignment may technically be out of order, so keep that in mind.
|
|
||||||
// ASYNC
|
|
||||||
protected void respond(MessageAction toSend)
|
|
||||||
{
|
|
||||||
toSend.submit().whenComplete((msg, err) -> {
|
|
||||||
synchronized(lastSentMessage)
|
|
||||||
{
|
|
||||||
lastSentMessage = msg;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// BLOCKING
|
|
||||||
public static String GetLastMessage()
|
|
||||||
{
|
|
||||||
synchronized(lastSentMessage)
|
|
||||||
{
|
|
||||||
if(lastSentMessage == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return lastSentMessage.getContentRaw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ASYNC
|
|
||||||
public static void GetLastMessage(Consumer<String> consumer)
|
|
||||||
{
|
|
||||||
synchronized(lastSentMessage)
|
|
||||||
{
|
|
||||||
if(lastSentMessage == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
consumer.accept(lastSentMessage.getContentRaw());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// BLOCKING
|
|
||||||
public static void EditLastMessage(String newContent)
|
|
||||||
{
|
|
||||||
synchronized(lastSentMessage)
|
|
||||||
{
|
|
||||||
if(lastSentMessage != null)
|
|
||||||
{
|
|
||||||
lastSentMessage.editMessage(newContent).queue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user