Update README & Start Converting Java To Kotlin (#539)

* Rename .java to .kt

* DiscordBot Java -> Kotlin

* Rename .java to .kt

* ConfigLoader Java -> Kotlin

* Update ReadMe For Latest Using Parabot Locally

* Rename .java to .kt

* GameConstants Java -> Kotlin

* Add Missing "server_test_version" Field To ServerConfig.Sample.json
This commit is contained in:
Josh Shippam
2023-01-26 02:15:33 +00:00
committed by GitHub
parent 8cf8a4db2c
commit 66a554aeeb
42 changed files with 736 additions and 734 deletions
@@ -21,7 +21,7 @@ public class ClientSettings {
* You don't have to change this, the client will automatically connect to the server
* on localhost (Assuming you're running Client and LocalGame respectively)
*/
public static String SERVER_IP = "server.2006Scape.org";
public static String SERVER_IP = "localhost";
/**
* The Servers World
* This Determines The Port The Server Will Connect On
@@ -1,5 +1,6 @@
{
"server_name": "2006Scape",
"server_test_version": 2.3,
"website_link": "https://2006Scape.org",
"server_debug": false,
"file_server": true,
@@ -1,110 +0,0 @@
package com.rs2;
import com.rs2.integrations.PlayersOnlineWebsite;
import com.rs2.integrations.RegisteredAccsWebsite;
import com.rs2.integrations.discord.JavaCord;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.*;
import java.util.stream.Collectors;
public class ConfigLoader {
public static void loadSettings(String config) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(config));
String out = br.lines().collect(Collectors.joining("\n"));
JSONObject obj = new JSONObject(out);
if(obj.has("server_name"))
GameConstants.SERVER_NAME = obj.getString("server_name");
if(obj.has("server_test_version"))
GameConstants.TEST_VERSION = obj.getDouble("server_test_version");
if(obj.has("website_link"))
GameConstants.WEBSITE_LINK = obj.getString("website_link");
if(obj.has("debug"))
GameConstants.SERVER_DEBUG = obj.getBoolean("debug");
if(obj.has("file_server"))
GameConstants.FILE_SERVER = obj.getBoolean("file_server");
if(obj.has("world_id"))
GameConstants.WORLD = obj.getInt("world_id");
if(obj.has("members_only"))
GameConstants.MEMBERS_ONLY = obj.getBoolean("members_only");
if(obj.has("tutorial_island_enabled"))
GameConstants.TUTORIAL_ISLAND = obj.getBoolean("tutorial_island_enabled");
if(obj.has("party_room_enabled"))
GameConstants.PARTY_ROOM_DISABLED = !obj.getBoolean("party_room_enabled");
if(obj.has("clues_enabled"))
GameConstants.CLUES_ENABLED = obj.getBoolean("clues_enabled");
if(obj.has("admin_can_trade"))
GameConstants.ADMIN_CAN_TRADE = obj.getBoolean("admin_can_trade");
if(obj.has("admin_can_drop_items"))
GameConstants.ADMIN_DROP_ITEMS = obj.getBoolean("admin_can_drop_items");
if(obj.has("admin_can_sell"))
GameConstants.ADMIN_CAN_SELL_ITEMS = obj.getBoolean("admin_can_sell");
if(obj.has("respawn_x"))
GameConstants.RESPAWN_X = obj.getInt("respawn_x");
if(obj.has("respawn_y"))
GameConstants.RESPAWN_Y = obj.getInt("respawn_y");
if(obj.has("save_timer"))
GameConstants.SAVE_TIMER = obj.getInt("save_timer");
if(obj.has("timeout"))
GameConstants.TIMEOUT = obj.getInt("timeout");
if(obj.has("item_requirements"))
GameConstants.ITEM_REQUIREMENTS = obj.getBoolean("item_requirements");
if(obj.has("variable_xp_rate"))
GameConstants.VARIABLE_XP_RATE = obj.getBoolean("variable_xp_rate");
if(obj.has("xp_rate"))
GameConstants.XP_RATE = obj.getDouble("xp_rate");
if(obj.has("max_players"))
GameConstants.MAX_PLAYERS = obj.getInt("max_players");
if (obj.has("variable_xp_rates")) {
JSONArray rates = obj.optJSONArray("variable_xp_rates");
for (int i = 0; i < rates.length(); ++i) {
GameConstants.VARIABLE_XP_RATES[i] = rates.optInt(i);
}
}
if(obj.has("website_integration"))
GameConstants.WEBSITE_INTEGRATION = obj.getBoolean("website_integration");
}
private static void initialize() {
JSONObject main = new JSONObject();
main
.put("bot-token", "")
.put("websitepass", "")
.put("erssecret", "");
try {
BufferedWriter br = new BufferedWriter(new FileWriter("data/secrets.json"));
br.write(main.toString());
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void loadSecrets() throws IOException {
if (!new File("data/secrets.json").exists()) {
initialize();
System.out.println("Please open \"data/secrets.json\" file and enter your discord token bot there!");
System.out.println("Please open \"data/secrets.json\" file and enter your Website Password there!");
} else {
BufferedReader br = new BufferedReader(new FileReader("data/secrets.json"));
String out = br.lines().collect(Collectors.joining("\n"));
JSONObject obj = new JSONObject(out);
/*
* Sets External Services Vars
*/
if(obj.has("bot-token"))
JavaCord.token = obj.getString("bot-token");
if(obj.has("websitepass"))
PlayersOnlineWebsite.password = obj.getString("websitepass");
RegisteredAccsWebsite.password = obj.getString("websitepass");
if(obj.has("erssecret"))
GameEngine.ersSecret = obj.getString("erssecret");
}
}
}
@@ -0,0 +1,83 @@
package com.rs2
import com.rs2.integrations.PlayersOnlineWebsite
import com.rs2.integrations.RegisteredAccsWebsite
import com.rs2.integrations.discord.JavaCord
import org.json.JSONObject
import java.io.*
import java.util.stream.Collectors
object ConfigLoader {
@JvmStatic
@Throws(IOException::class)
fun loadSettings(config: String?) {
val br = config?.let { FileReader(it) }?.let { BufferedReader(it) }
val out = br?.lines()?.collect(Collectors.joining("\n"))
val obj = JSONObject(out)
if (obj.has("server_name")) GameConstants.SERVER_NAME = obj.getString("server_name")
if (obj.has("server_test_version")) GameConstants.TEST_VERSION = obj.getDouble("server_test_version")
if (obj.has("website_link")) GameConstants.WEBSITE_LINK = obj.getString("website_link")
if (obj.has("debug")) GameConstants.SERVER_DEBUG = obj.getBoolean("debug")
if (obj.has("file_server")) GameConstants.FILE_SERVER = obj.getBoolean("file_server")
if (obj.has("world_id")) GameConstants.WORLD = obj.getInt("world_id")
if (obj.has("members_only")) GameConstants.MEMBERS_ONLY = obj.getBoolean("members_only")
if (obj.has("tutorial_island_enabled")) GameConstants.TUTORIAL_ISLAND =
obj.getBoolean("tutorial_island_enabled")
if (obj.has("party_room_enabled")) GameConstants.PARTY_ROOM_DISABLED = !obj.getBoolean("party_room_enabled")
if (obj.has("clues_enabled")) GameConstants.CLUES_ENABLED = obj.getBoolean("clues_enabled")
if (obj.has("admin_can_trade")) GameConstants.ADMIN_CAN_TRADE = obj.getBoolean("admin_can_trade")
if (obj.has("admin_can_drop_items")) GameConstants.ADMIN_DROP_ITEMS = obj.getBoolean("admin_can_drop_items")
if (obj.has("admin_can_sell")) GameConstants.ADMIN_CAN_SELL_ITEMS = obj.getBoolean("admin_can_sell")
if (obj.has("respawn_x")) GameConstants.RESPAWN_X = obj.getInt("respawn_x")
if (obj.has("respawn_y")) GameConstants.RESPAWN_Y = obj.getInt("respawn_y")
if (obj.has("save_timer")) GameConstants.SAVE_TIMER = obj.getInt("save_timer")
if (obj.has("timeout")) GameConstants.TIMEOUT = obj.getInt("timeout")
if (obj.has("item_requirements")) GameConstants.ITEM_REQUIREMENTS = obj.getBoolean("item_requirements")
if (obj.has("variable_xp_rate")) GameConstants.VARIABLE_XP_RATE = obj.getBoolean("variable_xp_rate")
if (obj.has("xp_rate")) GameConstants.XP_RATE = obj.getDouble("xp_rate")
if (obj.has("max_players")) GameConstants.MAX_PLAYERS = obj.getInt("max_players")
if (obj.has("variable_xp_rates")) {
val rates = obj.optJSONArray("variable_xp_rates")
for (i in 0 until rates.length()) {
GameConstants.VARIABLE_XP_RATES[i] = rates.optInt(i)
}
}
if (obj.has("website_integration")) GameConstants.WEBSITE_INTEGRATION = obj.getBoolean("website_integration")
}
private fun initialize() {
val main = JSONObject()
main
.put("bot-token", "")
.put("websitepass", "")
.put("erssecret", "")
try {
val br = BufferedWriter(FileWriter("data/secrets.json"))
br.write(main.toString())
br.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
@JvmStatic
@Throws(IOException::class)
fun loadSecrets() {
if (!File("data/secrets.json").exists()) {
initialize()
println("Please open \"data/secrets.json\" file and enter your discord token bot there!")
println("Please open \"data/secrets.json\" file and enter your Website Password there!")
} else {
val br = BufferedReader(FileReader("data/secrets.json"))
val out = br.lines().collect(Collectors.joining("\n"))
val obj = JSONObject(out)
/*
* Sets External Services Vars
*/if (obj.has("bot-token")) JavaCord.token = obj.getString("bot-token")
if (obj.has("websitepass")) PlayersOnlineWebsite.password = obj.getString("websitepass")
RegisteredAccsWebsite.password = obj.getString("websitepass")
if (obj.has("erssecret")) GameEngine.ersSecret = obj.getString("erssecret")
}
}
}
@@ -1,87 +0,0 @@
package com.rs2;
public class GameConstants {
/**
* The Variables Below Can Be Also Changed On Server Startup By Using The ConfigLoader
*
* SERVER_NAME Sets The Name The Server Will Use
* WEBSITE_LINK Defines The Server Website Links
* WORLD Sets The Servers World ID
* MAX_PLAYERS Sets The Maximum Amount Of Players Allow To Be Logged In At Once
* TIMEOUT Sets The Amount Of Time Before A Player Timeouts From A Bad Connection
* SAVE_TIMER Sets In Seconds How Often The Server Shouls Auto-Save All Characters
* RESPAWN_X Sets The X Coordinate That You Will Respawn At After Death
* RESPAWN_Y Sets The Y Coordinate That You Will Respawn At After Death
* FILE_SERVER Sets Whether The FileServer Should Run With The Server
* SERVER_DEBUG Sets Whether The Server Should Start In Debug Mode
* MEMBERS_ONLY Sets Whether The World Is Members Only
* TUTORIAL_ISLAND Enables/Disables Tutorial Island For Players On First Login
* PARTY_ROOM_DISABLED Enables/Disables The Party Room Should Be Disabled
* CLUES_ENABLED Enables/Disables Clue Scrolls
* ITEM_REQUIREMENTS Enables/Disables Item Requirements for All Players
* ADMIN_CAN_TRADE Defines Whether Admins Can Trade
* ADMIN_DROP_ITEMS Defines Whether Admins Can Drop Items
* ADMIN_CAN_SELL_ITEMS Defines Whether Admins Can Sell Items
* 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,
RESPAWN_X = 3222, RESPAWN_Y = 3218;
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_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;
/**
* The Variables Below Should Only Be Changed If You Understand What You Are Doing
*/
public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE,
IPS_ALLOWED = 250, CONNECTION_DELAY = 100;
public final static boolean sendServerPackets = false, SOUND = true, GUILDS = true;
public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151,
18128, 5065, 5715, 2449, 904, 147, 962 };
public final static int[] FUN_WEAPONS = { 2460, 2461, 2462, 2463, 2464,
2465, 2466, 2467, 2468, 2469, 2470, 2471, 2471, 2473, 2474, 2475,
2476, 2477 }; // fun weapons for dueling
public final static int DUELING_RESPAWN_X = 3362;
public final static int DUELING_RESPAWN_Y = 3263;
public final static int NO_TELEPORT_WILD_LEVEL = 20;
public final static int NPC_RANDOM_WALK_DISTANCE = 5;
public final static int NPC_FOLLOW_DISTANCE = 10;
public final static String[] UNDEAD = {
"armoured zombie", "ankous", "banshee", "crawling hand", "dried zombie", "ghost", "ghostly warrior", "ghast",
"mummy", "mighty banshee", "reventant imp", "reventant goblin", "reventant icefiend", "reventant pyrefiend",
"reventant hobgoblin", "reventant vampyre", "reventant werewolf", "reventant cyclops", "reventant darkbeast",
"reventant demon", "reventant ork", "reventant hellhound", "reventant knight", "reventant dragon",
"shade", "skeleton", "skeleton brute", "skeleton thug", "skeleton warload", "summoned zombie",
"skorge", "tortured soul", "undead chicken", "undead cow", "undead one", "undead troll", "zombie", "zombie rat", "zogre"
};
public final static int CYCLE_TIME = 600;
public final static int BUFFER_SIZE = 10000;
public final static int ATTACK = 0, DEFENCE = 1, STRENGTH = 2,
HITPOINTS = 3, RANGED = 4, PRAYER = 5, MAGIC = 6, COOKING = 7,
WOODCUTTING = 8, FLETCHING = 9, FISHING = 10, FIREMAKING = 11,
CRAFTING = 12, SMITHING = 13, MINING = 14, HERBLORE = 15,
AGILITY = 16, THIEVING = 17, SLAYER = 18, FARMING = 19,
RUNECRAFTING = 20;
}
@@ -0,0 +1,168 @@
package com.rs2
object GameConstants {
/**
* The Variables Below Can Be Also Changed On Server Startup By Using The ConfigLoader
*
* SERVER_NAME Sets The Name The Server Will Use
* WEBSITE_LINK Defines The Server Website Links
* WORLD Sets The Servers World ID
* MAX_PLAYERS Sets The Maximum Amount Of Players Allow To Be Logged In At Once
* TIMEOUT Sets The Amount Of Time Before A Player Timeouts From A Bad Connection
* SAVE_TIMER Sets In Seconds How Often The Server Shouls Auto-Save All Characters
* RESPAWN_X Sets The X Coordinate That You Will Respawn At After Death
* RESPAWN_Y Sets The Y Coordinate That You Will Respawn At After Death
* FILE_SERVER Sets Whether The FileServer Should Run With The Server
* SERVER_DEBUG Sets Whether The Server Should Start In Debug Mode
* MEMBERS_ONLY Sets Whether The World Is Members Only
* TUTORIAL_ISLAND Enables/Disables Tutorial Island For Players On First Login
* PARTY_ROOM_DISABLED Enables/Disables The Party Room Should Be Disabled
* CLUES_ENABLED Enables/Disables Clue Scrolls
* ITEM_REQUIREMENTS Enables/Disables Item Requirements for All Players
* ADMIN_CAN_TRADE Defines Whether Admins Can Trade
* ADMIN_DROP_ITEMS Defines Whether Admins Can Drop Items
* ADMIN_CAN_SELL_ITEMS Defines Whether Admins Can Sell Items
* 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)
*/
@JvmField
var SERVER_NAME = "2006Scape"
@JvmField
var WEBSITE_LINK = "https://2006Scape.org"
@JvmField
var WORLD = 1
@JvmField
var MAX_PLAYERS = 200
@JvmField
var TIMEOUT = 60
@JvmField
var SAVE_TIMER = 120
@JvmField
var RESPAWN_X = 3222
@JvmField
var RESPAWN_Y = 3218
@JvmField
var FILE_SERVER = true
@JvmField
var SERVER_DEBUG = false
@JvmField
var MEMBERS_ONLY = false
@JvmField
var TUTORIAL_ISLAND = false
@JvmField
var PARTY_ROOM_DISABLED = false
@JvmField
var CLUES_ENABLED = true
@JvmField
var ITEM_REQUIREMENTS = true
@JvmField
var ADMIN_CAN_TRADE = false
@JvmField
var ADMIN_DROP_ITEMS = false
@JvmField
var ADMIN_CAN_SELL_ITEMS = false
@JvmField
var VARIABLE_XP_RATE = false
@JvmField
var WEBSITE_INTEGRATION = false
@JvmField
var VARIABLE_XP_RATES = intArrayOf(1, 2, 5, 10)
@JvmField
var TEST_VERSION = 2.3
@JvmField
var XP_RATE = 1.0
/**
* The Variables Below Should Only Be Changed If You Understand What You Are Doing
*/
const val ITEM_LIMIT = 15000
const val MAXITEM_AMOUNT = Int.MAX_VALUE
const val IPS_ALLOWED = 250
const val CONNECTION_DELAY = 100
const val sendServerPackets = false
const val SOUND = true
const val GUILDS = true
@JvmField
var SIDEBARS = intArrayOf(
2423, 3917, 638, 3213, 1644, 5608, 1151,
18128, 5065, 5715, 2449, 904, 147, 962
)
@JvmField
val FUN_WEAPONS = intArrayOf(
2460, 2461, 2462, 2463, 2464,
2465, 2466, 2467, 2468, 2469, 2470, 2471, 2471, 2473, 2474, 2475,
2476, 2477
) // fun weapons for dueling
const val DUELING_RESPAWN_X = 3362
const val DUELING_RESPAWN_Y = 3263
const val NO_TELEPORT_WILD_LEVEL = 20
const val NPC_RANDOM_WALK_DISTANCE = 5
const val NPC_FOLLOW_DISTANCE = 10
@JvmField
val UNDEAD = arrayOf(
"armoured zombie",
"ankous",
"banshee",
"crawling hand",
"dried zombie",
"ghost",
"ghostly warrior",
"ghast",
"mummy",
"mighty banshee",
"reventant imp",
"reventant goblin",
"reventant icefiend",
"reventant pyrefiend",
"reventant hobgoblin",
"reventant vampyre",
"reventant werewolf",
"reventant cyclops",
"reventant darkbeast",
"reventant demon",
"reventant ork",
"reventant hellhound",
"reventant knight",
"reventant dragon",
"shade",
"skeleton",
"skeleton brute",
"skeleton thug",
"skeleton warload",
"summoned zombie",
"skorge",
"tortured soul",
"undead chicken",
"undead cow",
"undead one",
"undead troll",
"zombie",
"zombie rat",
"zogre"
)
const val CYCLE_TIME = 600
const val BUFFER_SIZE = 10000
const val ATTACK = 0
const val DEFENCE = 1
const val STRENGTH = 2
const val HITPOINTS = 3
const val RANGED = 4
const val PRAYER = 5
const val MAGIC = 6
const val COOKING = 7
const val WOODCUTTING = 8
const val FLETCHING = 9
const val FISHING = 10
const val FIREMAKING = 11
const val CRAFTING = 12
const val SMITHING = 13
const val MINING = 14
const val HERBLORE = 15
const val AGILITY = 16
const val THIEVING = 17
const val SLAYER = 18
const val FARMING = 19
const val RUNECRAFTING = 20
}
@@ -1,39 +0,0 @@
package com.rs2.integrations.discord;
import com.rs2.game.players.PlayerHandler;
public class DiscordActivity {
public static Boolean playerCount = false;
private static int count = 50;
public static void updateActivity() {
try {
if (JavaCord.token != null && !JavaCord.token.equals("")) {
if (count == 0) {
if (PlayerHandler.getPlayerCount() != 1) {
JavaCord.api.updateActivity(PlayerHandler.getPlayerCount() + " Players Online");
System.out.println("Discord Activity Updated");
count = 100;
} else {
JavaCord.api.updateActivity(PlayerHandler.getPlayerCount() + " Player Online");
System.out.println("Discord Activity Updated");
count = 100;
}
} else {
count--;
}
}
} catch (Exception e) {
System.out.println("Could not set Discord activity: " + e);
System.out.println("Null checks");
try {
System.out.println("JavaCord.api: " + JavaCord.api);
System.out.println("PlayerHandler.getPlayerCount: " + PlayerHandler.getPlayerCount());
} catch (Exception e2) {
System.out.println(e2);
}
}
}
}
@@ -0,0 +1,38 @@
package com.rs2.integrations.discord
import com.rs2.game.players.PlayerHandler
object DiscordActivity {
@JvmField
var playerCount = false
private var count = 50
@JvmStatic
fun updateActivity() {
try {
if (JavaCord.token != null && JavaCord.token != "") {
if (count == 0) {
if (PlayerHandler.getPlayerCount() != 1) {
JavaCord.api!!.updateActivity(PlayerHandler.getPlayerCount().toString() + " Players Online")
println("Discord Activity Updated")
count = 100
} else {
JavaCord.api!!.updateActivity(PlayerHandler.getPlayerCount().toString() + " Player Online")
println("Discord Activity Updated")
count = 100
}
} else {
count--
}
}
} catch (e: Exception) {
println("Could not set Discord activity: $e")
println("Null checks")
try {
println("JavaCord.api: " + JavaCord.api)
println("PlayerHandler.getPlayerCount: " + PlayerHandler.getPlayerCount())
} catch (e2: Exception) {
println(e2)
}
}
}
}
@@ -1,75 +0,0 @@
package com.rs2.integrations.discord;
import com.rs2.GameConstants;
import com.rs2.integrations.discord.commands.*;
import com.rs2.integrations.discord.commands.admin.*;
import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.message.MessageBuilder;
import org.javacord.api.util.logging.ExceptionLogger;
import java.io.IOException;
/**
* @author Patrity || https://www.rune-server.ee/members/patrity/
*/
public class JavaCord {
public static String serverName = GameConstants.SERVER_NAME;
public static String commandPrefix = "::w" + GameConstants.WORLD;
public static String token;
public static DiscordApi api = null;
public static void init() throws IOException {
if (token != null && !token.equals("")) { //If the token was loaded by loadSettings:
new DiscordApiBuilder().setToken(token).login().thenAccept(api -> {
try {
JavaCord.api = api;
//System.out.println("You can invite the bot by using the following url: " + api.createBotInvite());
api.addListener(new Commands());
api.addListener(new Forum());
api.addListener(new Hiscores());
api.addListener(new Issues());
api.addListener(new Link());
api.addListener(new Online());
api.addListener(new Players());
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);
}
api.addMessageCreateListener(event -> {
});
} catch (Exception e) {
e.printStackTrace();
}
})
// Log exceptions (might not work now that we try(catch)
.exceptionally(ExceptionLogger.get());
} else {
System.out.println("Discord Token Not Set So Bot Not Loaded");
}
}
public static void sendMessage(String channel, String msg) {
try {
new MessageBuilder()
.append(msg)
.send((TextChannel) api.getTextChannelsByNameIgnoreCase(channel).toArray()[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,74 @@
package com.rs2.integrations.discord
import com.rs2.GameConstants
import com.rs2.integrations.discord.commands.*
import com.rs2.integrations.discord.commands.admin.*
import org.javacord.api.DiscordApi
import org.javacord.api.DiscordApiBuilder
import org.javacord.api.entity.channel.TextChannel
import org.javacord.api.entity.message.MessageBuilder
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.util.logging.ExceptionLogger
import java.io.IOException
import java.util.*
/**
* @author Patrity || https://www.rune-server.ee/members/patrity/
*/
object JavaCord {
var serverName: String = GameConstants.SERVER_NAME
var commandPrefix = "::w" + GameConstants.WORLD
@JvmField
var token: String? = null
var api: DiscordApi? = null
@JvmStatic
@Throws(IOException::class)
fun init() {
if (token != null && token != "") { //If the token was loaded by loadSettings:
DiscordApiBuilder().setToken(token).login().thenAccept { api: DiscordApi ->
try {
JavaCord.api = api
//System.out.println("You can invite the bot by using the following url: " + api.createBotInvite());
api.addListener(Commands())
api.addListener(Forum())
api.addListener(Hiscores())
api.addListener(Issues())
api.addListener(Link())
api.addListener(Online())
api.addListener(Players())
api.addListener(Vote())
api.addListener(Website())
//Admin Commands
api.addListener(AdminCommands())
api.addListener(GameKick())
api.addListener(MoveHome())
api.addListener(Update())
api.addListener(Pin())
api.addListener(Purge())
//api.addListener(new Link());
//api.addListener(new WelcomeMessage());
if (!DiscordActivity.playerCount) {
api.updateActivity(GameConstants.WEBSITE_LINK)
}
api.addMessageCreateListener { event: MessageCreateEvent? -> }
} catch (e: Exception) {
e.printStackTrace()
}
} // Log exceptions (might not work now that we try(catch)
.exceptionally(ExceptionLogger.get())
} else {
println("Discord Token Not Set So Bot Not Loaded")
}
}
fun sendMessage(channel: String?, msg: String?) {
try {
MessageBuilder()
.append(msg)
.send(api!!.getTextChannelsByNameIgnoreCase(channel).toTypedArray()[0] as TextChannel)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
@@ -1,16 +0,0 @@
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 + ".");
}
}
}
@@ -1,33 +0,0 @@
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;
public class Commands implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " commands")) {
event.getChannel().sendMessage("```fix"
+ System.lineSeparator() +
"::link"
+ System.lineSeparator() +
"::forum/::forums"
+ System.lineSeparator() +
JavaCord.commandPrefix + " gamekick(if account id linked)"
+ System.lineSeparator() +
JavaCord.commandPrefix + " hiscores/" + JavaCord.commandPrefix + " highscores"
+ System.lineSeparator() +
"::issues/::bugs"
+ System.lineSeparator() +
JavaCord.commandPrefix + " online"
+ System.lineSeparator() +
"::vote"
+ System.lineSeparator() +
"::website/::site"
+ "```");
}
}
}
@@ -0,0 +1,33 @@
package com.rs2.integrations.discord.commands
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Commands : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals(JavaCord.commandPrefix + " commands", ignoreCase = true)) {
event.channel.sendMessage(
"```fix"
+ System.lineSeparator() +
"::link"
+ System.lineSeparator() +
"::forum/::forums"
+ System.lineSeparator() +
JavaCord.commandPrefix + " gamekick(if account id linked)"
+ System.lineSeparator() +
JavaCord.commandPrefix + " hiscores/" + JavaCord.commandPrefix + " highscores"
+ System.lineSeparator() +
"::issues/::bugs"
+ System.lineSeparator() +
JavaCord.commandPrefix + " online"
+ System.lineSeparator() +
"::vote"
+ System.lineSeparator() +
"::website/::site"
+ "```"
)
}
}
}
@@ -1,19 +0,0 @@
package com.rs2.integrations.discord.commands;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
import com.rs2.GameConstants;
public class Forum implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::forum") || message.getContent().equalsIgnoreCase("::forums")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/forums/index.php");
}
}
}
}
@@ -0,0 +1,20 @@
package com.rs2.integrations.discord.commands
import com.rs2.GameConstants
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Forum : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals("::forum", ignoreCase = true) || message.content.equals(
"::forums",
ignoreCase = true
)
) {
if (GameConstants.WORLD == 1) {
event.channel.sendMessage(GameConstants.WEBSITE_LINK + "/forums/index.php")
}
}
}
}
@@ -1,18 +0,0 @@
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;
import com.rs2.GameConstants;
public class Hiscores implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " hiscores") || message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " highscores")) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK + "/hiscores.html");
}
}
}
@@ -0,0 +1,19 @@
package com.rs2.integrations.discord.commands
import com.rs2.GameConstants
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Hiscores : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals(JavaCord.commandPrefix + " hiscores", ignoreCase = true) || message.content.equals(
JavaCord.commandPrefix + " highscores",
ignoreCase = true
)
) {
event.channel.sendMessage(GameConstants.WEBSITE_LINK + "/hiscores.html")
}
}
}
@@ -1,18 +0,0 @@
package com.rs2.integrations.discord.commands;
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 Issues implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::issues") || message.getContent().equalsIgnoreCase("::bugs")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage("https://github.com/2006-Scape/2006Scape/issues");
}
}
}
}
@@ -0,0 +1,20 @@
package com.rs2.integrations.discord.commands
import com.rs2.GameConstants
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Issues : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals("::issues", ignoreCase = true) || message.content.equals(
"::bugs",
ignoreCase = true
)
) {
if (GameConstants.WORLD == 1) {
event.channel.sendMessage("https://github.com/2006-Scape/2006Scape/issues")
}
}
}
}
@@ -1,18 +0,0 @@
package com.rs2.integrations.discord.commands;
import org.javacord.api.entity.message.Message;
import org.javacord.api.entity.user.User;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class Link implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
User user = message.getAuthor().asUser().get();
if (message.getContent().equalsIgnoreCase("::link")) {
event.getChannel().sendMessage(user.getMentionTag() + ", Please check your DM's to continue.");
user.sendMessage("Please copy/paste the following in-game to link your Discord account: \n ```::link " + user.getIdAsString() + "```");
}
}
}
@@ -0,0 +1,15 @@
package com.rs2.integrations.discord.commands
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Link : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
val user = message.author.asUser().get()
if (message.content.equals("::link", ignoreCase = true)) {
event.channel.sendMessage(user.mentionTag + ", Please check your DM's to continue.")
user.sendMessage("Please copy/paste the following in-game to link your Discord account: \n ```::link " + user.idAsString + "```")
}
}
}
@@ -1,18 +0,0 @@
package com.rs2.integrations.discord.commands;
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 com.rs2.integrations.discord.JavaCord;
public class Online implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " online")) {
event.getChannel().sendMessage(":tada: " + JavaCord.serverName + " World:" + GameConstants.WORLD + " is Online! :tada:");
}
}
}
@@ -0,0 +1,15 @@
package com.rs2.integrations.discord.commands
import com.rs2.GameConstants
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Online : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals(JavaCord.commandPrefix + " online", ignoreCase = true)) {
event.channel.sendMessage(":tada: " + JavaCord.serverName + " World:" + GameConstants.WORLD + " is Online! :tada:")
}
}
}
@@ -1,21 +0,0 @@
package com.rs2.integrations.discord.commands;
import com.rs2.game.players.PlayerHandler;
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 Players implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase(JavaCord.commandPrefix + " players")) {
if (PlayerHandler.getPlayerCount() != 1) {
event.getChannel().sendMessage("There are currently " + PlayerHandler.getPlayerCount() + " players online (" + PlayerHandler.getNonPlayerCount() + " staff online).");
} else {
event.getChannel().sendMessage("There is currently " + PlayerHandler.getPlayerCount() + " player online.");
}
}
}
}
@@ -0,0 +1,19 @@
package com.rs2.integrations.discord.commands
import com.rs2.game.players.PlayerHandler
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Players : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals(JavaCord.commandPrefix + " players", ignoreCase = true)) {
if (PlayerHandler.getPlayerCount() != 1) {
event.channel.sendMessage("There are currently " + PlayerHandler.getPlayerCount() + " players online (" + PlayerHandler.getNonPlayerCount() + " staff online).")
} else {
event.channel.sendMessage("There is currently " + PlayerHandler.getPlayerCount() + " player online.")
}
}
}
}
@@ -1,20 +0,0 @@
package com.rs2.integrations.discord.commands;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
import com.rs2.GameConstants;
public class Vote implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
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!");
}
}
}
}
@@ -0,0 +1,16 @@
package com.rs2.integrations.discord.commands
import com.rs2.GameConstants
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Vote : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals("::vote", ignoreCase = true)) {
if (GameConstants.WORLD == 1) {
event.channel.sendMessage("Visit " + GameConstants.WEBSITE_LINK + "/vote.html then type \"::claimvote\" in-game to receive your reward!")
}
}
}
}
@@ -1,19 +0,0 @@
package com.rs2.integrations.discord.commands;
import org.javacord.api.entity.message.Message;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
import com.rs2.GameConstants;
public class Website implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
Message message = event.getMessage();
if (message.getContent().equalsIgnoreCase("::website") || message.getContent().equalsIgnoreCase("::site")) {
if (GameConstants.WORLD == 1) {
event.getChannel().sendMessage(GameConstants.WEBSITE_LINK);
}
}
}
}
@@ -0,0 +1,20 @@
package com.rs2.integrations.discord.commands
import com.rs2.GameConstants
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Website : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals("::website", ignoreCase = true) || message.content.equals(
"::site",
ignoreCase = true
)
) {
if (GameConstants.WORLD == 1) {
event.channel.sendMessage(GameConstants.WEBSITE_LINK)
}
}
}
}
@@ -1,31 +0,0 @@
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");
}
}
}
}
@@ -0,0 +1,31 @@
package com.rs2.integrations.discord.commands.admin
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class AdminCommands : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.equals(JavaCord.commandPrefix + " admincommands", ignoreCase = true)) {
if (event.messageAuthor.isServerAdmin) {
event.channel.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.channel.sendMessage("You do not have permission to perform this command")
}
}
}
}
@@ -1,34 +0,0 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.game.players.Client;
import com.rs2.game.players.Player;
import com.rs2.game.players.PlayerHandler;
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")) {
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);
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
break;
}
}
}
}
}
}
@@ -0,0 +1,30 @@
package com.rs2.integrations.discord.commands.admin
import com.rs2.game.players.Client
import com.rs2.game.players.PlayerHandler
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class GameKick : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
if (event.messageContent.startsWith(JavaCord.commandPrefix + " gamekick")) {
val playerToKick = event.messageContent.replace(JavaCord.commandPrefix + " gamekick ", "")
for (player2 in PlayerHandler.players) {
if (player2 != null) {
if (player2.playerName.equals(playerToKick, ignoreCase = true)) {
val c2 = player2 as Client
if (event.messageAuthor.isServerAdmin || event.messageAuthor.idAsString == c2.discordCode) {
event.channel.sendMessage(playerToKick + " was kicked by " + event.messageAuthor.displayName + ".")
c2.disconnected = true
c2.logout(true)
} else {
event.channel.sendMessage("You do not have permission to perform this command")
}
break
}
}
}
}
}
}
@@ -1,31 +0,0 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.GameConstants;
import com.rs2.game.players.Client;
import com.rs2.game.players.PlayerHandler;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class MoveHome implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
if (event.getMessageContent().startsWith(JavaCord.commandPrefix + " movehome")) {
if (event.getMessageAuthor().isServerAdmin()) {
String teleToMe = event.getMessageContent().replace( JavaCord.commandPrefix + " movehome ", "");
for (int i = 0; i < PlayerHandler.players.length; i++) {
if (PlayerHandler.players[i] != null) {
if (PlayerHandler.players[i].playerName.equalsIgnoreCase(teleToMe)) {
Client p = (Client) PlayerHandler.players[i];
event.getChannel().sendMessage(p.playerName + " has been moved to Lumbridge.");
p.getPlayerAssistant().movePlayer(GameConstants.RESPAWN_X, GameConstants.RESPAWN_Y, 0);
}
}
}
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -0,0 +1,29 @@
package com.rs2.integrations.discord.commands.admin
import com.rs2.GameConstants
import com.rs2.game.players.Client
import com.rs2.game.players.PlayerHandler
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class MoveHome : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
if (event.messageContent.startsWith(JavaCord.commandPrefix + " movehome")) {
if (event.messageAuthor.isServerAdmin) {
val teleToMe = event.messageContent.replace(JavaCord.commandPrefix + " movehome ", "")
for (i in PlayerHandler.players.indices) {
if (PlayerHandler.players[i] != null) {
if (PlayerHandler.players[i].playerName.equals(teleToMe, ignoreCase = true)) {
val p = PlayerHandler.players[i] as Client
event.channel.sendMessage(p.playerName + " has been moved to Lumbridge.")
p.playerAssistant.movePlayer(GameConstants.RESPAWN_X, GameConstants.RESPAWN_Y, 0)
}
}
}
} else {
event.channel.sendMessage("You do not have permission to perform this command")
}
}
}
}
@@ -1,39 +0,0 @@
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,36 @@
package com.rs2.integrations.discord.commands.admin
import com.rs2.GameConstants
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Pin : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.startsWith("::pin")) {
if (event.messageAuthor.isServerAdmin) {
if (GameConstants.WORLD == 1) {
if (message.referencedMessage.isPresent) {
val messageToPin = message.referencedMessage.get()
messageToPin.pin()
}
}
} else {
event.channel.sendMessage("You do not have permission to perform this command")
}
}
if (message.content.startsWith("::unpin")) {
if (event.messageAuthor.isServerAdmin) {
if (GameConstants.WORLD == 1) {
if (message.referencedMessage.isPresent) {
val messageToUnpin = message.referencedMessage.get()
messageToUnpin.unpin()
event.channel.sendMessage("Un-Pinned Message: " + messageToUnpin.link)
}
}
} else {
event.channel.sendMessage("You do not have permission to perform this command")
}
}
}
}
@@ -1,40 +0,0 @@
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");
}
}
}
}
@@ -0,0 +1,39 @@
package com.rs2.integrations.discord.commands.admin
import com.rs2.GameConstants
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
import java.util.concurrent.ExecutionException
import java.util.concurrent.TimeUnit
class Purge : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val message = event.message
if (message.content.startsWith("::purge")) {
if (event.messageAuthor.isServerAdmin) {
if (GameConstants.WORLD == 1) {
val messagesToPurge = event.messageContent.replace("::purge ", "").toInt()
if (messagesToPurge > 50) {
event.channel.sendMessage("Can't purge more than 50 messages at once.")
return
}
try {
event.channel.sendMessage("Purging $messagesToPurge Messages.")
message.getMessagesBefore(messagesToPurge).get().deleteAll()
val Purge = message.getMessagesAfter(1).get().newestMessage.get()
Purge.edit("Purged $messagesToPurge Messages.")
TimeUnit.SECONDS.sleep(5)
message.delete()
Purge.delete()
} catch (e: InterruptedException) {
e.printStackTrace()
} catch (e: ExecutionException) {
e.printStackTrace()
}
}
} else {
event.channel.sendMessage("You do not have permission to perform this command")
}
}
}
}
@@ -1,24 +0,0 @@
package com.rs2.integrations.discord.commands.admin;
import com.rs2.game.players.PlayerHandler;
import com.rs2.integrations.discord.JavaCord;
import org.javacord.api.event.message.MessageCreateEvent;
import org.javacord.api.listener.message.MessageCreateListener;
public class Update implements MessageCreateListener {
@Override
public void onMessageCreate(MessageCreateEvent event) {
String seconds = event.getMessageContent().replace(JavaCord.commandPrefix + " update ", "");
if (event.getMessageContent().startsWith(JavaCord.commandPrefix + " update")) {
if (event.getMessageAuthor().isServerAdmin()) {
PlayerHandler.updateSeconds = Integer.parseInt(seconds);
PlayerHandler.updateAnnounced = false;
PlayerHandler.updateRunning = true;
PlayerHandler.updateStartTime = System.currentTimeMillis();
event.getChannel().sendMessage("Server update will begin in " + seconds + " seconds.");
} else {
event.getChannel().sendMessage("You do not have permission to perform this command");
}
}
}
}
@@ -0,0 +1,23 @@
package com.rs2.integrations.discord.commands.admin
import com.rs2.game.players.PlayerHandler
import com.rs2.integrations.discord.JavaCord
import org.javacord.api.event.message.MessageCreateEvent
import org.javacord.api.listener.message.MessageCreateListener
class Update : MessageCreateListener {
override fun onMessageCreate(event: MessageCreateEvent) {
val seconds = event.messageContent.replace(JavaCord.commandPrefix + " update ", "")
if (event.messageContent.startsWith(JavaCord.commandPrefix + " update")) {
if (event.messageAuthor.isServerAdmin) {
PlayerHandler.updateSeconds = seconds.toInt()
PlayerHandler.updateAnnounced = false
PlayerHandler.updateRunning = true
PlayerHandler.updateStartTime = System.currentTimeMillis()
event.channel.sendMessage("Server update will begin in $seconds seconds.")
} else {
event.channel.sendMessage("You do not have permission to perform this command")
}
}
}
}
+6 -23
View File
@@ -22,31 +22,14 @@
To compile any module from the command line, run `mvn clean install`
## Using Parabot with your local server: (OUTDATED)
- **1:** Download the latest `localhost_2006Scape.jar` from [here](https://github.com/2006-Scape/2006Scape/releases) (or, if testing server changes, compile it yourself like [this](https://i.imgur.com/uDrF0gl.png))
- **2:** Download the latest `Provider-version.jar` file from [here](http://v3.bdn.parabot.org/api/bot/download/default-provider?nightly=false)
- **3:** Create a file called `localhost.json` in `{user}\Documents\Parabot\servers`
- **4:** Put the following in the file
```json
{
"name": "localhost",
"author": "RedSparr0w",
"version": 1.0,
"client-class": "LocalGame",
"locations":{
"provider": "pathToYourJar/Provider-1.21.5.jar",
"server": "pathToYourJar/localhost_2006Scape.jar",
"hooks": "http://bdn.parabot.org/data/hooks/carmeuses/2006rebotted_hooks.xml"
}
}
```
_(you will need to put the path to the jar files yourself)_
- 5: Run the parabot client with the following args:
## Using Parabot with your local server:
- **1:** Download the latest Parabot Client from [here](https://github.com/2006-Scape/Parabot/releases)
- **2:** Run the parabot client with the following arg:
```fix
java -jar Client-2.8.1.jar -login username password -loadlocal -v -clearcache
java -jar Parabot.jar -local
```
- **6:** ???
- **7:** PROFIT
- **3:** ???
- **4:** PROFIT
### Server source layout