Various Changes (#523)

* Discord Bot Update

Updated JavaCord To Latest
Changed Some Commands To No Longer Be World Specific
Added An "AdminCommands" Command

* Update Some Server Libs

* Added Purge & Pin/Un-Pin To Commands Discord Bot

* Fixed -dev & -no-crc Client Args

* Add Discord User ID Linking Support(Useless For Now)

* Added Support For User's Kicking Own Accounts Through Discord Bot

* Merge Website Integration Stuff Into One Var
This commit is contained in:
Josh Shippam
2022-01-27 01:32:17 +00:00
committed by GitHub
parent 63055f9181
commit 54a3e5cdec
20 changed files with 237 additions and 86 deletions
+12 -10
View File
@@ -15,6 +15,18 @@ public final class Main {
try {
// Process server/ip address to connect to
for (int i = 0; i < args.length; i++) {
switch(args[i]) {
case "-dev" :
case "-local":
case "-offline":
ClientSettings.SERVER_IP = "localhost";
ClientSettings.CHECK_CRC = false;
break;
case "-no-crc":
case "-no-cache-crc":
ClientSettings.CHECK_CRC = false;
break;
}
if (args[i].startsWith("-") && (i + 1) < args.length && !args[i + 1].startsWith("-")) {
switch(args[i]) {
case "-s":
@@ -22,16 +34,6 @@ public final class Main {
case "-ip":
ClientSettings.SERVER_IP = args[++i];
break;
case "-no-crc":
case "-no-cache-crc":
ClientSettings.CHECK_CRC = false;
break;
case "-dev" :
case "-local":
case "-offline":
ClientSettings.SERVER_IP = "localhost";
ClientSettings.CHECK_CRC = false;
break;
}
}
}
+1 -1
View File
@@ -19,5 +19,5 @@
"timeout": 60,
"item_requirements": true,
"max_players": 200,
"website_total_characters_integration": false
"website_integration": false
}
+16 -16
View File
@@ -10,7 +10,7 @@
<packaging>jar</packaging>
<properties>
<kotlin.version>1.5.31</kotlin.version>
<kotlin.version>1.6.0</kotlin.version>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>
@@ -38,19 +38,19 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.1</version>
<version>2.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.1</version>
<version>2.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.5.1</version>
<version>2.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
@@ -62,7 +62,7 @@
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>4.3.1</version>
<version>4.9.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.mina/mina-core -->
<dependency>
@@ -74,25 +74,25 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
<version>8.0.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.44.Final</version>
<version>4.1.72.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.neovisionaries/nv-websocket-client -->
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-websocket-client</artifactId>
<version>2.9</version>
<version>2.14</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.3.1</version>
<version>4.9.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.squareup.okio/okio -->
<dependency>
@@ -104,19 +104,19 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
<version>1.7.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
<version>1.7.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
<version>1.7.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ogce/xpp3 -->
<dependency>
@@ -128,25 +128,25 @@
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.17</version>
<version>1.4.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.javacord/javacord-api -->
<dependency>
<groupId>org.javacord</groupId>
<artifactId>javacord-api</artifactId>
<version>3.1.1</version>
<version>3.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.javacord/javacord-core -->
<dependency>
<groupId>org.javacord</groupId>
<artifactId>javacord-core</artifactId>
<version>3.1.1</version>
<version>3.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>com.everythingrs</groupId>
@@ -64,8 +64,8 @@ public class ConfigLoader {
GameConstants.VARIABLE_XP_RATES[i] = rates.optInt(i);
}
}
if(obj.has("website_total_characters_integration"))
GameConstants.WEBSITE_TOTAL_CHARACTERS_INTEGRATION = obj.getBoolean("website_total_characters_integration");
if(obj.has("website_integration"))
GameConstants.WEBSITE_INTEGRATION = obj.getBoolean("website_integration");
}
private static void initialize() {
@@ -26,6 +26,7 @@ public class GameConstants {
* VARIABLE_XP_RATE Allows Players To Choose An XP Rate Set In VARIABLE_XP_RATES
* VARIABLE_XP_RATES Defines The XP Rates That Should Be Available To Players When VARIABLE_XP_RATES is true(Array Must Contain Four Entries)
* XP_RATE Sets The XP Rate Multiplier For All Players/Skills If VARIABLE_XP_RATES is false
* WEBSITE_INTEGRATION Enables/Disables Website Features(Total Accounts Registered & Players Online)
*/
public static String SERVER_NAME = "2006Scape", WEBSITE_LINK = "https://2006Scape.org";
public static int WORLD = 1, MAX_PLAYERS = 200, TIMEOUT = 60, SAVE_TIMER = 120,
@@ -33,7 +34,7 @@ public class GameConstants {
public static boolean FILE_SERVER = true, SERVER_DEBUG = false, MEMBERS_ONLY = false, TUTORIAL_ISLAND = false,
PARTY_ROOM_DISABLED = false, CLUES_ENABLED = true, ITEM_REQUIREMENTS = true,
ADMIN_CAN_TRADE = false, ADMIN_DROP_ITEMS = false, ADMIN_CAN_SELL_ITEMS = false, VARIABLE_XP_RATE = false,
WEBSITE_TOTAL_CHARACTERS_INTEGRATION = false;
WEBSITE_INTEGRATION = false;
public static int[] VARIABLE_XP_RATES = new int[] {1, 2, 5, 10};
public static double TEST_VERSION = 2.3, XP_RATE = 1.0;
@@ -52,7 +52,7 @@ import org.apollo.jagcached.FileServer;
/**
* Server.java
*
*
* @author Sanity
* @author Graham
* @author Blake
@@ -60,10 +60,10 @@ import org.apollo.jagcached.FileServer;
* @author Integration Julian.
*/
public class GameEngine {
private static long minutesCounter;
private static void startMinutesCounter() {
try {
minuteFile = new BufferedReader(new FileReader(
@@ -102,13 +102,12 @@ public class GameEngine {
public static void schedule(Tick tick) {
getScheduler().schedule(tick);
}
public static String ersSecret;
public static int[] cannonsX = new int [50];
public static int[] cannonsY = new int [50];
public static String[] cannonsO = new String [50];
public static int[] cannonsX = new int[50];
public static int[] cannonsY = new int[50];
public static String[] cannonsO = new String[50];
public static boolean sleeping;
public static boolean updateServer = false;
public static long lastMassSave = System.currentTimeMillis();
@@ -127,7 +126,7 @@ public class GameEngine {
public static ObjectManager objectManager = new ObjectManager();
public static FightCaves fightCaves = new FightCaves();
private static PestControl pestControl = new PestControl();
public static Trawler trawler = new Trawler();
public static Trawler trawler = new Trawler();
private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private final static Lock lock = new ReentrantLock();
@@ -138,12 +137,11 @@ public class GameEngine {
public static void main(java.lang.String[] args)
throws NullPointerException, IOException {
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("-") && (i + 1) < args.length && !args[i + 1].startsWith("-")) {
switch(args[i]) {
if (args[i].startsWith("-") && (i + 1) < args.length && !args[i + 1].startsWith("-")) {
switch (args[i]) {
case "-c":
case "-config":
try {
//TODO Load A Default Config File When Arg Not Used
System.out.println("Loading External Config..");
ConfigLoader.loadSettings(args[++i]);
System.out.println("Loaded Config File " + args[i]);
@@ -161,9 +159,8 @@ public class GameEngine {
System.out.println("@@@@ DEBUG MODE IS ENABLED @@@@");
}
if (!new File("data").exists())
{
System.out.println("************************************");
if (!new File("data").exists()) {
System.out.println("************************************");
System.out.println("************************************");
System.out.println("************************************");
System.out.println("WARNING: I could not find the /data folder. You are LIKELY running this in the wrong directory!");
@@ -183,7 +180,7 @@ public class GameEngine {
/**
* Starts The File Server If Enabled In GameConstants
*/
if(GameConstants.FILE_SERVER) {
if (GameConstants.FILE_SERVER) {
FileServer fs = new FileServer();
try {
fs.start();
@@ -194,7 +191,7 @@ public class GameEngine {
/**
* Start Integration Services
**/
**/
ConfigLoader.loadSecrets();
JavaCord.init();
@@ -240,11 +237,11 @@ public class GameEngine {
/**
* Main Server Tick
*
*
* This scheduler will tick once every 600ms. If the previous tick takes
* 300ms to execute, this scheduler will wait 300ms only before the next
* tick.
*
*
* scheduleAtFixedRate() does not invoke concurrent Runnables.
*/
scheduler.scheduleAtFixedRate(new Runnable() {
@@ -267,11 +264,11 @@ public class GameEngine {
objectHandler.process();
MageTrainingArena.process();
CycleEventHandler.getSingleton().process();
PlayersOnlineWebsite.addUpdatePlayersOnlineTask();
if(GameConstants.WEBSITE_TOTAL_CHARACTERS_INTEGRATION) {
RegisteredAccsWebsite.addUpdateRegisteredUsersTask();
if (GameConstants.WEBSITE_INTEGRATION) {
PlayersOnlineWebsite.addUpdatePlayersOnlineTask();
RegisteredAccsWebsite.addUpdateRegisteredUsersTask();
}
if(DiscordActivity.playerCount) {
if (DiscordActivity.playerCount) {
DiscordActivity.updateActivity();
}
if (System.currentTimeMillis() - lastMassSave > 300000) {
@@ -304,13 +301,13 @@ public class GameEngine {
}
}
}, 0, GameConstants.CYCLE_TIME, TimeUnit.MILLISECONDS);
/*
* I'd recommend disabling this until I can be bothered to implement it
* properly.
*/
// CommandConsole.getInstance();
try {
while (!scheduler.awaitTermination(60, TimeUnit.SECONDS)) {
// TODO
@@ -319,7 +316,7 @@ public class GameEngine {
} catch (InterruptedException e) {
e.printStackTrace();
}
acceptor = null;
connectionHandler = null;
sac = null;
@@ -328,6 +325,4 @@ public class GameEngine {
public static boolean playerExecuted = false;
private static BufferedReader minuteFile;
}
}
@@ -99,6 +99,7 @@ public abstract class Player {
public byte buffer[] = null;
public String lastConnectedFrom;
public static int xpRate = 1;
public String discordCode;
private Compost compost = new Compost(this);
private Allotments allotment = new Allotments(this);
private Flowers flower = new Flowers(this);
@@ -171,6 +172,10 @@ public abstract class Player {
public void setXPRate(int xpRate) { this.xpRate = xpRate; }
public String getDiscordCode() { return discordCode; }
public void setDiscordCode(String code) { this.discordCode = code; }
public boolean isPreaching() {
return preaching;
}
@@ -433,6 +433,9 @@ public class PlayerSave {
case "unlocked-bones-to-peaches":
player.unlockedBonesToPeaches = Boolean.parseBoolean(token2);
break;
case "discord-user-id":
player.discordCode = token2;
break;
}
break;
case 3:
@@ -823,6 +826,8 @@ public class PlayerSave {
}
characterfile.write("void = " + voidStatus.trim());
characterfile.newLine();
characterfile.write("discord-user-id = " + player.discordCode);
characterfile.newLine();
characterfile.newLine();
/* EQUIPMENT */
@@ -2,9 +2,7 @@ package com.rs2.integrations.discord;
import com.rs2.GameConstants;
import com.rs2.integrations.discord.commands.*;
import com.rs2.integrations.discord.commands.admin.GameKick;
import com.rs2.integrations.discord.commands.admin.MoveHome;
import com.rs2.integrations.discord.commands.admin.Update;
import com.rs2.integrations.discord.commands.admin.*;
import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.entity.channel.TextChannel;
@@ -39,9 +37,14 @@ public class JavaCord {
api.addListener(new Vote());
api.addListener(new Website());
//Admin Commands
api.addListener(new AdminCommands());
api.addListener(new GameKick());
api.addListener(new MoveHome());
api.addListener(new Update());
api.addListener(new Pin());
api.addListener(new Purge());
//api.addListener(new Link());
//api.addListener(new WelcomeMessage());
if(!DiscordActivity.playerCount) {
api.updateActivity(GameConstants.WEBSITE_LINK);
}
@@ -0,0 +1,16 @@
package com.rs2.integrations.discord;
import com.rs2.GameConstants;
import org.javacord.api.event.server.member.ServerMemberJoinEvent;
import org.javacord.api.listener.server.member.ServerMemberJoinListener;
public class WelcomeMessage implements ServerMemberJoinListener {
@Override
public void onServerMemberJoin(ServerMemberJoinEvent event) {
String welcomeMessageChannel = "655143683083206667";
if (GameConstants.WORLD == 1) {
event.getApi().getTextChannelById(welcomeMessageChannel).get().
sendMessage("Hello " + event.getUser().getMentionTag() + " And Welcome To " + JavaCord.serverName + ".");
}
}
}
@@ -12,17 +12,19 @@ public class Commands implements MessageCreateListener {
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " commands")) {
event.getChannel().sendMessage("```fix"
+ System.lineSeparator() +
JavaCord.commandPrefix + " forum/" + JavaCord.commandPrefix + " forums"
"::forum/::forums"
+ System.lineSeparator() +
JavaCord.commandPrefix + " gamekick(if account id linked)"
+ System.lineSeparator() +
JavaCord.commandPrefix + " hiscores/" + JavaCord.commandPrefix + " highscores"
+ System.lineSeparator() +
JavaCord.commandPrefix + " issues/" + JavaCord.commandPrefix + " bugs"
"::issues/::bugs"
+ System.lineSeparator() +
JavaCord.commandPrefix + " online"
+ System.lineSeparator() +
JavaCord.commandPrefix + " vote"
"::vote"
+ System.lineSeparator() +
JavaCord.commandPrefix + " website/" + JavaCord.commandPrefix + " site"
"::website/::site"
+ "```");
}
}
@@ -1,6 +1,5 @@
package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
@@ -11,8 +10,10 @@ public class Forum implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " forum") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " forums")) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/forums/index.php");
if (message.getContent().equalsIgnoreCase("::forum") || message.getContent().equalsIgnoreCase("::forums")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/forums/index.php");
}
}
}
}
@@ -1,6 +1,6 @@
package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import com.rs2.GameConstants;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
@@ -9,8 +9,10 @@ public class Issues implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " issues") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix+ " bugs")) {
event.getChannel().sendMessage("https://github.com/2006-Scape/2006Scape/issues");
if (message.getContent().equalsIgnoreCase("::issues") || message.getContent().equalsIgnoreCase("::bugs")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage("https://github.com/2006-Scape/2006Scape/issues");
}
}
}
}
@@ -1,6 +1,5 @@
package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
@@ -11,8 +10,10 @@ public class Vote implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " vote")) {
if (message.getContent().equalsIgnoreCase("::vote")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage("Visit " + GameConstants.WEBSITE_LINK + "/vote.html then type \"::claimvote\" in-game to receive your reward!");
}
}
}
}
@@ -1,6 +1,5 @@
package com.rs2.integrations.discord.commands;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
@@ -11,8 +10,10 @@ public class Website implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " website") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " site")) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK);
if (message.getContent().equalsIgnoreCase("::website") || message.getContent().equalsIgnoreCase("::site")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK);
}
}
}
}
@@ -0,0 +1,31 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class AdminCommands implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " admincommands")) {
if (event.getMessageAuthor().isServerAdmin()) {
event.getChannel().sendMessage("```fix"
+ System.lineSeparator() +
"::pin/::unpin(Pins/Un-Pins The Replied Mesage)"
+ System.lineSeparator() +
"::purge(Purges The Specified Amount Of Messages From Discord Channel)"
+ System.lineSeparator() +
JavaCord.commandPrefix + " gamekick(Kicks The Specified Player From The GameServer)"
+ System.lineSeparator() +
JavaCord.commandPrefix + " movehome(Moves The Specified Player To Lumbridge)"
+ System.lineSeparator() +
JavaCord.commandPrefix + " update(Triggers A GameServer Update In The Specified Amount Of Seconds)"
+ "```");
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -7,25 +7,27 @@ import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
import java.util.Objects;
public class GameKick implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
if (event.getMessageContent().startsWith(JavaCord.commandPrefix + " gamekick")) {
if (event.getMessageAuthor().isServerAdmin()) {
String playerToKick = event.getMessageContent().replace( JavaCord.commandPrefix + " gamekick ", "");
for (Player player2 : PlayerHandler.players) {
if (player2 != null) {
if (player2.playerName.equalsIgnoreCase(playerToKick)) {
Client c2 = (Client) player2;
event.getChannel().sendMessage( playerToKick+ " was kicked by " + event.getMessageAuthor().getDisplayName() + ".");
String playerToKick = event.getMessageContent().replace( JavaCord.commandPrefix + " gamekick ", "");
for (Player player2 : PlayerHandler.players) {
if (player2 != null) {
if (player2.playerName.equalsIgnoreCase(playerToKick)) {
Client c2 = (Client) player2;
if (event.getMessageAuthor().isServerAdmin() || Objects.equals(event.getMessageAuthor().getIdAsString(), c2.discordCode)) {
event.getChannel().sendMessage(playerToKick + " was kicked by " + event.getMessageAuthor().getDisplayName() + ".");
c2.disconnected = true;
c2.logout(true);
break;
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
break;
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
@@ -0,0 +1,39 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.GameConstants;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class Pin implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().startsWith("::pin")) {
if (event.getMessageAuthor().isServerAdmin()) {
if(GameConstants.WORLD == 1) {
if (message.getReferencedMessage().isPresent()) {
Message messageToPin = message.getReferencedMessage().get();
messageToPin.pin();
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
if (message.getContent().startsWith("::unpin")) {
if (event.getMessageAuthor().isServerAdmin()) {
if(GameConstants.WORLD == 1) {
if (message.getReferencedMessage().isPresent()) {
Message messageToUnpin = message.getReferencedMessage().get();
messageToUnpin.unpin();
event.getChannel().sendMessage("Un-Pinned Message: " + messageToUnpin.getLink());
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -0,0 +1,40 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.GameConstants;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
public class Purge implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().startsWith("::purge")) {
if (event.getMessageAuthor().isServerAdmin()) {
if(GameConstants.WORLD == 1) {
int messagesToPurge = Integer.parseInt(event.getMessageContent().replace("::purge ", ""));
if (messagesToPurge > 50) {
event.getChannel().sendMessage("Can't purge more than 50 messages at once.");
return;
}
try {
event.getChannel().sendMessage("Purging " + messagesToPurge + " Messages.");
message.getMessagesBefore(messagesToPurge).get().deleteAll();
Message Purge = message.getMessagesAfter(1).get().getNewestMessage().get();
Purge.edit("Purged " + messagesToPurge + " Messages.");
TimeUnit.SECONDS.sleep(5);
message.delete();
Purge.delete();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -44,6 +44,11 @@ public class Commands implements PacketType {
public static void playerCommands(Player player, String playerCommand, String[] arguments) {
switch (playerCommand.toLowerCase()) {
case "link":
player.setDiscordCode(arguments[0]);
player.getPacketSender().sendMessage("Your Account has now been linked with Discord User ID:");
player.getPacketSender().sendMessage(player.getDiscordCode());
break;
case "myxprate":
case "checkxprate":
if(GameConstants.VARIABLE_XP_RATE) {