summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorColin D'Souza <dscdsouza@outlook.com>2016-01-11 21:14:06 -0500
committerColin D'Souza <dscdsouza@outlook.com>2016-01-12 21:14:06 -0500
commit7774f303861b8eb40afb54fb0c33fa8d74cb0f9a (patch)
tree7d0ee1ae4d7c4d27fe620684c7147b77f2ea8933
parentUpdate LICENSE (diff)
downloadshulker-7774f303861b8eb40afb54fb0c33fa8d74cb0f9a.tar.gz
shulker-7774f303861b8eb40afb54fb0c33fa8d74cb0f9a.zip
First commit
-rw-r--r--config.json13
-rw-r--r--index.js84
-rw-r--r--package.json32
3 files changed, 129 insertions, 0 deletions
diff --git a/config.json b/config.json
new file mode 100644
index 0000000..48778d3
--- /dev/null
+++ b/config.json
@@ -0,0 +1,13 @@
+{
+    "PORT": 8000,
+    "DISCORD_EMAIL": "example@example.com",
+    "DISCORD_PASSWORD": "password123",
+    "DISCORD_CHANNEL": "general",
+    "MINECRAFT_SERVER_RCON_IP": "example.com",
+    "MINECRAFT_SERVER_RCON_PORT": 25575,
+    "MINECRAFT_SERVER_RCON_PASSWORD": "password",
+    "WEBHOOK": "/minecraft/hook",
+    "REGEX_MATCH_CHAT_MC": "\\[Server thread/INFO\\]: <(.*)> (.*)",
+    "REGEX_IGNORED_CHAT": "packets too frequently",
+    "DEBUG": false
+}
\ No newline at end of file
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..86a4788
--- /dev/null
+++ b/index.js
@@ -0,0 +1,84 @@
+/*jslint bitwise: true, node: true */
+
+var Discord = require("discord.js");
+var Rcon = require("rcon");
+var express = require("express");
+var app = express(); 
+var http = require("http").Server(app); 
+var c = require("./config.json");
+var debug = c.DEBUG;
+var d2m = new Discord.Client();
+
+var client = new Rcon(c.MINECRAFT_SERVER_RCON_IP, c.MINECRAFT_SERVER_RCON_PORT, c.MINECRAFT_SERVER_RCON_PASSWORD);
+
+client.on("auth", function() {
+    if(debug) {
+        console.log("[DEBUG] Authenticated with "+c.MINECRAFT_SERVER_RCON_IP+":"+c.MINECRAFT_SERVER_RCON_PORT);
+    }
+}).on("response", function(str) {
+    if(debug && str) {
+        console.log("[DEBUG] Got response: " + str);
+    }
+}).on("end", function() {
+    if(debug) {
+        console.log("[DEBUG] Rcon closed!");
+    }
+});
+
+client.connect();
+
+app.use(function(request, response, next) {
+  request.rawBody = "";
+  request.setEncoding("utf8");
+
+  request.on("data", function(chunk) { 
+      request.rawBody += chunk;
+  });
+
+  request.on("end", function() {
+      next();
+  });
+});
+
+d2m.on("ready", function() {
+    var channel = d2m.channels.get("name", c.DISCORD_CHANNEL).id; 
+    app.post(c.WEBHOOK, function(request, response){
+        body = request.rawBody;
+        if(debug) {
+            console.log("[DEBUG] Recieved "+body);  
+        }
+        re = new RegExp(c.REGEX_MATCH_CHAT_MC);
+        ignored = new RegExp(c.REGEX_IGNORED_CHAT);
+        if(!ignored.test(body)) {
+            bodymatch = body.match(re);
+            if(debug) {
+                console.log("[DEBUG] Username: "+bodymatch[1]);
+                console.log("[DEBUG] Text: "+bodymatch[2]);
+            }
+            message = "**"+bodymatch[1]+"**: "+bodymatch[2];
+            d2m.channels.get("id", channel).sendMessage(message);
+        }
+        response.send("");
+    });
+});
+
+d2m.on("message", function (message) {
+    if(message.author.id !== d2m.user.id) {
+        data = { text: "<"+message.author.username+"> "+message.content };
+        client.send('tellraw @a ["",'+JSON.stringify(data)+']');
+    }
+});
+
+d2m.login(c.DISCORD_EMAIL, c.DISCORD_PASSWORD);
+
+var ipaddress = process.env.OPENSHIFT_NODEJS_IP || process.env.IP || "127.0.0.1";
+var serverport = process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || c.PORT;
+if (process.env.OPENSHIFT_NODEJS_IP !== undefined) {
+    http.listen( serverport, ipaddress, function() {
+        console.log("[DEBUG] Bot listening on *:" + serverport);
+    });
+} else {
+    http.listen( serverport, function() {
+        console.log("[DEBUG] Bot listening on *:" + c.PORT);
+    });
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..90dfbb4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,32 @@
+{
+  "name": "shulker",
+  "version": "1.0.0",
+  "description": "A Discord to Minecraft Chat Gateway",
+  "main": "index.js",
+  "scripts": {
+    "lint": "jshint *.js",
+    "test": "npm run lint"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/destruc7i0n/shulker.git"
+  },
+  "keywords": [
+    "Discord",
+    "Bot"
+  ],
+  "author": "destruc7i0n",
+  "license": "ISC",
+  "bugs": {
+    "url": "https://github.com/destruc7i0n/shulker/issues"
+  },
+  "homepage": "https://github.com/destruc7i0n/shulker#readme",
+  "dependencies": {
+    "discord.js": "^5.3.2",
+    "express": "^4.13.3",
+    "rcon": "^1.0.1"
+  },
+  "devDependencies": {
+    "jshint": "^2.9.1-rc2"
+  }
+}