diff --git a/.gradle/7.3.3/checksums/checksums.lock b/.gradle/7.3.3/checksums/checksums.lock
new file mode 100644
index 00000000..91546aa5
Binary files /dev/null and b/.gradle/7.3.3/checksums/checksums.lock differ
diff --git a/.gradle/7.3.3/checksums/md5-checksums.bin b/.gradle/7.3.3/checksums/md5-checksums.bin
new file mode 100644
index 00000000..b93344ce
Binary files /dev/null and b/.gradle/7.3.3/checksums/md5-checksums.bin differ
diff --git a/.gradle/7.3.3/checksums/sha1-checksums.bin b/.gradle/7.3.3/checksums/sha1-checksums.bin
new file mode 100644
index 00000000..a4273211
Binary files /dev/null and b/.gradle/7.3.3/checksums/sha1-checksums.bin differ
diff --git a/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock
new file mode 100644
index 00000000..efdcc15d
Binary files /dev/null and b/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock differ
diff --git a/.gradle/7.3.3/dependencies-accessors/gc.properties b/.gradle/7.3.3/dependencies-accessors/gc.properties
new file mode 100644
index 00000000..e69de29b
diff --git a/.gradle/7.3.3/executionHistory/executionHistory.bin b/.gradle/7.3.3/executionHistory/executionHistory.bin
new file mode 100644
index 00000000..bf99046b
Binary files /dev/null and b/.gradle/7.3.3/executionHistory/executionHistory.bin differ
diff --git a/.gradle/7.3.3/executionHistory/executionHistory.lock b/.gradle/7.3.3/executionHistory/executionHistory.lock
new file mode 100644
index 00000000..cca9d545
Binary files /dev/null and b/.gradle/7.3.3/executionHistory/executionHistory.lock differ
diff --git a/.gradle/7.3.3/fileChanges/last-build.bin b/.gradle/7.3.3/fileChanges/last-build.bin
new file mode 100644
index 00000000..f76dd238
Binary files /dev/null and b/.gradle/7.3.3/fileChanges/last-build.bin differ
diff --git a/.gradle/7.3.3/fileHashes/fileHashes.bin b/.gradle/7.3.3/fileHashes/fileHashes.bin
new file mode 100644
index 00000000..c15d1500
Binary files /dev/null and b/.gradle/7.3.3/fileHashes/fileHashes.bin differ
diff --git a/.gradle/7.3.3/fileHashes/fileHashes.lock b/.gradle/7.3.3/fileHashes/fileHashes.lock
new file mode 100644
index 00000000..23f0c2b5
Binary files /dev/null and b/.gradle/7.3.3/fileHashes/fileHashes.lock differ
diff --git a/.gradle/7.3.3/fileHashes/resourceHashesCache.bin b/.gradle/7.3.3/fileHashes/resourceHashesCache.bin
new file mode 100644
index 00000000..07dee091
Binary files /dev/null and b/.gradle/7.3.3/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/7.3.3/gc.properties b/.gradle/7.3.3/gc.properties
new file mode 100644
index 00000000..e69de29b
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 00000000..acd2d26b
Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 00000000..1523ff41
--- /dev/null
+++ b/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Sun Mar 03 10:18:29 PST 2024
+gradle.version=7.3.3
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 00000000..6a2a7497
Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
new file mode 100644
index 00000000..cf4f26a9
Binary files /dev/null and b/.gradle/file-system.probe differ
diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties
new file mode 100644
index 00000000..e69de29b
diff --git a/build/reports/tests/test/classes/org.jointheleague.features.student.third_feature.HolidaysTest.html b/build/reports/tests/test/classes/org.jointheleague.features.student.third_feature.HolidaysTest.html
new file mode 100644
index 00000000..71764f18
--- /dev/null
+++ b/build/reports/tests/test/classes/org.jointheleague.features.student.third_feature.HolidaysTest.html
@@ -0,0 +1,116 @@
+
+
+
+
+
Package org.jointheleague.features.student.third_feature
+
+
all > org.jointheleague.features.student.third_feature
+
+
+
+
+
+
+
+|
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
Classes
+
+
+
+| Class |
+Tests |
+Failures |
+Ignored |
+Duration |
+Success rate |
+
+
+
+|
+HolidaysTest
+ |
+5 |
+0 |
+0 |
+1.637s |
+100% |
+
+
+
+
+
+
+
+
diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin
new file mode 100644
index 00000000..e69de29b
diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx
new file mode 100644
index 00000000..f76dd238
Binary files /dev/null and b/build/test-results/test/binary/output.bin.idx differ
diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
new file mode 100644
index 00000000..823dfca9
Binary files /dev/null and b/build/test-results/test/binary/results.bin differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
new file mode 100644
index 00000000..a103abd9
Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
new file mode 100644
index 00000000..2866c021
Binary files /dev/null and b/build/tmp/compileTestJava/previous-compilation-data.bin differ
diff --git a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java
index ae863505..f3fd8d6e 100644
--- a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java
+++ b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java
@@ -8,9 +8,11 @@
import org.jointheleague.features.examples.third_features.CatFactsApi;
import org.jointheleague.features.examples.third_features.NewsApi;
import org.jointheleague.features.examples.first_features.CurrentTime;
-import org.jointheleague.features.examples.first_features.RandomNumber;
import org.jointheleague.features.help_embed.HelpListener;
import org.jointheleague.features.student.first_feature.FeatureOne;
+import org.jointheleague.features.student.first_feature.Hello;
+import org.jointheleague.features.student.second_feature.Trivia;
+import org.jointheleague.features.student.third_feature.Holidays;
public class DiscordBot {
@@ -50,6 +52,9 @@ public void connect(boolean printInvite) {
addFeature(new HighLowGame(channelName));
addFeature(new NewsApi(channelName));
addFeature(new CatFactsApi(channelName));
+ addFeature(new Trivia(channelName));
+ addFeature(new Hello(channelName));
+ addFeature(new Holidays(channelName));
}
private void addFeature(Feature feature){
diff --git a/src/main/java/org/jointheleague/features/student/first_feature/Hello.java b/src/main/java/org/jointheleague/features/student/first_feature/Hello.java
new file mode 100644
index 00000000..d633ae3d
--- /dev/null
+++ b/src/main/java/org/jointheleague/features/student/first_feature/Hello.java
@@ -0,0 +1,49 @@
+package org.jointheleague.features.student.first_feature;
+
+import org.javacord.api.event.message.MessageCreateEvent;
+import org.jointheleague.features.abstract_classes.Feature;
+import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed;
+
+import java.util.Random;
+
+public class Hello extends Feature{
+ public final String COMMAND = "!hello";
+ Random ran = new Random();
+ int responseNum;
+
+ public Hello(String channelName) {
+ super(channelName);
+
+ //Create a help embed to describe feature when !help command is sent
+ helpEmbed = new HelpEmbed(
+ COMMAND,
+ "The bot will respond with hello in a random language."
+ );
+ }
+
+ @Override
+ public void handle(MessageCreateEvent event) {
+ String messageContent = event.getMessageContent();
+ if (messageContent.startsWith(COMMAND)) {
+ responseNum = ran.nextInt(5);
+ switch(responseNum){
+ case 0:
+ event.getChannel().sendMessage("Hello");
+ break;
+ case 1:
+ event.getChannel().sendMessage("Bonjour");
+ break;
+ case 2:
+ event.getChannel().sendMessage("Hola");
+ break;
+ case 3:
+ event.getChannel().sendMessage("Ciao");
+ break;
+ case 4:
+ event.getChannel().sendMessage("Shalom");
+ break;
+ }
+
+ }
+ }
+}
diff --git a/src/main/java/org/jointheleague/features/student/second_feature/Trivia.java b/src/main/java/org/jointheleague/features/student/second_feature/Trivia.java
new file mode 100644
index 00000000..5ce1a7f4
--- /dev/null
+++ b/src/main/java/org/jointheleague/features/student/second_feature/Trivia.java
@@ -0,0 +1,95 @@
+package org.jointheleague.features.student.second_feature;
+
+import org.javacord.api.event.message.MessageCreateEvent;
+import org.jointheleague.features.abstract_classes.Feature;
+import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class Trivia extends Feature {
+
+ public final String COMMAND = "!trivia";
+ public boolean questionRight = false;
+ int questionNumber;
+ String answer;
+ Random ran = new Random();
+ int score = 0;
+ public Trivia(String channelName) {
+ super(channelName);
+
+ //Create a help embed to describe feature when !help command is sent
+ helpEmbed = new HelpEmbed(
+ COMMAND,
+ "Trivia questions for the user to answer. Start the game with !trivia ask and enter a guess using !trivia 'your guess'. E.g. !trivia b. To end the game, use !trivia end. To view your score, use !trivia score."
+ );
+ }
+
+ @Override
+ public void handle(MessageCreateEvent event) {
+ String messageContent = event.getMessageContent();
+
+ //System.out.println(messageContent);
+
+ if (messageContent.equals(COMMAND + " ask")) {
+ questionRight = false;
+ questionNumber = ran.nextInt(6);
+
+ switch(questionNumber) {
+ case 0:
+ event.getChannel().sendMessage("Trivia: What is the main ingredient in guacamole?\na) Tomatoes\nb) Avocados\nc) Lemons\nd) Tortilla chips");
+ answer = "b";
+ break;
+ case 1:
+ event.getChannel().sendMessage("Trivia: How many Harry Potter books are there?\na) 8\nb) 6\nc) 5\nd) 7");
+ answer = "d";
+ break;
+ case 2:
+ event.getChannel().sendMessage("Trivia: What does www stand for in a website addresss bar?\na) World Wide Web\nb) Web World Wide\nc) Wild Wild West\nd) Wet Windows Web");
+ answer = "a";
+ break;
+ case 3:
+ event.getChannel().sendMessage("Trivia: Which country drinks the most amount of coffee per person?\na) USA\nb) Italy\nc) Finland\nd) Columbia");
+ answer = "c";
+ break;
+ case 4:
+ event.getChannel().sendMessage("Trivia: How many stars are there on the US Flag?\na) USA\nb) 50\nc) 75\nd) 45");
+ answer = "b";
+ break;
+ case 5:
+ event.getChannel().sendMessage("Trivia: In what year was the iPhone first released?\na) 2007\nb) 2008\nc) 1998\nd) 2002");
+ answer = "a";
+ break;
+ }
+
+ }
+ //check a command
+ else if (messageContent.contains(COMMAND)
+ && !messageContent.contains("Trivia:"))
+ {
+
+ String guessMessage = messageContent.replaceAll(" ", "").replace(COMMAND, "");
+ if (guessMessage.equalsIgnoreCase(answer)) {
+
+ event.getChannel().sendMessage("Trivia: "+answer + " is correct!");
+ questionRight = true;
+ score++;
+ event.getChannel().sendMessage("Trivia: " + "Your score is now: " + score);
+ } else if(guessMessage.equalsIgnoreCase("score")){
+ event.getChannel().sendMessage("Trivia: "+ "Your score is: "+ score);
+ }
+ else if(guessMessage.equalsIgnoreCase("end")){
+ event.getChannel().sendMessage("Trivia: " + "Thanks for playing! Your final score is: " + score);
+ score=0;
+ }
+ else if(!guessMessage.equalsIgnoreCase("")){
+ questionRight = false;
+ event.getChannel().sendMessage("Trivia: " + "Wrong, try again!");
+ score--;
+ event.getChannel().sendMessage("Trivia: " + "Your score is now: " + score);
+
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/jointheleague/features/student/third_feature/Holidays.java b/src/main/java/org/jointheleague/features/student/third_feature/Holidays.java
new file mode 100644
index 00000000..fdcdc88f
--- /dev/null
+++ b/src/main/java/org/jointheleague/features/student/third_feature/Holidays.java
@@ -0,0 +1,106 @@
+package org.jointheleague.features.student.third_feature;
+import net.aksingh.owmjapis.api.APIException;
+import org.javacord.api.event.message.MessageCreateEvent;
+import org.jointheleague.features.abstract_classes.Feature;
+import org.jointheleague.features.examples.third_features.plain_old_java_objects.cat_facts_api.CatWrapper;
+import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.util.UriBuilder;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+
+
+public class Holidays extends Feature {
+
+ public final String COMMAND = "!holidays";
+ private static final String baseUrl = "https://holidays.abstractapi.com/v1/";
+ private final String apiKey = "736d5028a46c42ada682689ef387e002";
+ private WebClient webClient;
+ String month = "";
+ String day = "";
+
+ public Holidays(String channelName) {
+ super(channelName);
+
+ //Create a help embed to describe feature when !help command is sent
+ helpEmbed = new HelpEmbed(
+ COMMAND,
+ "A command to get holidays on any date. Use !holidays M/D. Eg. !holidays 12/25");
+
+ this.webClient = WebClient
+ .builder()
+ .baseUrl(baseUrl)
+ .build();
+ }
+
+
+ public String getHoliday() {
+ try {
+ Mono