diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..5f458a75 Binary files /dev/null and b/.DS_Store differ diff --git a/build.gradle b/build.gradle index bb3a859e..cf380b09 100644 --- a/build.gradle +++ b/build.gradle @@ -10,17 +10,19 @@ repositories { } } +ext { + jupiterVersion = '5.7.0' +} + dependencies { - implementation 'org.javacord:javacord:3.8.0' + implementation 'net.dv8tion:JDA:5.0.0-beta.24' + implementation 'ch.qos.logback:logback-classic:1.5.6' implementation 'net.aksingh:owm-japis:2.5.3.0' - implementation 'com.googlecode.json-simple:json-simple:1.1.1' - implementation 'javax.json:javax.json-api:1.1' - implementation 'org.mockito:mockito-core:3.4.0' + implementation 'com.google.code.gson:gson:2.8.5' + testImplementation 'org.mockito:mockito-core:3.4.0' implementation 'org.springframework.boot:spring-boot-starter-webflux:2.4.1' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3' - testImplementation 'org.junit.jupiter:junit-jupiter:5.7.0' - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.4.2' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2' + testImplementation "org.junit.jupiter:junit-jupiter:${jupiterVersion}" + testImplementation "org.junit.jupiter:junit-jupiter-migrationsupport:${jupiterVersion}" } group = 'org.jointheleague' diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c0..7454180f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5550bfc6..48c0a02c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sun Dec 20 18:03:58 PST 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/src/main/java/org/jointheleague/Launcher.java b/src/main/java/org/jointheleague/Launcher.java index 629e352c..17b44585 100644 --- a/src/main/java/org/jointheleague/Launcher.java +++ b/src/main/java/org/jointheleague/Launcher.java @@ -3,7 +3,7 @@ import org.jointheleague.discord_bot.DiscordBot; public class Launcher { - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { //Initialize variables String channelName = System.getenv("CHANNEL_NAME"); diff --git a/src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java b/src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java new file mode 100644 index 00000000..03c76db1 --- /dev/null +++ b/src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java @@ -0,0 +1,27 @@ +package org.jointheleague.api_wrapper; + +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +public class ReceivedMessage { + + private MessageReceivedEvent event; + + public ReceivedMessage(MessageReceivedEvent event) { + this.event = event; + } + + public String getMessageContent() { + return this.event.getMessage().getContentStripped(); + } + + public void sendResponse(String message) { + this.event.getChannel().sendMessage(message).submit().join(); + } + + public Message sendResponse(MessageEmbed embed) { + return this.event.getChannel().sendMessageEmbeds(embed).submit().join(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java index ae863505..cefb5f79 100644 --- a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java +++ b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java @@ -1,8 +1,11 @@ package org.jointheleague.discord_bot; -import org.javacord.api.DiscordApi; -import org.javacord.api.DiscordApiBuilder; -import org.javacord.api.entity.intent.Intent; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; +import net.dv8tion.jda.api.utils.messages.MessageCreateData; + import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.examples.second_features.HighLowGame; import org.jointheleague.features.examples.third_features.CatFactsApi; @@ -18,7 +21,7 @@ public class DiscordBot { private String channelName; - DiscordApi api; + JDA api; HelpListener helpListener; @@ -28,21 +31,29 @@ public DiscordBot(String token, String channelName) { helpListener = new HelpListener(channelName); } - public void connect(boolean printInvite) { + public void connect(boolean printInvite) throws InterruptedException { - api = new DiscordApiBuilder().setToken(token).addIntents(Intent.MESSAGE_CONTENT).login().join(); + api = JDABuilder.createDefault(token) + .enableIntents(GatewayIntent.MESSAGE_CONTENT) // enables explicit access to message.getContentDisplay() + .build(); + api.awaitReady(); //Print the URL to invite the bot if (printInvite) { - System.out.println("To authorize your bot, send your teacher this link: " + api.createBotInvite() + System.out.println("To authorize your bot, send your teacher this link: " + api.getInviteUrl() +"\n\tThis message can be disabled in org.jointheleague.Launcher.java"); } //Send bot connected message in channel - api.getServerTextChannelsByName(channelName).forEach(e -> e.sendMessage(api.getYourself().getName() + " has connected")); + MessageCreateData botConnected = new MessageCreateBuilder() + .addContent(api.getSelfUser().getName() + " has connected") + .build(); + api.getTextChannelsByName(channelName, true).forEach(e -> { + e.sendMessage(botConnected).submit().join(); + }); //add help listener to bot - api.addMessageCreateListener(helpListener); + api.addEventListener(helpListener); //add features addFeature(new FeatureOne(channelName)); @@ -53,7 +64,7 @@ public void connect(boolean printInvite) { } private void addFeature(Feature feature){ - api.addMessageCreateListener(feature); + api.addEventListener(feature); helpListener.addHelpEmbed(feature.getHelpEmbed()); } } diff --git a/src/main/java/org/jointheleague/features/abstract_classes/Feature.java b/src/main/java/org/jointheleague/features/abstract_classes/Feature.java index 016d2818..fc804e55 100644 --- a/src/main/java/org/jointheleague/features/abstract_classes/Feature.java +++ b/src/main/java/org/jointheleague/features/abstract_classes/Feature.java @@ -1,12 +1,13 @@ package org.jointheleague.features.abstract_classes; -import org.javacord.api.event.message.MessageCreateEvent; -import org.javacord.api.listener.message.MessageCreateListener; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.aksingh.owmjapis.api.APIException; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -public abstract class Feature implements MessageCreateListener { +public abstract class Feature extends ListenerAdapter +{ protected String channelName; @@ -17,22 +18,16 @@ public Feature(String channelName) { } @Override - public void onMessageCreate(MessageCreateEvent event) { - event.getServerTextChannel().ifPresent(e -> { - if (e.getName().equals(channelName)) { - try { - handle(event); - } catch (APIException e1) { - e1.printStackTrace(); - } - } - }); + public void onMessageReceived(MessageReceivedEvent event) { + if (event.getChannel().getName().equals(channelName)) { + handle(new ReceivedMessage(event)); + } } public HelpEmbed getHelpEmbed() { return this.helpEmbed; } - public abstract void handle(MessageCreateEvent event) throws APIException; + public abstract void handle(ReceivedMessage event); } \ No newline at end of file diff --git a/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java b/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java index 7f41a974..9cd7a5b3 100644 --- a/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java +++ b/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java @@ -4,7 +4,7 @@ import java.text.SimpleDateFormat; import java.util.Date; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; @@ -18,13 +18,12 @@ public CurrentTime(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat formatter = new SimpleDateFormat("'The time is 'HH:mm:ss z' on 'MM-dd-yyyy'.'"); - event.getChannel().sendMessage(formatter.format(date)); + event.sendResponse(formatter.format(date)); } } - } diff --git a/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java b/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java index 13a59481..7a3df749 100644 --- a/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java +++ b/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java @@ -2,7 +2,7 @@ import java.util.Random; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; @@ -16,11 +16,11 @@ public RandomNumber(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { Random r = new Random(); - event.getChannel().sendMessage("Your random number is " + r.nextInt(1001)); + event.sendResponse("Your random number is " + r.nextInt(1001)); } } diff --git a/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java b/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java index 8dee99bf..4e4d7b47 100644 --- a/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java +++ b/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java @@ -1,6 +1,6 @@ package org.jointheleague.features.examples.second_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; @@ -18,13 +18,13 @@ public HighLowGame(String channelName) { } @Override - public void handle(MessageCreateEvent event){ + public void handle(ReceivedMessage event){ String messageContent = event.getMessageContent(); //start the game with the command if (messageContent.equals(COMMAND)) { numberToGuess = random.nextInt(100) + 1; - event.getChannel().sendMessage("I have picked a number between 1 and 100. Guess by using e.g. !highLow 5"); + event.sendResponse("I have picked a number between 1 and 100. Guess by using e.g. !highLow 5"); } //check a guess else if (messageContent.contains(COMMAND) @@ -34,7 +34,7 @@ else if (messageContent.contains(COMMAND) //check if the game has been started if(numberToGuess == 0){ //tell them to start the game first - event.getChannel().sendMessage("Please start the game first using just the command"); + event.sendResponse("Please start the game first using just the command"); return; } @@ -48,19 +48,19 @@ else if (messageContent.contains(COMMAND) } catch(NumberFormatException e){ //tell them to format their guess properly - event.getChannel().sendMessage("Please format your guess like this: " + COMMAND + " 5"); + event.sendResponse("Please format your guess like this: " + COMMAND + " 5"); return; } if (guess < numberToGuess) { //tell them it's too low - event.getChannel().sendMessage(guess + " is too low. Guess again!"); + event.sendResponse(guess + " is too low. Guess again!"); } else if (guess > numberToGuess) { //tell them it's too high - event.getChannel().sendMessage(guess + " is too high. Guess again!"); + event.sendResponse(guess + " is too high. Guess again!"); } else { //they got it correct - event.getChannel().sendMessage("Correct! The number I picked was " + numberToGuess); + event.sendResponse("Correct! The number I picked was " + numberToGuess); //set numberToGuess back to 0 numberToGuess = 0; } diff --git a/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java b/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java index d93a884b..95c6b0b9 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java @@ -1,6 +1,6 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; 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; @@ -27,11 +27,11 @@ public CatFactsApi(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { String catFact = getCatFact(); - event.getChannel().sendMessage(catFact); + event.sendResponse(catFact); } } diff --git a/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java b/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java index 67a4ef04..350bd175 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java @@ -1,6 +1,6 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.ApiExampleWrapper; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.Article; @@ -29,18 +29,18 @@ public NewsApi(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { messageContent = messageContent .replace(COMMAND, "") .replace(" " , ""); if (messageContent.equals("")) { - event.getChannel().sendMessage("Please put a topic after the command (e.g. " + COMMAND + " cats)"); + event.sendResponse("Please put a topic after the command (e.g. " + COMMAND + " cats)"); } else{ String story = findStory(messageContent); - event.getChannel().sendMessage(story); + event.sendResponse(story); } } } diff --git a/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java b/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java new file mode 100644 index 00000000..2dc45d26 --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java @@ -0,0 +1,109 @@ +package org.jointheleague.features.examples.third_features; + +import org.jointheleague.api_wrapper.ReceivedMessage; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; + +import java.io.*; +import java.util.ArrayList; +import java.util.Locale; +import java.util.Random; + +public class QuizGame extends Feature { + + public final String COMMAND = "q!question"; + + public static int progress; + + public static BufferedReader br; + + private static String question; + private static String answer; + private static ArrayList questions; + Random random; + + private static int score; + private static int r; + + private static int numqtn = 10; + + public QuizGame(String channelName) { + super(channelName); + + progress = -1; + //Create a help embed to describe feature when !help command is sent + question = "Error: Question not found"; + score = 0; + r = -1; + random = new Random(); + helpEmbed = new HelpEmbed( + COMMAND, + "A 10-question quiz game, in which the bot pulls randomized questions from an attached file to ask the user, whose responses take the form 'q!answer [answer]'. " + + "Spelling matters, but capitalization does not." + ); + } + + private void startGame(ReceivedMessage event) { + progress = 1; + score = 0; + questions = new ArrayList(); + try { + br = new BufferedReader(new FileReader("src/main/java/org/jointheleague/features/examples/third_features/questions.txt")); + String line = br.readLine(); + while(line != null){ + questions.add(line); + line = br.readLine(); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + event.sendResponse("A game has been started"); + event.sendResponse(getQuestion(event)); + } + + private void endGame(ReceivedMessage event) { + event.sendResponse("You answered " + score + " out of " + numqtn + " questions correctly."); + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + progress = 0; + r = -1; + } + + private String getQuestion(ReceivedMessage event) { + int r = random.nextInt(questions.size()); + question = questions.get(r); + questions.remove(r); + answer = question.substring(question.indexOf('/')+1); + question = question.substring(0, question.indexOf('/')); + return question; + } + + @Override + public void handle(ReceivedMessage event) { + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + //event.getChannel().sendMessage("Question command received"); just spammed the channel + if (messageContent.startsWith(COMMAND)) { + startGame(event); + } else if (messageContent.startsWith("q!answer")) { + if (progress>0 && progress<=numqtn) { + messageContent = messageContent.substring(messageContent.indexOf(' ') + 1); + if (messageContent.equals(answer.toLowerCase(Locale.ROOT))) { + score++; + event.sendResponse("Correct!"); + } else { + event.sendResponse("Incorrect! The correct answer was: " + answer); + } + progress++; + event.sendResponse(getQuestion(event)); + } + } + if (progress > numqtn) { + endGame(event); + } + } + +} diff --git a/src/main/java/org/jointheleague/features/examples/third_features/questions.txt b/src/main/java/org/jointheleague/features/examples/third_features/questions.txt new file mode 100644 index 00000000..be2a9403 --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/third_features/questions.txt @@ -0,0 +1,10 @@ +The corsair *Tripoli* was sunk by the *USS Enterprise* at the beginning of what war?/First Barbary War +Which university won its second basketball Big Ten Tournament Championship in 2023?/Purdue +What was the largest combat aircraft ever built, by wingspan?/B-36 Peacemaker +Which treaty was signed on 6 Feb 1922 with the goal of preventing a naval arms race?/Washington Naval Treaty +Organophosphate nerve agents inhibit the action of what enzyme?/acetylcholinesterase +The *Sturm und Drang* movement preceded what 19th-century artistic movement?/Romanticism +In 2016, the Colombian government signed a ceasefire agreement with what guerilla group?/FARC +What model organism was the first plant to have its genome sequenced?/Arabidopsis thaliana +Which city was once the center of a thalassocracy led by a Great Council and a doge elected from the Council of Ten?/Venice +The high-strength fiber Kevlar was invented by what American chemist?/Stephanie Kwolek \ No newline at end of file diff --git a/src/main/java/org/jointheleague/features/help_embed/HelpListener.java b/src/main/java/org/jointheleague/features/help_embed/HelpListener.java index ce31d434..2a3f61d9 100644 --- a/src/main/java/org/jointheleague/features/help_embed/HelpListener.java +++ b/src/main/java/org/jointheleague/features/help_embed/HelpListener.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; -import org.javacord.api.event.message.MessageCreateEvent; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; public class HelpListener extends Feature { @@ -17,10 +17,10 @@ public HelpListener(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { if(event.getMessageContent().equalsIgnoreCase(COMMAND)) { for(HelpEmbed helpEmbed : helpEmbeds) { - event.getChannel().sendMessage(helpEmbed.getEmbed()); + event.sendResponse(helpEmbed.getEmbed()); } } } diff --git a/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java b/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java index 50e902ac..cba8ca96 100644 --- a/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java +++ b/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java @@ -1,6 +1,8 @@ package org.jointheleague.features.help_embed.plain_old_java_objects.help_embed; -import org.javacord.api.entity.message.embed.EmbedBuilder; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.MessageEmbed; + import java.awt.*; public class HelpEmbed { @@ -28,11 +30,12 @@ public String getDescription() { return description; } - public EmbedBuilder getEmbed() { - EmbedBuilder embed = new EmbedBuilder(); - embed.setColor(this.color); - embed.setTitle(this.command); - embed.setDescription(this.description); + public MessageEmbed getEmbed() { + MessageEmbed embed = new EmbedBuilder() + .setColor(this.color) + .setTitle(this.command) + .setDescription(this.description) + .build(); return embed; } diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java b/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java index 9b303536..8ab6ffc7 100644 --- a/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java +++ b/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java @@ -1,7 +1,7 @@ package org.jointheleague.features.student.first_feature; -import org.javacord.api.event.message.MessageCreateEvent; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.templates.FeatureTemplate; @@ -21,7 +21,7 @@ public FeatureOne(String channelName) { } //IGNORE @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { //respond to message here @@ -29,17 +29,17 @@ public void handle(MessageCreateEvent event) { int ranInt = ran.nextInt(5); switch(ranInt){ - case 0:event.getChannel().sendMessage("What’s the best thing about Switzerland? \n \n I don’t know, but the flag is a big plus."); + case 0:event.sendResponse("What’s the best thing about Switzerland? \n \n I don’t know, but the flag is a big plus."); break; - case 1:event.getChannel().sendMessage("I invented a new word! \n \n Plagiarism!"); + case 1:event.sendResponse("I invented a new word! \n \n Plagiarism!"); break; - case 2:event.getChannel().sendMessage("Hear about the new restaurant called Karma? \n \n There’s no menu: You get what you deserve."); + case 2:event.sendResponse("Hear about the new restaurant called Karma? \n \n There’s no menu: You get what you deserve."); break; - case 3:event.getChannel().sendMessage("Did you hear about the claustrophobic astronaut? \n \n He just needed a little space."); + case 3:event.sendResponse("Did you hear about the claustrophobic astronaut? \n \n He just needed a little space."); break; - case 4:event.getChannel().sendMessage("Why don’t scientists trust atoms? \n \n Because they make up everything."); + case 4:event.sendResponse("Why don’t scientists trust atoms? \n \n Because they make up everything."); break; - default:event.getChannel().sendMessage("What’s the different between a cat and a comma? \n \n A cat has claws at the end of paws; A comma is a pause at the end of a clause. "); + default:event.sendResponse("What’s the different between a cat and a comma? \n \n A cat has claws at the end of paws; A comma is a pause at the end of a clause. "); break; } diff --git a/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java b/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java index f141564d..3884e21f 100644 --- a/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java +++ b/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java @@ -1,6 +1,6 @@ package org.jointheleague.features.templates; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; @@ -19,11 +19,11 @@ public FeatureTemplate(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { //respond to message here - event.getChannel().sendMessage("Sending a message to the channel"); + event.sendResponse("Sending a message to the channel"); } } diff --git a/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java b/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java index e25f7b25..90cccb1a 100644 --- a/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java +++ b/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.examples.first_features; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -24,10 +23,7 @@ public class CurrentTimeTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage messageCreateEvent; @BeforeEach void setUp() { @@ -63,13 +59,12 @@ void itShouldHandleMessagesWithCommand() { //Given HelpEmbed helpEmbed = new HelpEmbed(currentTime.COMMAND, "test"); when(messageCreateEvent.getMessageContent()).thenReturn(currentTime.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When currentTime.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage(anyString()); + verify(messageCreateEvent, times(1)).sendResponse(anyString()); } @Test @@ -82,7 +77,7 @@ void itShouldNotHandleMessagesWithoutCommand() { currentTime.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + verify(messageCreateEvent, never()).sendResponse(""); } @Test diff --git a/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java b/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java index 956f2b60..55970115 100644 --- a/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java +++ b/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.examples.first_features; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -24,10 +23,7 @@ public class RandomNumberTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage messageCreateEvent; @BeforeEach void setUp() { @@ -62,13 +58,12 @@ void itShouldHandleMessagesWithCommand() { //Given HelpEmbed helpEmbed = new HelpEmbed(randomNumber.COMMAND, "test"); when(messageCreateEvent.getMessageContent()).thenReturn(randomNumber.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When randomNumber.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage(anyString()); + verify(messageCreateEvent, times(1)).sendResponse(anyString()); } @Test @@ -81,7 +76,7 @@ void itShouldNotHandleMessagesWithoutCommand() { randomNumber.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + verify(messageCreateEvent, never()).sendResponse(""); } @Test diff --git a/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java b/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java index 3874bcad..5cffbe6c 100644 --- a/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java +++ b/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.examples.second_features; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -24,10 +23,7 @@ public class HighLowGameTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage messageCreateEvent; @BeforeEach void setUp() { @@ -63,13 +59,12 @@ void itShouldHandleMessagesWithCommand() { //Given HelpEmbed helpEmbed = new HelpEmbed(highLowGame.COMMAND, "test"); when(messageCreateEvent.getMessageContent()).thenReturn(highLowGame.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage(anyString()); + verify(messageCreateEvent, times(1)).sendResponse(anyString()); } @Test @@ -82,7 +77,7 @@ void itShouldNotHandleMessagesWithoutCommand() { highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + verify(messageCreateEvent, never()).sendResponse(""); } @Test @@ -115,13 +110,12 @@ void itShouldNotAcceptGuessIfGameIsNotStarted() { //Given String command = "!highLow 5"; when(messageCreateEvent.getMessageContent()).thenReturn(command); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage("Please start the game first using just the command"); + verify(messageCreateEvent, times(1)).sendResponse("Please start the game first using just the command"); } @@ -132,13 +126,12 @@ void itShouldTellTheUserIfTheirGuessIsTooLow() { String command = "!highLow " + guess; highLowGame.numberToGuess = 100; when(messageCreateEvent.getMessageContent()).thenReturn(command); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage(guess + " is too low. Guess again!"); + verify(messageCreateEvent, times(1)).sendResponse(guess + " is too low. Guess again!"); } @@ -149,13 +142,12 @@ void itShouldTellTheUserIfTheirGuessIsTooHigh() { String command = "!highLow " + guess; highLowGame.numberToGuess = 1; when(messageCreateEvent.getMessageContent()).thenReturn(command); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage(guess + " is too high. Guess again!"); + verify(messageCreateEvent, times(1)).sendResponse(guess + " is too high. Guess again!"); } @@ -166,13 +158,12 @@ void itShouldTellTheUserIfTheirGuessIsCorrect() { String command = "!highLow " + guess; highLowGame.numberToGuess = 100; when(messageCreateEvent.getMessageContent()).thenReturn(command); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage("Correct! The number I picked was " + guess); + verify(messageCreateEvent, times(1)).sendResponse("Correct! The number I picked was " + guess); } @Test @@ -182,12 +173,11 @@ void itShouldSendErrorMessageIfGuessIsNotANumber() { String command = "!highLow " + guess; highLowGame.numberToGuess = 100; when(messageCreateEvent.getMessageContent()).thenReturn(command); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage("Please format your guess like this: " + highLowGame.COMMAND + " 5"); + verify(messageCreateEvent, times(1)).sendResponse("Please format your guess like this: " + highLowGame.COMMAND + " 5"); } } \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java b/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java index 6590d6b8..108fd139 100644 --- a/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java +++ b/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.examples.third_features.plain_old_java_objects.cat_facts_api.CatWrapper; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.ApiExampleWrapper; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.Article; @@ -36,10 +35,7 @@ public class CatFactsApiTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage messageCreateEvent; @Mock WebClient webClientMock; @@ -121,7 +117,6 @@ void givenMessageWithCommand_whenHandle_thenSendCatFact() { catWrapper.setData(data); when(messageCreateEvent.getMessageContent()).thenReturn(catFactsApi.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn(textChannel); when(webClientMock.get()) .thenReturn(requestHeadersUriSpecMock); @@ -137,7 +132,7 @@ void givenMessageWithCommand_whenHandle_thenSendCatFact() { //then verify(webClientMock, times(1)).get(); - verify(textChannel, times(1)).sendMessage(catFact); + verify(messageCreateEvent, times(1)).sendResponse(catFact); } @Test @@ -150,7 +145,7 @@ void givenMessageWithoutCommand_whenHandle_thenDoNothing() { catFactsApi.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + verify(messageCreateEvent, never()).sendResponse(""); } } \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java b/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java index 44f9c744..0dd012a8 100644 --- a/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java +++ b/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.ApiExampleWrapper; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.Article; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; @@ -36,10 +35,7 @@ public class NewsApiTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage messageCreateEvent; @Mock WebClient webClientMock; @@ -115,14 +111,13 @@ void itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed() { void givenMessageWithCommandAndNoTopic_whenHandle_thenSendErrorMessage() { //given when(messageCreateEvent.getMessageContent()).thenReturn(newsApi.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn(textChannel); //when newsApi.handle(messageCreateEvent); //then verify(webClientMock, never()).get(); - verify(textChannel, times(1)).sendMessage("Please put a topic after the command (e.g. " + newsApi.COMMAND + " cats)"); + verify(messageCreateEvent, times(1)).sendResponse("Please put a topic after the command (e.g. " + newsApi.COMMAND + " cats)"); } @Test @@ -143,7 +138,6 @@ void givenMessageWithCommandAndTopic_whenHandle_thenSendStoryMessage() { expectedApiExampleWrapper.setArticles(expectedArticles); when(messageCreateEvent.getMessageContent()).thenReturn(newsApi.COMMAND + topic); - when(messageCreateEvent.getChannel()).thenReturn(textChannel); when(webClientMock.get()) .thenReturn(requestHeadersUriSpecMock); @@ -165,7 +159,7 @@ void givenMessageWithCommandAndTopic_whenHandle_thenSendStoryMessage() { //then verify(webClientMock, times(1)).get(); - verify(textChannel, times(1)).sendMessage(anyString()); + verify(messageCreateEvent, times(1)).sendResponse(anyString()); } @Test @@ -178,7 +172,7 @@ void givenMessageWithoutCommand_whenHandle_thenDoNothing() { newsApi.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + verify(messageCreateEvent, never()).sendResponse(""); } } \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java b/src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java index a7915549..8c95c657 100644 --- a/src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java +++ b/src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.student.first_feature; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.jointheleague.features.templates.FeatureTemplate; import org.junit.jupiter.api.AfterEach; @@ -28,10 +27,7 @@ public class FeatureOneTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage receivedMessage; @BeforeEach void setUp() { @@ -72,27 +68,26 @@ void itShouldHaveACommand() { void itShouldHandleMessagesWithCommand() { //Given HelpEmbed helpEmbed = new HelpEmbed(featureOne.COMMAND, "test"); - when(messageCreateEvent.getMessageContent()).thenReturn(featureOne.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + when(receivedMessage.getMessageContent()).thenReturn(featureOne.COMMAND); //When - featureOne.handle(messageCreateEvent); + featureOne.handle(receivedMessage); //Then - verify(textChannel, times(1)).sendMessage(anyString()); + verify(receivedMessage, times(1)).sendResponse(anyString()); } @Test void itShouldNotHandleMessagesWithoutCommand() { //Given String command = ""; - when(messageCreateEvent.getMessageContent()).thenReturn(command); + when(receivedMessage.getMessageContent()).thenReturn(command); //When - featureOne.handle(messageCreateEvent); + featureOne.handle(receivedMessage); //Then - verify(textChannel, never()).sendMessage(""); + verify(receivedMessage, never()).sendResponse(""); } @Test diff --git a/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java b/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java index f40ad152..6bbfe19a 100644 --- a/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java +++ b/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java @@ -1,7 +1,6 @@ package org.jointheleague.features.templates; -import org.javacord.api.entity.channel.TextChannel; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.junit.jupiter.api.AfterEach; @@ -29,10 +28,7 @@ class FeatureTemplateTest { private final PrintStream originalOut = System.out; @Mock - private MessageCreateEvent messageCreateEvent; - - @Mock - private TextChannel textChannel; + private ReceivedMessage receivedMessage; @BeforeEach void setUp() { @@ -72,27 +68,26 @@ void itShouldHaveACommand() { void itShouldHandleMessagesWithCommand() { //Given HelpEmbed helpEmbed = new HelpEmbed(featureTemplate.COMMAND, "test"); - when(messageCreateEvent.getMessageContent()).thenReturn(featureTemplate.COMMAND); - when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + when(receivedMessage.getMessageContent()).thenReturn(featureTemplate.COMMAND); //When - featureTemplate.handle(messageCreateEvent); + featureTemplate.handle(receivedMessage); //Then - verify(textChannel, times(1)).sendMessage(anyString()); + verify(receivedMessage, times(1)).sendResponse(anyString()); } @Test void itShouldNotHandleMessagesWithoutCommand() { //Given String command = ""; - when(messageCreateEvent.getMessageContent()).thenReturn(command); + when(receivedMessage.getMessageContent()).thenReturn(command); //When - featureTemplate.handle(messageCreateEvent); + featureTemplate.handle(receivedMessage); //Then - verify(textChannel, never()).sendMessage(""); + verify(receivedMessage, never()).sendResponse(""); } @Test