From 7774f303861b8eb40afb54fb0c33fa8d74cb0f9a Mon Sep 17 00:00:00 2001 From: Colin D'Souza Date: Mon, 11 Jan 2016 21:14:06 -0500 Subject: First commit --- config.json | 13 ++++++++++ index.js | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 32 +++++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 config.json create mode 100644 index.js create mode 100644 package.json 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" + } +} -- cgit 1.4.1