From 1180b8f309d591f43bf1133110513e49688056e2 Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Fri, 22 Dec 2017 12:06:45 -0800 Subject: [PATCH 01/27] updat lbry links cleaned it up a lot so hopefully it easier to follow working 100% in my server --- bot/modules/lbrylink.js | 97 +++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 37 deletions(-) diff --git a/bot/modules/lbrylink.js b/bot/modules/lbrylink.js index c1696fd..899c8e2 100644 --- a/bot/modules/lbrylink.js +++ b/bot/modules/lbrylink.js @@ -1,5 +1,5 @@ let inPrivate = require("../helpers.js").inPrivate; -let ResponseDebug = "false"; +let responseDebug = false; exports.custom = [ "lbrylink" //change this to your function name ]; @@ -9,59 +9,82 @@ exports.lbrylink = function(bot, msg, suffix) { if (inPrivate(msg)) { return; } - var link = msg.content.indexOf("lbry://"); - if (link != -1) { - var text = msg.content.replace("lbry://", "https://open.lbry.io/"); - var message = GetWordByPos(text, link); - if (ResponseDebug == "true") { - console.log("text = " + text); - console.log("message = " + message); + if (msg.content.includes("lbry://")) { + //Extract URL from Message + newURL = msg.content + .replace("lbry://", "https://open.lbry.io/") + .match(/\bhttps?:\/\/\S+/gi) + .toString(); + if (responseDebug) { + console.log("___________________________"); + console.log("newURL = " + newURL); } - if (message === "https://open.lbry.io/") { + + //Check if just lbry:// was supplied + if (newURL == "https://open.lbry.io/") { return; } - if (message.search(">") != -1) { - parsename = message.split(">").pop(); - if (parsename.search("/") == -1) { + + //Check if Username Was Supplied + if (newURL.includes(">")) { + //Get rid of ID from message + parseID = newURL.split(">").pop(); + newURL = "https://open.lbry.io" + parseID; + if (responseDebug) { + console.log("Username Provided!"); + console.log("parseID = " + parseID); + console.log("newURL = " + newURL); + } + + //check if just Username Was Supplied + if (!newURL.substr(20).includes("/")) { return; } - newname = message.split("/").pop(); - message = "https://open.lbry.io/" + newname; - if (ResponseDebug == "true") { - console.log("Username Provided!"); - console.log("parsename = " + parsename); - console.log("newname = " + newname); + + //check if more than username was supplied + //Also check obscurity in username like ``@MSFTserver` vs `@MSFTserverPics` + if (parseID.includes("/")) { + //parse out extra params before `/` like `<@123456789>Pics` + parseID = parseID.split("/").pop(); + newURL = "https://open.lbry.io/" + parseID; + if (responseDebug) { + console.log("Username no / check"); + console.log("parseID = " + parseID); + console.log("newURL = " + newURL); + } + + //checks if username had if after it or just blank to be safe + if (newURL == "https://open.lbry.io/" || parseID.startsWith("#")) { + return; + } } + + //one last saftey check + if (newURL == "https://open.lbry.io") { + return; + } + + //If no UserName Found proceed } else { - var newname = message.replace("https://open.lbry.io/", ""); + if (newURL == "https://open.lbry.io/") { + return; + } + if (responseDebug) { + console.log("___________________________"); + console.log("newURL = " + newURL); + } } const embed = { description: "I see you tried to post a LBRY URL, here's a friendly hyperlink to share and for others to access your content with a single click: \n" + - "[lbry://" + - newname + - "](" + - message + - ")", + newURL, color: 7976557, author: { name: "LBRY Linker", icon_url: "https://i.imgur.com/yWf5USu.png" } }; - msg.channel.send({ - embed - }); - } - - function GetWordByPos(str, pos) { - var left = str.substr(0, pos); - var right = str.substr(pos); - - left = left.replace(/^.+ /g, ""); - right = right.replace(/ .+$/g, ""); - - return left + right; + msg.channel.send({ embed }); } }); }; From e03a2de25073ef8dce9ead7a6fa35b823017581f Mon Sep 17 00:00:00 2001 From: LBRY Docs <36087921+lbrydocs@users.noreply.github.com> Date: Mon, 5 Feb 2018 12:45:58 -0800 Subject: [PATCH 02/27] create initial LICENSE file --- LICENSE | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..21e9899 --- /dev/null +++ b/LICENSE @@ -0,0 +1,15 @@ +The MIT License (MIT) + +Copyright (c) 2016-2018 LBRY Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. From 1ea37c878ad4d33c55b7ce57121917a8a15d046d Mon Sep 17 00:00:00 2001 From: YULIUS KURNIAWAN KRISTIANTO Date: Mon, 19 Feb 2018 22:05:20 +0700 Subject: [PATCH 03/27] added new commands lbry basic ready to wunderbot helpcommand --- config/commands.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/config/commands.json b/config/commands.json index b752e0e..bf9bcdc 100644 --- a/config/commands.json +++ b/config/commands.json @@ -655,6 +655,22 @@ } } }, + "!basic": { + "usage": "", + "description": "LBRY App Basics!", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description" : "[LBRY App Basics](https://lbry.io/faq/lbry-basics) The purpose of this FAQ is to answer questions about some of the basic functionality available in the LBRY App", + "color": 7976557, + "author": { + "name": "LBRY App Basics!", + "url": "https://lbry.io/faq/lbry-basics", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, "!tipbot": { "usage": "", "description": "Tipbot Help Message", From effc17ad1289e6454eddca633c80b68bef6776dc Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Tue, 27 Mar 2018 14:12:36 -0700 Subject: [PATCH 04/27] check if user is online --- bot/bot.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bot/bot.js b/bot/bot.js index 63b06ed..682ed5b 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -61,6 +61,15 @@ bot.on('disconnected', function() { function checkMessageForCommand(msg, isEdit) { //check if message is a command if (msg.author.id != bot.user.id && msg.content.startsWith(config.prefix)) { + //check if user is Online + if ( + !msg.author.presence.status || + msg.author.presence.status == 'offline' || + msg.author.presence.status == 'invisible' + ) { + msg.channel.send('Please set your Discord Presence to Online to talk to the Bot!'); + return; + } console.log('treating ' + msg.content + ' from UserID:' + msg.author + ' || UserName: ' + msg.author.username + ' as command'); var cmdTxt = msg.content.split(' ')[0].substring(config.prefix.length); var suffix = msg.content.substring(cmdTxt.length + config.prefix.length + 1); //add one for the ! and one for the space From 9db8e164cebe94d052a30300d983cbc48ecd46e0 Mon Sep 17 00:00:00 2001 From: Niko Storni Date: Wed, 28 Mar 2018 18:27:04 -0400 Subject: [PATCH 05/27] update dependencies --- package-lock.json | 1924 ++++++++++++++++++++++++++++++++++----------- package.json | 14 +- 2 files changed, 1476 insertions(+), 462 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91b3ae9..bb18db4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,38 +6,34 @@ "dependencies": { "JSONSelect": { "version": "0.4.0", - "resolved": - "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" }, "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } }, "ansi-regex": { "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", - "resolved": - "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": - "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "optional": true, "requires": { "micromatch": "2.3.11", @@ -55,16 +51,13 @@ }, "arr-flatten": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": - "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "optional": true }, "array-unique": { "version": "0.2.1", - "resolved": - "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "optional": true }, @@ -75,8 +68,7 @@ }, "assert-plus": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { @@ -89,17 +81,14 @@ }, "async-each": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "optional": true }, "async-limiter": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": - "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "asynckit": { "version": "0.4.0", @@ -140,8 +129,7 @@ }, "babel-code-frame": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { "chalk": "1.1.3", @@ -151,8 +139,7 @@ }, "babel-core": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "requires": { "babel-code-frame": "6.26.0", @@ -178,8 +165,7 @@ }, "babel-generator": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "requires": { "babel-messages": "6.23.0", @@ -194,8 +180,7 @@ }, "babel-helper-function-name": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "requires": { "babel-helper-get-function-arity": "6.24.1", @@ -207,8 +192,7 @@ }, "babel-helper-get-function-arity": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "requires": { "babel-runtime": "6.26.0", @@ -217,14 +201,12 @@ }, "babel-helper-mark-eval-scopes": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.1.1.tgz", "integrity": "sha1-RVQ0Xt+fJUlCe9IJjlMCU/ivKZI=" }, "babel-helper-remap-async-to-generator": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "requires": { "babel-helper-function-name": "6.24.1", @@ -236,14 +218,12 @@ }, "babel-helper-remove-or-void": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.1.1.tgz", "integrity": "sha1-nX4YVtxvr8tBsoOkFnMNwYRPZtc=" }, "babel-helpers": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "requires": { "babel-runtime": "6.26.0", @@ -252,8 +232,7 @@ }, "babel-messages": { "version": "6.23.0", - "resolved": - "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "requires": { "babel-runtime": "6.26.0" @@ -261,8 +240,7 @@ }, "babel-plugin-minify-dead-code-elimination": { "version": "0.1.7", - "resolved": - "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.7.tgz", "integrity": "sha1-d09TbzR7mDk6J7qnF4cpaIE8NCw=", "requires": { "babel-helper-mark-eval-scopes": "0.1.1", @@ -272,38 +250,32 @@ }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=" }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" }, "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" }, "babel-plugin-transform-async-generator-functions": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "requires": { "babel-helper-remap-async-to-generator": "6.24.1", @@ -313,8 +285,7 @@ }, "babel-plugin-transform-class-properties": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "requires": { "babel-helper-function-name": "6.24.1", @@ -325,8 +296,7 @@ }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "requires": { "babel-runtime": "6.26.0", @@ -338,8 +308,7 @@ }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "requires": { "babel-runtime": "6.26.0" @@ -347,8 +316,7 @@ }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "requires": { "babel-plugin-transform-strict-mode": "6.24.1", @@ -359,8 +327,7 @@ }, "babel-plugin-transform-export-extensions": { "version": "6.22.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "requires": { "babel-plugin-syntax-export-extensions": "6.13.0", @@ -369,14 +336,12 @@ }, "babel-plugin-transform-inline-consecutive-adds": { "version": "0.1.2", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.1.2.tgz", "integrity": "sha1-VELp8cGceKeJn4pN7m/UgfYQAfU=" }, "babel-plugin-transform-object-rest-spread": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "requires": { "babel-plugin-syntax-object-rest-spread": "6.13.0", @@ -385,8 +350,7 @@ }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", - "resolved": - "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "requires": { "babel-runtime": "6.26.0", @@ -395,8 +359,7 @@ }, "babel-polyfill": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "requires": { "babel-runtime": "6.26.0", @@ -406,18 +369,15 @@ "dependencies": { "regenerator-runtime": { "version": "0.10.5", - "resolved": - "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" } } }, "babel-preset-node8": { "version": "1.2.0", - "resolved": - "https://registry.npmjs.org/babel-preset-node8/-/babel-preset-node8-1.2.0.tgz", - "integrity": - "sha512-pJR+UU+mWOYbgeNkEDZj/ORaks8de9+t0hZmaTHWBMo8x4OQ/GKaXfX2RSasYtFJVqaudOSMG3omE3Q3hhC1uA==", + "resolved": "https://registry.npmjs.org/babel-preset-node8/-/babel-preset-node8-1.2.0.tgz", + "integrity": "sha512-pJR+UU+mWOYbgeNkEDZj/ORaks8de9+t0hZmaTHWBMo8x4OQ/GKaXfX2RSasYtFJVqaudOSMG3omE3Q3hhC1uA==", "requires": { "babel-plugin-minify-dead-code-elimination": "0.1.7", "babel-plugin-syntax-trailing-function-commas": "6.22.0", @@ -433,8 +393,7 @@ }, "babel-register": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "requires": { "babel-core": "6.26.0", @@ -448,8 +407,7 @@ }, "babel-runtime": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { "core-js": "2.5.1", @@ -458,8 +416,7 @@ }, "babel-template": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "requires": { "babel-runtime": "6.26.0", @@ -471,8 +428,7 @@ }, "babel-traverse": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "requires": { "babel-code-frame": "6.26.0", @@ -488,8 +444,7 @@ }, "babel-types": { "version": "6.26.0", - "resolved": - "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "requires": { "babel-runtime": "6.26.0", @@ -501,19 +456,16 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": - "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "balanced-match": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "bcrypt-pbkdf": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { @@ -522,8 +474,7 @@ "dependencies": { "tweetnacl": { "version": "0.14.5", - "resolved": - "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true } @@ -531,8 +482,7 @@ }, "binary-extensions": { "version": "1.10.0", - "resolved": - "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", "optional": true }, @@ -542,23 +492,21 @@ "integrity": "sha1-/54LYqcbu4rd2zTuLkJ9rCHBCW8=" }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": - "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, "boom": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "brace-expansion": { "version": "1.1.8", - "resolved": - "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { "balanced-match": "1.0.0", @@ -577,14 +525,13 @@ } }, "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" }, "buffer-shims": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "caseless": { @@ -604,6 +551,14 @@ "supports-color": "2.0.0" } }, + "check-env": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/check-env/-/check-env-1.3.0.tgz", + "integrity": "sha1-vSsjDY023HNC3FKGhpQHvPFyzjo=", + "requires": { + "cowsay": "1.3.0" + } + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -612,6 +567,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -622,13 +578,18 @@ }, "chrono-node": { "version": "1.3.5", - "resolved": - "https://registry.npmjs.org/chrono-node/-/chrono-node-1.3.5.tgz", + "resolved": "https://registry.npmjs.org/chrono-node/-/chrono-node-1.3.5.tgz", "integrity": "sha1-oklSmKMtqCvMAa2b59d++l4kQSI=", "requires": { - "moment": "2.19.1" + "moment": "2.21.0" } }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, "cjson": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.2.1.tgz", @@ -645,10 +606,9 @@ "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" }, "combined-stream": { - "version": "1.0.5", - "resolved": - "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "1.0.0" } @@ -656,19 +616,17 @@ "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": - "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, "concat-map": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "config": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/config/-/config-1.27.0.tgz", - "integrity": "sha1-OrMNAID/dvQHwvR6wTJq39kIr18=", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/config/-/config-1.30.0.tgz", + "integrity": "sha1-HWCp81NIoTwXV5jThOgaWhbDum4=", "requires": { "json5": "0.4.0", "os-homedir": "1.0.2" @@ -683,8 +641,7 @@ }, "convert-source-map": { "version": "1.5.0", - "resolved": - "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" }, "core-js": { @@ -694,10 +651,20 @@ }, "core-util-is": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cowsay": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.0.tgz", + "integrity": "sha512-cbPcPpK2wdFwC7VnFy7LOQRq7N1IWO2F57cYjpTN06H8WryLzSST9Q8rwdO3Z98JHHpwexdAuxLLhSIUkkg8Qw==", + "requires": { + "get-stdin": "5.0.1", + "optimist": "0.6.1", + "string-width": "2.1.1", + "strip-eof": "1.0.0" + } + }, "cryptiles": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", @@ -709,14 +676,18 @@ "boom": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": - "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } } } }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -728,45 +699,61 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": - "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, "delayed-stream": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "detect-indent": { "version": "4.0.0", - "resolved": - "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "requires": { "repeating": "2.0.1" } }, "discord.js": { - "version": "11.2.1", - "resolved": - "https://registry.npmjs.org/discord.js/-/discord.js-11.2.1.tgz", - "integrity": - "sha512-8Mor+IREVWHinjRd6Bu6OwRfT+ET/WEoLWMl8crFvBVcTFmaO/TSwP39C8QIGCB2YMVMYMdljjX/w17AUMemqg==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.3.2.tgz", + "integrity": "sha512-Abw9CTMX3Jb47IeRffqx2VNSnXl/OsTdQzhvbw/JnqCyqc2imAocc7pX2HoRmgKd8CgSqsjBFBneusz/E16e6A==", "requires": { - "long": "3.2.0", - "prism-media": "0.0.1", - "snekfetch": "3.5.8", + "long": "4.0.0", + "prism-media": "0.0.2", + "snekfetch": "3.6.4", "tweetnacl": "1.0.0", - "ws": "3.3.0" + "ws": "4.1.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "prism-media": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.2.tgz", + "integrity": "sha512-L6yc8P5NVG35ivzvfI7bcTYzqFV+K8gTfX9YaJbmIFfMXTs71RMnAupvTQPTCteGsiOy9QcNLkQyWjAafY/hCQ==" + }, + "snekfetch": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", + "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" + } } }, "ebnf-parser": { "version": "0.1.10", - "resolved": - "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", + "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE=" }, "ecc-jsbn": { @@ -778,23 +765,77 @@ "jsbn": "0.1.1" } }, + "elmadev-discord-irc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/elmadev-discord-irc/-/elmadev-discord-irc-2.4.1.tgz", + "integrity": "sha512-HXy4F40xdK314EpEhbWgdE6DKVjOysTca3f+E+LzhSAuHZHyMIyvey0stq+39AH+4hs9WSpJUnyGE0/9vaZJ6Q==", + "requires": { + "check-env": "1.3.0", + "commander": "2.10.0", + "discord.js": "11.1.0", + "irc-colors": "1.4.2", + "irc-formatting": "1.0.0-rc3", + "irc-upd": "0.6.1", + "lodash": "4.17.4", + "simple-markdown": "0.2.2", + "strip-json-comments": "2.0.1", + "winston": "2.3.1" + }, + "dependencies": { + "commander": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.10.0.tgz", + "integrity": "sha512-q/r9trjmuikWDRJNTBHAVnWhuU6w+z80KgBq7j9YDclik5E7X4xi0KnlZBNFA1zOQ+SH/vHMWd2mC9QTOz7GpA==", + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "discord.js": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.1.0.tgz", + "integrity": "sha1-U1HVnjeY9TbeGXXpLK5NEa89kmY=", + "requires": { + "long": "3.2.0", + "prism-media": "0.0.1", + "snekfetch": "3.5.8", + "tweetnacl": "0.14.5", + "ws": "2.3.1" + } + }, + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "ws": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz", + "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=", + "requires": { + "safe-buffer": "5.0.1", + "ultron": "1.1.0" + } + } + } + }, "embed-creator": { - "version": "1.1.4", - "resolved": - "https://registry.npmjs.org/embed-creator/-/embed-creator-1.1.4.tgz", - "integrity": - "sha512-/UDtZyrj+0X5actMc2N2u/XoHYGHZrzGToG3vBPGjz3diufnHBrYQnkXeGE8kCTn/xkleXnXuNbIijwqPexB6A==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/embed-creator/-/embed-creator-1.2.3.tgz", + "integrity": "sha512-omDI6gfeO4pLdnAj4GNhDhqTFPAaJ/ac78qO6I8lDAI8h8aO7k4zy/VPQ9QHCu4LxQkDqosPSjoXsrX1Ms8RFQ==" }, "es6-promise": { "version": "3.2.1", - "resolved": - "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" }, "escape-string-regexp": { "version": "1.0.5", - "resolved": - "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { @@ -821,8 +862,7 @@ }, "estraverse": { "version": "0.0.4", - "resolved": - "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=" }, "esutils": { @@ -832,8 +872,7 @@ }, "expand-brackets": { "version": "0.1.5", - "resolved": - "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "optional": true, "requires": { @@ -842,8 +881,7 @@ }, "expand-range": { "version": "1.8.2", - "resolved": - "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "optional": true, "requires": { @@ -866,33 +904,38 @@ }, "extsprintf": { "version": "1.3.0", - "resolved": - "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, "filename-regex": { "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "optional": true }, "fill-range": { "version": "2.2.3", - "resolved": - "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "optional": true, "requires": { @@ -920,32 +963,823 @@ }, "forever-agent": { "version": "0.6.1", - "resolved": - "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "fs-readdir-recursive": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=" }, "fs.realpath": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -957,8 +1791,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": - "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -980,8 +1813,7 @@ }, "glob-parent": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { "is-glob": "2.0.1" @@ -990,28 +1822,29 @@ "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": - "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "graceful-fs": { "version": "4.1.11", - "resolved": - "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, "har-schema": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.0.3", - "resolved": - "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.3.0", + "ajv": "5.5.2", "har-schema": "2.0.0" } }, @@ -1026,25 +1859,22 @@ "hawk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": - "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", - "hoek": "4.2.0", + "hoek": "4.2.1", "sntp": "2.1.0" } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": - "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" }, "home-or-tmp": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "requires": { "os-homedir": "1.0.2", @@ -1053,22 +1883,52 @@ }, "hooks-fixed": { "version": "2.0.2", - "resolved": - "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", - "integrity": - "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==" + "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", + "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==" }, "http-signature": { "version": "1.2.0", - "resolved": - "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "1.1.0", + "normalize-path": "1.0.0", + "strip-indent": "2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + } + } + }, + "iconv": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/iconv/-/iconv-2.2.3.tgz", + "integrity": "sha1-4ITWDut9c9p/CpwJbkyKvgkL+u0=", + "optional": true, + "requires": { + "nan": "2.10.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1091,10 +1951,32 @@ "loose-envify": "1.3.1" } }, + "irc-colors": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/irc-colors/-/irc-colors-1.4.2.tgz", + "integrity": "sha512-QZ1g4d9XTGKgBAp7lrltCetefqd3zfYs3SFQ4YyRSORORCmy/9EkU/r8LJrlSnaWc3Z+54EgHXBRlOHaCvpyHA==" + }, + "irc-formatting": { + "version": "1.0.0-rc3", + "resolved": "https://registry.npmjs.org/irc-formatting/-/irc-formatting-1.0.0-rc3.tgz", + "integrity": "sha1-lSDqPWpBuDk5SyHFEbWf6+2lU3c=", + "requires": { + "zeropad": "1.1.0" + } + }, + "irc-upd": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/irc-upd/-/irc-upd-0.6.1.tgz", + "integrity": "sha512-J/h33P1fnWFmClTahUsz0WBx1xVe/HydwvWTDHxzW/Z94+MbhsePde3xZ6mrjVFkN+ahjYpMCGuom3GU9+VpMg==", + "requires": { + "iconv": "2.2.3", + "irc-colors": "1.4.2", + "node-icu-charset-detector": "0.2.0" + } + }, "is-binary-path": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "optional": true, "requires": { @@ -1104,20 +1986,26 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": - "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "1.1.3" + } }, "is-dotfile": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "optional": true }, "is-equal-shallow": { "version": "0.1.3", - "resolved": - "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "optional": true, "requires": { @@ -1126,15 +2014,13 @@ }, "is-extendable": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "optional": true }, "is-extglob": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-finite": { @@ -1145,6 +2031,11 @@ "number-is-nan": "1.0.1" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -1164,22 +2055,19 @@ }, "is-posix-bracket": { "version": "0.1.1", - "resolved": - "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "optional": true }, "is-primitive": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "optional": true }, "is-typedarray": { "version": "1.0.0", - "resolved": - "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { @@ -1250,20 +2138,17 @@ }, "json-schema": { "version": "0.2.3", - "resolved": - "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.3.1", - "resolved": - "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, "json-stringify-safe": { "version": "5.0.1", - "resolved": - "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { @@ -1272,13 +2157,13 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonpath": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-0.2.12.tgz", - "integrity": "sha1-W/nZEftGFsHjNwvs658NskrjTNI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.0.tgz", + "integrity": "sha1-Rc2dTE0NaCXZC9fkD4PxGCsT3Qc=", "requires": { "esprima": "1.2.2", "jison": "0.4.13", - "static-eval": "0.2.3", + "static-eval": "2.0.0", "underscore": "1.7.0" } }, @@ -1306,10 +2191,18 @@ "is-buffer": "1.1.6" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, "lex-parser": { "version": "0.1.4", - "resolved": - "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz", "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA=" }, "lodash": { @@ -1319,14 +2212,12 @@ }, "lodash.get": { "version": "4.4.2", - "resolved": - "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, "lodash.some": { "version": "4.6.0", - "resolved": - "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" }, "long": { @@ -1336,8 +2227,7 @@ }, "loose-envify": { "version": "1.3.1", - "resolved": - "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { "js-tokens": "3.0.2" @@ -1345,8 +2235,7 @@ }, "micromatch": { "version": "2.3.11", - "resolved": - "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "optional": true, "requires": { @@ -1366,24 +2255,22 @@ } }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": - "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": - "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "1.1.8" } @@ -1402,24 +2289,23 @@ } }, "moment": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", - "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=" + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==" }, "mongodb": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.33.tgz", - "integrity": "sha1-tTfEcdNKZlG0jzb9vyl1A0Dgi1A=", + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz", + "integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=", "requires": { "es6-promise": "3.2.1", - "mongodb-core": "2.1.17", + "mongodb-core": "2.1.18", "readable-stream": "2.2.7" }, "dependencies": { "readable-stream": { "version": "2.2.7", - "resolved": - "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", "requires": { "buffer-shims": "1.0.0", @@ -1434,30 +2320,28 @@ } }, "mongodb-core": { - "version": "2.1.17", - "resolved": - "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", - "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz", + "integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=", "requires": { - "bson": "1.0.4", + "bson": "1.0.6", "require_optional": "1.0.1" } }, "mongoose": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.0.tgz", - "integrity": - "sha512-PVUEQ4eS1Bh0Q4IqWRph+li8VMwBxHetdJ1O/P/vE8DktOtBOM1G1G0QOrtQSW1FDrLFSVYkzK4IfI7vJeihQg==", + "version": "4.13.12", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.12.tgz", + "integrity": "sha512-pH8NK5AYGbnPeEFFGs5ACk18vzzcy4DFT48U9kKvkfg6SI3nJZkzGfN7o1NDWjy+kP26hWyU/AMhYTfe5hSVnA==", "requires": { "async": "2.1.4", - "bson": "1.0.4", + "bson": "1.0.6", "hooks-fixed": "2.0.2", "kareem": "1.5.0", "lodash.get": "4.4.2", - "mongodb": "2.2.33", + "mongodb": "2.2.34", "mpath": "0.3.0", "mpromise": "0.5.5", - "mquery": "2.3.2", + "mquery": "2.3.3", "ms": "2.0.0", "muri": "1.3.0", "regexp-clone": "0.0.1", @@ -1475,12 +2359,11 @@ "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" }, "mquery": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.2.tgz", - "integrity": - "sha512-KXWMypZSvhCuqRtza+HMQZdYw7PfFBjBTFvP31NNAq0OX0/NTIgpcDpkWQ2uTxk6vGQtwQ2elhwhs+ZvCA8OaA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz", + "integrity": "sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ==", "requires": { - "bluebird": "3.5.1", + "bluebird": "3.5.0", "debug": "2.6.9", "regexp-clone": "0.0.1", "sliced": "0.0.5" @@ -1501,15 +2384,42 @@ "muri": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz", - "integrity": - "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==" + "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==" + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.19", + "sax": "1.2.4" + } + }, + "negative-zero": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negative-zero/-/negative-zero-1.0.0.tgz", + "integrity": "sha1-mvQi827/stxYK83Ga4a/GtuhFgU=" }, "node-config": { "version": "0.0.2", - "resolved": - "https://registry.npmjs.org/node-config/-/node-config-0.0.2.tgz", + "resolved": "https://registry.npmjs.org/node-config/-/node-config-0.0.2.tgz", "integrity": "sha1-RrQNz7yw5m1GoV+BtU6sITD7FQ0=" }, + "node-icu-charset-detector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-icu-charset-detector/-/node-icu-charset-detector-0.2.0.tgz", + "integrity": "sha1-wjINo3Tdy2cfxUy0oOBB4Vb/1jk=", + "optional": true, + "requires": { + "nan": "2.10.0" + } + }, "nomnom": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", @@ -1521,16 +2431,14 @@ "dependencies": { "underscore": { "version": "1.1.7", - "resolved": - "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz", "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA=" } } }, "normalize-path": { "version": "2.1.1", - "resolved": - "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { "remove-trailing-separator": "1.1.0" @@ -1538,8 +2446,7 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "numeral": { @@ -1549,20 +2456,17 @@ }, "oauth-sign": { "version": "0.8.2", - "resolved": - "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", - "resolved": - "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object.omit": { "version": "2.0.1", - "resolved": - "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "optional": true, "requires": { @@ -1578,10 +2482,38 @@ "wrappy": "1.0.2" } }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + } + } + }, "os-homedir": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-tmpdir": { @@ -1591,8 +2523,7 @@ }, "output-file-sync": { "version": "1.1.2", - "resolved": - "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "requires": { "graceful-fs": "4.1.11", @@ -1602,8 +2533,7 @@ }, "parse-glob": { "version": "3.0.4", - "resolved": - "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "optional": true, "requires": { @@ -1615,16 +2545,19 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "performance-now": { "version": "2.1.0", - "resolved": - "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -1632,27 +2565,24 @@ "optional": true }, "prettier": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.7.4.tgz", - "integrity": "sha1-XoYkrpNjyA+V7GRFhOzfVddPk/o=", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.1.tgz", + "integrity": "sha512-YD5mApxnu/o/u7kiy5C4ouMfzJMXGEQdHyGHtQd0KwN/CrwTwD8RuTNzpInZEYZn9S8m10zDvVT5gAO4pp+0FA==", "dev": true }, "prism-media": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/prism-media/-/prism-media-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.1.tgz", "integrity": "sha1-o0JcnKvVDRxsAuVDlBoRiVZnvRA=" }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": - "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process-nextick-args": { "version": "1.0.7", - "resolved": - "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "punycode": { @@ -1663,15 +2593,12 @@ "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": - "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "randomatic": { "version": "1.1.7", - "resolved": - "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": - "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "optional": true, "requires": { "is-number": "3.0.0", @@ -1680,8 +2607,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": - "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "optional": true, "requires": { @@ -1690,8 +2616,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": - "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "optional": true, "requires": { @@ -1713,10 +2638,8 @@ }, "readable-stream": { "version": "2.3.3", - "resolved": - "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": - "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "optional": true, "requires": { "core-util-is": "1.0.2", @@ -1742,17 +2665,13 @@ }, "regenerator-runtime": { "version": "0.11.0", - "resolved": - "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": - "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" }, "regex-cache": { "version": "0.4.4", - "resolved": - "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": - "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "optional": true, "requires": { "is-equal-shallow": "0.1.3" @@ -1760,26 +2679,22 @@ }, "regexp-clone": { "version": "0.0.1", - "resolved": - "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": - "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.2", - "resolved": - "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" }, "repeat-string": { "version": "1.6.1", - "resolved": - "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "optional": true }, @@ -1792,77 +2707,87 @@ } }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": - "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, "require_optional": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": - "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { "resolve-from": "2.0.0", - "semver": "5.4.1" + "semver": "5.5.0" } }, "resolve-from": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, "safe-buffer": { "version": "5.1.1", - "resolved": - "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": - "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": - "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "set-immediate-shim": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "optional": true }, + "simple-markdown": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-markdown/-/simple-markdown-0.2.2.tgz", + "integrity": "sha512-AHdtgtmYo7VR48kmm+lzQRJpyjv5G+2hk/4zMH3O1A288u0goKTCHwEFPRNcrqQt5SkmFUXLAycgoH7oxfYOZA==" + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, + "sleep": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sleep/-/sleep-5.1.1.tgz", + "integrity": "sha1-h4+h1E0I7rDyb7IBjvhinrGjq5Q=", + "requires": { + "nan": "2.10.0" + } + }, "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", @@ -1871,38 +2796,33 @@ "snekfetch": { "version": "3.5.8", "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.5.8.tgz", - "integrity": - "sha512-osq7soqKBObV4u/WE9tGQT/m5JdqTU1PWVPcT0We3sKZ99h9QA7wSj7ZWrwEwgRbELeO5BrVCanYjDYtVYcwrQ==" + "integrity": "sha512-osq7soqKBObV4u/WE9tGQT/m5JdqTU1PWVPcT0We3sKZ99h9QA7wSj7ZWrwEwgRbELeO5BrVCanYjDYtVYcwrQ==" }, "sntp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": - "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "source-map": { "version": "0.5.7", - "resolved": - "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-support": { "version": "0.4.18", - "resolved": - "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": - "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "requires": { "source-map": "0.5.7" } }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -1916,102 +2836,147 @@ "dependencies": { "tweetnacl": { "version": "0.14.5", - "resolved": - "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true } } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "static-eval": { - "version": "0.2.3", - "resolved": - "https://registry.npmjs.org/static-eval/-/static-eval-0.2.3.tgz", - "integrity": "sha1-Aj8XrJ/uQm6niMEuo5IG3Bdfiyo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz", + "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==", "requires": { - "escodegen": "0.0.28" + "escodegen": "1.9.1" }, "dependencies": { "escodegen": { - "version": "0.0.28", - "resolved": - "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz", - "integrity": "sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "requires": { - "esprima": "1.0.4", - "estraverse": "1.3.2", - "source-map": "0.5.7" + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" } }, "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" }, "estraverse": { - "version": "1.3.2", - "resolved": - "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz", - "integrity": "sha1-N8K4k+8T1yPydth41g2FNRUqbEI=" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } } } }, "string_decoder": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": - "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { "safe-buffer": "5.1.1" } }, "stringstream": { "version": "0.0.5", - "resolved": - "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { "version": "3.0.1", - "resolved": - "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "2.1.1" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, "supports-color": { "version": "2.0.0", - "resolved": - "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "to-fast-properties": { "version": "1.0.3", - "resolved": - "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, "tough-cookie": { - "version": "2.3.3", - "resolved": - "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" } }, "trim-right": { "version": "1.0.1", - "resolved": - "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, + "tunnel": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.2.tgz", + "integrity": "sha1-8jvNi3p7ioZCYbIIT2b5MZM5YzQ=" + }, "tunnel-agent": { "version": "0.6.0", - "resolved": - "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "5.1.1" @@ -2022,6 +2987,14 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } + }, "ultron": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", @@ -2029,8 +3002,7 @@ }, "underscore": { "version": "1.7.0", - "resolved": - "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, "user-home": { @@ -2040,15 +3012,13 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": - "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": - "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "v8flags": { "version": "2.1.1", @@ -2068,20 +3038,64 @@ "extsprintf": "1.3.0" } }, + "wget": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/wget/-/wget-0.0.1.tgz", + "integrity": "sha1-i7ga8LjmC13yYtPIHlc34fSTHlM=", + "requires": { + "tunnel": "0.0.2" + } + }, + "winston": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz", + "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + } + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.0.tgz", - "integrity": - "sha512-XPwGf44sJI6zgBpiWk44HQG6pK7HABl4F77Uydtb6BcgTC8fFpXHKM8bGu4AdBMtIjREDbNlvGitRZnwi0vXCA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "requires": { "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.0" + "safe-buffer": "5.1.1" + } + }, + "zeropad": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/zeropad/-/zeropad-1.1.0.tgz", + "integrity": "sha1-Ml+T6y0OAW/0QtTjW90CbsLNopI=", + "requires": { + "negative-zero": "1.0.0" } } } diff --git a/package.json b/package.json index 41d85a1..eb188c4 100644 --- a/package.json +++ b/package.json @@ -4,17 +4,17 @@ "babel-preset-node8": "^1.2.0", "bitcoin": "^3.0.1", "chrono-node": "^1.3.5", - "config": "^1.27.0", - "discord.js": "^11.2.1", + "config": "^1.30.0", + "discord.js": "^11.3.2", "elmadev-discord-irc": "^2.4.1", - "embed-creator": "^1.1.4", - "jsonpath": "^0.2.12", - "moment": "^2.19.1", - "mongoose": "^4.12.3", + "embed-creator": "^1.2.3", + "jsonpath": "^1.0.0", + "moment": "^2.21.0", + "mongoose": "^4.13.12", "needle": "^2.0.1", "node-config": "^0.0.2", "numeral": "^2.0.6", - "request": "^2.83.0", + "request": "^2.85.0", "sleep": "^5.1.1", "wget": "^0.0.1" }, From f3dc3c0356cdcdf85b1de00652f15b8c186723d4 Mon Sep 17 00:00:00 2001 From: Niko Storni Date: Wed, 28 Mar 2018 18:32:03 -0400 Subject: [PATCH 06/27] armonize prettier config with tipbot --- bot/bot.js | 6 +- bot/modules/altprice.js | 83 +- bot/modules/claimbot.js | 205 ++--- bot/modules/commandsV2.js | 35 +- bot/modules/hash.js | 178 ++--- bot/modules/ircbridge.js | 8 +- bot/modules/lbrylink.js | 60 +- bot/modules/price.js | 341 ++++---- bot/modules/purge.js | 30 +- bot/modules/releasenotes.js | 86 +- bot/modules/rolesetter.js | 104 +-- bot/modules/spam-detection.js | 49 +- bot/modules/speech.js | 186 ++--- bot/modules/stats.js | 269 ++++--- bot/modules/supportbot.js | 36 +- bot/modules/tipfix.js | 9 +- bot/modules/welcome.js | 196 +++-- config/commands.json | 1383 +++++++++++++++++---------------- package.json | 6 +- 19 files changed, 1502 insertions(+), 1768 deletions(-) diff --git a/bot/bot.js b/bot/bot.js index 682ed5b..99be483 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -62,11 +62,7 @@ function checkMessageForCommand(msg, isEdit) { //check if message is a command if (msg.author.id != bot.user.id && msg.content.startsWith(config.prefix)) { //check if user is Online - if ( - !msg.author.presence.status || - msg.author.presence.status == 'offline' || - msg.author.presence.status == 'invisible' - ) { + if (!msg.author.presence.status || msg.author.presence.status == 'offline' || msg.author.presence.status == 'invisible') { msg.channel.send('Please set your Discord Presence to Online to talk to the Bot!'); return; } diff --git a/bot/modules/altprice.js b/bot/modules/altprice.js index 3ddb410..ea21f12 100644 --- a/bot/modules/altprice.js +++ b/bot/modules/altprice.js @@ -1,89 +1,66 @@ -let needle = require("needle"); -let hasPriceBotChannels = require("../helpers.js").hasPriceBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let config = require("config"); -let ChannelID = config.get("pricebot").mainchannel; +let needle = require('needle'); +let hasPriceBotChannels = require('../helpers.js').hasPriceBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let config = require('config'); +let ChannelID = config.get('pricebot').mainchannel; -exports.commands = ["altprice"]; +exports.commands = ['altprice']; exports.altprice = { - usage: " ", - description: - "display price of specified alt coin from crypto compare\n**Example:** *!altprice ETH USD 100*", + usage: ' ', + description: 'display price of specified alt coin from crypto compare\n**Example:** *!altprice ETH USD 100*', process: function(bot, msg, suffix) { let dt = new Date(); let timestamp = dt.toUTCString(); if (!hasPriceBotChannels(msg) && !inPrivate(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to price bot." - ); + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to price bot.'); return; } - if (suffix !== "") { + if (suffix !== '') { words = suffix .trim() - .split(" ") + .split(' ') .filter(function(n) { - return n !== ""; + return n !== ''; }); var currency1 = words[0].toUpperCase(); if (words[1] == undefined) { - var currency2 = "BTC"; + var currency2 = 'BTC'; } else { var currency2 = words[1].toUpperCase(); } if (words[2] == undefined) { - var amount = "1"; + var amount = '1'; } else { if (getValidatedAmount(words[2]) === null) { - msg.reply("Please specify a number for "); + msg.reply('Please specify a number for '); return; } var amount = words[2].toUpperCase(); } } else { - var currency1 = "BTC"; - var currency2 = "USD"; - var amount = "1"; + var currency1 = 'BTC'; + var currency2 = 'USD'; + var amount = '1'; } - needle.get("https://min-api.cryptocompare.com/data/all/coinlist", function( - error, - response - ) { + needle.get('https://min-api.cryptocompare.com/data/all/coinlist', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("coinmarketcap API is not available"); + msg.channel.send('coinmarketcap API is not available'); } else { if (!response.body.Data.hasOwnProperty(currency1)) { - msg.channel.send("Invalid Alt Coin"); + msg.channel.send('Invalid Alt Coin'); return; } - needle.get( - "https://min-api.cryptocompare.com/data/price?fsym=" + - currency1 + - "&tsyms=" + - currency2, - function(error, response) { - if (error || response.statusCode !== 200) { - msg.channel.send("coinmarketcap API is not available"); - } else { - var price = Number(response.body[currency2]); - var newprice = price * amount; - var message = - amount + - " " + - currency1 + - " = " + - newprice.toFixed(8) + - " " + - currency2 + - "\n" + - "*Updated: " + - timestamp + - "*"; - msg.channel.send(message); - } + needle.get('https://min-api.cryptocompare.com/data/price?fsym=' + currency1 + '&tsyms=' + currency2, function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('coinmarketcap API is not available'); + } else { + var price = Number(response.body[currency2]); + var newprice = price * amount; + var message = amount + ' ' + currency1 + ' = ' + newprice.toFixed(8) + ' ' + currency2 + '\n' + '*Updated: ' + timestamp + '*'; + msg.channel.send(message); } - ); + }); } }); function getValidatedAmount(amount) { diff --git a/bot/modules/claimbot.js b/bot/modules/claimbot.js index cf5d0b4..2a56877 100644 --- a/bot/modules/claimbot.js +++ b/bot/modules/claimbot.js @@ -1,14 +1,14 @@ -"use strict"; +'use strict'; let lbry; let mongo; let discordBot; -let moment = require("moment"); -let request = require("request"); -let sleep = require("sleep"); -let config = require("config"); -let channels = config.get("claimbot").channels; -const Discord = require("discord.js"); +let moment = require('moment'); +let request = require('request'); +let sleep = require('sleep'); +let config = require('config'); +let channels = config.get('claimbot').channels; +const Discord = require('discord.js'); module.exports = { init: init @@ -16,23 +16,23 @@ module.exports = { function init(discordBot_) { if (lbry) { - throw new Error("init was already called once"); + throw new Error('init was already called once'); } discordBot = discordBot_; - const MongoClient = require("mongodb").MongoClient; - MongoClient.connect(config.get("mongodb").url, function(err, db) { + const MongoClient = require('mongodb').MongoClient; + MongoClient.connect(config.get('mongodb').url, function(err, db) { if (err) { throw err; } mongo = db; - const bitcoin = require("bitcoin"); - lbry = new bitcoin.Client(config.get("lbrycrd")); + const bitcoin = require('bitcoin'); + lbry = new bitcoin.Client(config.get('lbrycrd')); - console.log("Activating claimbot "); - discordBot.channels.get(channels[0]).send("activating claimbot"); + console.log('Activating claimbot '); + discordBot.channels.get(channels[0]).send('activating claimbot'); setInterval(function() { announceNewClaims(); @@ -43,25 +43,21 @@ function init(discordBot_) { function announceNewClaims() { if (!mongo) { - discordPost("Failed to connect to mongo", {}); + discordPost('Failed to connect to mongo', {}); return; } if (!lbry) { - discordPost("Failed to connect to lbrycrd", {}); + discordPost('Failed to connect to lbrycrd', {}); return; } - Promise.all([getLastBlock(), lbryCall("getinfo")]) + Promise.all([getLastBlock(), lbryCall('getinfo')]) .then(function([lastProcessedBlock, currentBlockInfo]) { - const currentHeight = currentBlockInfo["blocks"]; + const currentHeight = currentBlockInfo['blocks']; console.log(currentHeight); if (lastProcessedBlock === null) { - console.log( - "First run. Setting last processed block to " + - currentHeight + - " and exiting." - ); + console.log('First run. Setting last processed block to ' + currentHeight + ' and exiting.'); return setLastBlock(currentHeight); } @@ -71,14 +67,8 @@ function announceNewClaims() { const firstBlockToProcess = testBlock || lastProcessedBlock + 1, lastBlockToProcess = testBlock || currentHeight; - console.log( - "Doing blocks " + firstBlockToProcess + " to " + lastBlockToProcess - ); - return announceClaimsLoop( - firstBlockToProcess, - lastBlockToProcess, - currentHeight - ); + console.log('Doing blocks ' + firstBlockToProcess + ' to ' + lastBlockToProcess); + return announceClaimsLoop(firstBlockToProcess, lastBlockToProcess, currentHeight); } }) .catch(function(err) { @@ -88,27 +78,24 @@ function announceNewClaims() { function announceClaimsLoop(block, lastBlock, currentHeight) { let claimsFound = 0; - return lbryCall("getblockhash", block) + return lbryCall('getblockhash', block) .then(function(blockHash) { - return lbryCall("getblock", blockHash); + return lbryCall('getblock', blockHash); }) .then(function(blockData) { - return Promise.all(blockData["tx"].map(getClaimsForTxid)); + return Promise.all(blockData['tx'].map(getClaimsForTxid)); }) .then(function(arrayOfClaimArrays) { - const claims = Array.prototype - .concat(...arrayOfClaimArrays) - .filter(function(c) { - return !!c; - }); - console.log("Found " + claims.length + " claims in " + block); + const claims = Array.prototype.concat(...arrayOfClaimArrays).filter(function(c) { + return !!c; + }); + console.log('Found ' + claims.length + ' claims in ' + block); claimsFound = claims.length; return Promise.all( claims.map(function(claim) { //the API has a rate limit. to avoid hitting it we must have a small delay between each message //if claims were found in this block, then we wait, otherwise we don't - if (claimsFound > 0 && claim.hasOwnProperty("claimId")) - sleep.msleep(300); + if (claimsFound > 0 && claim.hasOwnProperty('claimId')) sleep.msleep(300); return announceClaim(claim, block, currentHeight); }) ); @@ -125,17 +112,17 @@ function announceClaimsLoop(block, lastBlock, currentHeight) { } function announceClaim(claim, claimBlockHeight, currentHeight) { - console.log("" + claimBlockHeight + ": New claim for " + claim["name"]); + console.log('' + claimBlockHeight + ': New claim for ' + claim['name']); console.log(claim); //ignore supports for now //the issue with supports is that they should be treated completely differently //they are not new claims... - if (claim.hasOwnProperty("supported claimId")) return; + if (claim.hasOwnProperty('supported claimId')) return; let options = { - method: "GET", - url: "http://127.0.0.1:5000/claim_decode/" + claim["name"] + method: 'GET', + url: 'http://127.0.0.1:5000/claim_decode/' + claim['name'] }; request(options, function(error, response, body) { @@ -146,30 +133,22 @@ function announceClaim(claim, claimBlockHeight, currentHeight) { let channelName = null; try { body = JSON.parse(body); - if ( - body.hasOwnProperty("stream") && - body.stream.hasOwnProperty("metadata") - ) { + if (body.hasOwnProperty('stream') && body.stream.hasOwnProperty('metadata')) { claimData = body.stream.metadata; - channelName = body.hasOwnProperty("channel_name") - ? body["channel_name"] - : null; + channelName = body.hasOwnProperty('channel_name') ? body['channel_name'] : null; } } catch (e) { console.error(e); return; } - return Promise.all([ - lbryCall("getvalueforname", claim["name"]), - lbryCall("getclaimsforname", claim["name"]) - ]).then(function([currentWinningClaim, claimsForName]) { + return Promise.all([lbryCall('getvalueforname', claim['name']), lbryCall('getclaimsforname', claim['name'])]).then(function([currentWinningClaim, claimsForName]) { //console.log(JSON.stringify(claimData)); let value = null; if (claimData !== null) value = claimData; else { try { - value = JSON.parse(claim["value"]); + value = JSON.parse(claim['value']); } catch (e) {} } @@ -183,74 +162,52 @@ function announceClaim(claim, claimBlockHeight, currentHeight) { else */ console.log(value); - if (value["author"]) { - text.push("author: " + value["author"]); + if (value['author']) { + text.push('author: ' + value['author']); } - if (value["description"]) { - text.push(value["description"]); + if (value['description']) { + text.push(value['description']); } // if (value['content_type']) // { // text.push("*Content Type:* " + value['content_type']); // } - if (value["nsfw"]) { - text.push("*Warning: Adult Content*"); + if (value['nsfw']) { + text.push('*Warning: Adult Content*'); } //"fee":{"currency":"LBC","amount":186,"version":"_0_0_1","address":"bTGoFCakvQXvBrJg1b7FJzombFUu6iRJsk"} - if (value["fee"]) { + if (value['fee']) { const fees = []; - text.push( - "Price: " + - value["fee"].amount + - " *" + - value["fee"].currency + - "*" - ); + text.push('Price: ' + value['fee'].amount + ' *' + value['fee'].currency + '*'); } - if (!claim["is controlling"]) { + if (!claim['is controlling']) { // the following is based on https://lbry.io/faq/claimtrie-implementation - const lastTakeoverHeight = claimsForName["nLastTakeoverHeight"], + const lastTakeoverHeight = claimsForName['nLastTakeoverHeight'], maxDelay = 4032, // 7 days of blocks at 2.5min per block - activationDelay = Math.min( - maxDelay, - Math.floor((claimBlockHeight - lastTakeoverHeight) / 32) - ), + activationDelay = Math.min(maxDelay, Math.floor((claimBlockHeight - lastTakeoverHeight) / 32)), takeoverHeight = claimBlockHeight + activationDelay, secondsPerBlock = 161, // in theory this should be 150, but in practice its closer to 161 - takeoverTime = - Date.now() + - (takeoverHeight - currentHeight) * secondsPerBlock * 1000; + takeoverTime = Date.now() + (takeoverHeight - currentHeight) * secondsPerBlock * 1000; - text.push( - "Takes effect on approx. **" + - moment(takeoverTime, "x").format("MMMM Do [at] HH:mm [UTC]") + - "** (block " + - takeoverHeight + - ")" - ); + text.push('Takes effect on approx. **' + moment(takeoverTime, 'x').format('MMMM Do [at] HH:mm [UTC]') + '** (block ' + takeoverHeight + ')'); } const richEmbeded = { author: { - name: value["author"] || "Anonymous", - url: "http://open.lbry.io/" + claim["name"], - icon_url: - "http://barkpost-assets.s3.amazonaws.com/wp-content/uploads/2013/11/3dDoge.gif" + name: value['author'] || 'Anonymous', + url: 'http://open.lbry.io/' + claim['name'], + icon_url: 'http://barkpost-assets.s3.amazonaws.com/wp-content/uploads/2013/11/3dDoge.gif' }, - title: - "lbry://" + - (channelName ? channelName + "/" : "") + - claim["name"], + title: 'lbry://' + (channelName ? channelName + '/' : '') + claim['name'], color: 1399626, - description: escapeSlackHtml(text.join("\n")), + description: escapeSlackHtml(text.join('\n')), footer: { - text: - "Block " + claimBlockHeight + " • Claim ID " + claim["claimId"] + text: 'Block ' + claimBlockHeight + ' • Claim ID ' + claim['claimId'] }, - image: { url: !value["nsfw"] ? value["thumbnail"] || "" : "" }, - url: "http://open.lbry.io/" + claim["name"] + image: { url: !value['nsfw'] ? value['thumbnail'] || '' : '' }, + url: 'http://open.lbry.io/' + claim['name'] }; discordPost(text, richEmbeded); @@ -264,13 +221,13 @@ function announceClaim(claim, claimBlockHeight, currentHeight) { function escapeSlackHtml(txt) { return txt - .replace("&", "&") - .replace("<", "<") - .replace(">", ">"); + .replace('&', '&') + .replace('<', '<') + .replace('>', '>'); } function getClaimsForTxid(txid) { - return lbryCall("getclaimsfortx", txid).catch(function(err) { + return lbryCall('getclaimsfortx', txid).catch(function(err) { // an error here most likely means the transaction is spent, // which also means there are no claims worth looking at return []; @@ -279,13 +236,11 @@ function getClaimsForTxid(txid) { function getLastBlock() { return new Promise(function(resolve, reject) { - mongo.collection("claimbot").findOne({}, function(err, obj) { + mongo.collection('claimbot').findOne({}, function(err, obj) { if (err) { reject(err); } else if (!obj) { - mongo - .collection("claimbot") - .createIndex({ last_block: 1 }, { unique: true }); + mongo.collection('claimbot').createIndex({ last_block: 1 }, { unique: true }); resolve(null); } else { resolve(obj.last_block); @@ -296,25 +251,13 @@ function getLastBlock() { function setLastBlock(block) { return new Promise(function(resolve, reject) { - mongo - .collection("claimbot") - .findOneAndUpdate( - { last_block: { $exists: true } }, - { last_block: block }, - { upsert: true, returnOriginal: false }, - function(err, obj) { - if (!err && obj && obj.value.last_block != block) { - reject( - "Last value should be " + - block + - ", but it is " + - obj.value.last_block - ); - } else { - resolve(); - } - } - ); + mongo.collection('claimbot').findOneAndUpdate({ last_block: { $exists: true } }, { last_block: block }, { upsert: true, returnOriginal: false }, function(err, obj) { + if (!err && obj && obj.value.last_block != block) { + reject('Last value should be ' + block + ', but it is ' + obj.value.last_block); + } else { + resolve(); + } + }); }); } @@ -324,7 +267,7 @@ function discordPost(text, params) { channels.forEach(channel => { discordBot.channels .get(channel) - .send("", richEmbeded) + .send('', richEmbeded) .catch(console.error); }); } @@ -333,9 +276,7 @@ function lbryCall(...args) { return new Promise(function(resolve, reject) { lbry.cmd(...args, function(err, ...response) { if (err) { - reject( - new Error("JSONRPC call failed. Args: [" + args.join(", ") + "]") - ); + reject(new Error('JSONRPC call failed. Args: [' + args.join(', ') + ']')); } else { resolve(...response); } diff --git a/bot/modules/commandsV2.js b/bot/modules/commandsV2.js index 3608e49..b35965a 100644 --- a/bot/modules/commandsV2.js +++ b/bot/modules/commandsV2.js @@ -1,6 +1,6 @@ -"use strict"; -let commands = require("../../config/commands"); -const Discord = require("discord.js"); +'use strict'; +let commands = require('../../config/commands'); +const Discord = require('discord.js'); let initialized = false; let discordBot = null; let commandsList = null; @@ -11,12 +11,12 @@ module.exports = { function init(discordBot_) { if (initialized) { - throw new Error("init was already called once"); + throw new Error('init was already called once'); } discordBot = discordBot_; - discordBot.on("message", checkForCommand); + discordBot.on('message', checkForCommand); } /** @@ -28,31 +28,24 @@ let checkForCommand = function(message) { let firstRun = false; if (commandsList === null) { firstRun = true; - commandsList = ""; + commandsList = ''; } //for each message go through all the commands and check if there are any matches Object.keys(commands).forEach(command => { //during the first run also build the cache - if (firstRun) commandsList += command + ", "; + if (firstRun) commandsList += command + ', '; //if a command is found - if ( - !message.author.bot && - message.content.toLowerCase().indexOf(command.toLowerCase()) >= 0 && - commands[command].operation === "send" - ) { + if (!message.author.bot && message.content.toLowerCase().indexOf(command.toLowerCase()) >= 0 && commands[command].operation === 'send') { //send a message to the channel according to the config - message.channel.send("", new Discord.RichEmbed(commands[command].bundle)); + message.channel.send('', new Discord.RichEmbed(commands[command].bundle)); } }); //if the user is requesting the list of commands, then print it - if ( - !message.author.bot && - message.content.toLowerCase().indexOf("!helpcommands") >= 0 - ) { - let bundle = commands["!helpcommands"].bundle; - commandsList = commandsList.replace(/,\s$/g, ""); - bundle.description = "**" + commandsList + "**"; - message.channel.send("", new Discord.RichEmbed(bundle)); + if (!message.author.bot && message.content.toLowerCase().indexOf('!helpcommands') >= 0) { + let bundle = commands['!helpcommands'].bundle; + commandsList = commandsList.replace(/,\s$/g, ''); + bundle.description = '**' + commandsList + '**'; + message.channel.send('', new Discord.RichEmbed(bundle)); } }; diff --git a/bot/modules/hash.js b/bot/modules/hash.js index 720f26a..4d81e14 100644 --- a/bot/modules/hash.js +++ b/bot/modules/hash.js @@ -1,13 +1,13 @@ -let needle = require("needle"); -let config = require("config"); -let hasHashBotChannels = require("../helpers.js").hasHashBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("hashbot").mainchannel; +let needle = require('needle'); +let config = require('config'); +let hasHashBotChannels = require('../helpers.js').hasHashBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('hashbot').mainchannel; exports.commands = [ - "hash" // command that is in this file, every command needs it own export as shown below + 'hash' // command that is in this file, every command needs it own export as shown below ]; -exports.custom = ["timedhash"]; +exports.custom = ['timedhash']; exports.timedhash = function(bot) { setInterval(function() { @@ -15,55 +15,49 @@ exports.timedhash = function(bot) { }, 6 * 60 * 60 * 1000); function sendMiningInfo(bot) { - needle.get("https://explorer.lbry.io/api/v1/status", function( - error, - response - ) { + needle.get('https://explorer.lbry.io/api/v1/status', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("Explorer API is not available"); + msg.channel.send('Explorer API is not available'); } else { var data = response.body; var height = Number(data.status.height); var hashrate = data.status.hashrate; var difficulty = Number(data.status.difficulty); - needle.get("https://whattomine.com/coins/164.json", function( - error, - response - ) { + needle.get('https://whattomine.com/coins/164.json', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("whattomine API is not available"); + msg.channel.send('whattomine API is not available'); } var data = response.body; var reward = Number(data.block_reward); var block_time = Number(data.block_time); var difficulty24 = Number(data.difficulty24); description = - "Hashrate: " + + 'Hashrate: ' + numberWithCommas(hashrate) + - "\n" + - "Difficulty: " + + '\n' + + 'Difficulty: ' + numberWithCommas(difficulty.toFixed(0)) + - "\n" + - "Difficulty 24 Hour Average: " + + '\n' + + 'Difficulty 24 Hour Average: ' + numberWithCommas(difficulty24.toFixed(0)) + - "\n" + - "Current block: " + + '\n' + + 'Current block: ' + numberWithCommas(height.toFixed(0)) + - "\n" + - "Block Time: " + + '\n' + + 'Block Time: ' + numberWithCommas(block_time.toFixed(0)) + - " seconds \n" + - "Block Reward: " + + ' seconds \n' + + 'Block Reward: ' + numberWithCommas(reward.toFixed(0)) + - " LBC \n" + - "Sources: https://explorer.lbry.io & \n" + - "https://whattomine.com/coins/164-lbc-lbry"; + ' LBC \n' + + 'Sources: https://explorer.lbry.io & \n' + + 'https://whattomine.com/coins/164-lbc-lbry'; const embed = { description: description, color: 7976557, author: { - name: "LBRY Network Stats", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'LBRY Network Stats', + icon_url: 'https://i.imgur.com/yWf5USu.png' } }; bot.channels.get(ChannelID).send({ embed }); @@ -72,26 +66,25 @@ exports.timedhash = function(bot) { } }); function numberWithCommas(x) { - return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } } }; exports.hash = { - usage: "", - description: - "Displays current Hashrate of Network\n**!hash power **\n Displays potential Earnings For Given Hashrate", + usage: '', + description: 'Displays current Hashrate of Network\n**!hash power **\n Displays potential Earnings For Given Hashrate', process: function(bot, msg, suffix) { - var command = "!hash"; + var command = '!hash'; words = suffix .trim() - .split(" ") + .split(' ') .filter(function(n) { - return n !== ""; + return n !== ''; }); profitcommand = words[0]; myhashrate = words[1]; - if (profitcommand == "power") { + if (profitcommand == 'power') { sendProfitInfo(bot, msg, suffix); return; } else { @@ -101,60 +94,52 @@ exports.hash = { function sendMiningInfo(bot, msg, suffix) { if (!inPrivate(msg) && !hasHashBotChannels(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to hash bot." - ); + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to hash bot.'); return; } - needle.get("https://explorer.lbry.io/api/v1/status", function( - error, - response - ) { + needle.get('https://explorer.lbry.io/api/v1/status', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("Explorer API is not available"); + msg.channel.send('Explorer API is not available'); } else { var data = response.body; var height = Number(data.status.height); var hashrate = data.status.hashrate; var difficulty = Number(data.status.difficulty); - needle.get("https://whattomine.com/coins/164.json", function( - error, - response - ) { + needle.get('https://whattomine.com/coins/164.json', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("whattomine API is not available"); + msg.channel.send('whattomine API is not available'); } var data = response.body; var reward = Number(data.block_reward); var block_time = Number(data.block_time); var difficulty24 = Number(data.difficulty24); description = - "Hashrate: " + + 'Hashrate: ' + numberWithCommas(hashrate) + - "\n" + - "Difficulty: " + + '\n' + + 'Difficulty: ' + numberWithCommas(difficulty.toFixed(0)) + - "\n" + - "Difficulty 24 Hour Average: " + + '\n' + + 'Difficulty 24 Hour Average: ' + numberWithCommas(difficulty24.toFixed(0)) + - "\n" + - "Current block: " + + '\n' + + 'Current block: ' + numberWithCommas(height.toFixed(0)) + - "\n" + - "Block Time: " + + '\n' + + 'Block Time: ' + numberWithCommas(block_time.toFixed(0)) + - " seconds \n" + - "Block Reward: " + + ' seconds \n' + + 'Block Reward: ' + numberWithCommas(reward.toFixed(0)) + - " LBC \n" + - "Sources: https://explorer.lbry.io & \n" + - "https://whattomine.com/coins/164-lbc-lbry"; + ' LBC \n' + + 'Sources: https://explorer.lbry.io & \n' + + 'https://whattomine.com/coins/164-lbc-lbry'; const embed = { description: description, color: 7976557, author: { - name: "LBRY Network Stats", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'LBRY Network Stats', + icon_url: 'https://i.imgur.com/yWf5USu.png' } }; msg.channel.send({ embed }); @@ -164,27 +149,19 @@ exports.hash = { }); } function sendProfitInfo(bot, msg, suffix) { - needle.get("https://whattomine.com/coins/164.json", function( - error, - response - ) { + needle.get('https://whattomine.com/coins/164.json', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("whattomine API is not available"); + msg.channel.send('whattomine API is not available'); } else { words = suffix .trim() - .split(" ") + .split(' ') .filter(function(n) { - return n !== ""; + return n !== ''; }); var myhashrate = words[1]; - if ( - myhashrate == "" || - myhashrate == null || - myhashrate == undefined || - myhashrate == " " - ) { - myhashrate = "100"; + if (myhashrate == '' || myhashrate == null || myhashrate == undefined || myhashrate == ' ') { + myhashrate = '100'; } var Diff = response.body.difficulty24; var Reward = response.body.block_reward; @@ -192,33 +169,32 @@ exports.hash = { var LBC = myHash / 2000 * (1 / ((Diff * 2) ^ 32) * Reward) * 3600; var LBC24 = myHash / 2000 * (1 / ((Diff * 2) ^ 32) * Reward) * 86400; var LBC1w = myHash / 2000 * (1 / ((Diff * 2) ^ 32) * Reward) * 604800; - var LBC1m = - myHash / 2000 * (1 / ((Diff * 2) ^ 32) * Reward) * 2628000; + var LBC1m = myHash / 2000 * (1 / ((Diff * 2) ^ 32) * Reward) * 2628000; var message = - "With **" + + 'With **' + myHash + - " Mh/s** and Average 24 hour Difficulty: **" + + ' Mh/s** and Average 24 hour Difficulty: **' + Diff.toFixed(0) + - "**\n" + - "You can potentially earn the following amounts of **LBC**: \n" + - "1 Hour = **" + + '**\n' + + 'You can potentially earn the following amounts of **LBC**: \n' + + '1 Hour = **' + LBC.toFixed(4) + - "** \n" + - "1 Day = **" + + '** \n' + + '1 Day = **' + LBC24.toFixed(2) + - "** \n" + - "1 Week = **" + + '** \n' + + '1 Week = **' + LBC1w.toFixed(4) + - "** \n" + - "1 Month = **" + + '** \n' + + '1 Month = **' + LBC1m.toFixed(4) + - "** \n"; + '** \n'; const embed = { description: message, color: 7976557, author: { - name: "Hashing Power Calculator!", - icon_url: "https://i.imgur.com/nKHVQgq.png" + name: 'Hashing Power Calculator!', + icon_url: 'https://i.imgur.com/nKHVQgq.png' } }; msg.channel.send({ embed }); @@ -227,7 +203,7 @@ exports.hash = { }); } function numberWithCommas(x) { - return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } } }; diff --git a/bot/modules/ircbridge.js b/bot/modules/ircbridge.js index a9e3960..3154fac 100644 --- a/bot/modules/ircbridge.js +++ b/bot/modules/ircbridge.js @@ -1,7 +1,7 @@ -const discordIRC = require("elmadev-discord-irc").default; -const config = require("config"); -const ircconfig = config.get("irc"); -exports.custom = ["irc"]; +const discordIRC = require('elmadev-discord-irc').default; +const config = require('config'); +const ircconfig = config.get('irc'); +exports.custom = ['irc']; exports.irc = function(bot) { discordIRC([ircconfig]); diff --git a/bot/modules/lbrylink.js b/bot/modules/lbrylink.js index 899c8e2..998c330 100644 --- a/bot/modules/lbrylink.js +++ b/bot/modules/lbrylink.js @@ -1,87 +1,85 @@ -let inPrivate = require("../helpers.js").inPrivate; +let inPrivate = require('../helpers.js').inPrivate; let responseDebug = false; exports.custom = [ - "lbrylink" //change this to your function name + 'lbrylink' //change this to your function name ]; exports.lbrylink = function(bot, msg, suffix) { - bot.on("message", msg => { + bot.on('message', msg => { if (inPrivate(msg)) { return; } - if (msg.content.includes("lbry://")) { + if (msg.content.includes('lbry://')) { //Extract URL from Message newURL = msg.content - .replace("lbry://", "https://open.lbry.io/") + .replace('lbry://', 'https://open.lbry.io/') .match(/\bhttps?:\/\/\S+/gi) .toString(); if (responseDebug) { - console.log("___________________________"); - console.log("newURL = " + newURL); + console.log('___________________________'); + console.log('newURL = ' + newURL); } //Check if just lbry:// was supplied - if (newURL == "https://open.lbry.io/") { + if (newURL == 'https://open.lbry.io/') { return; } //Check if Username Was Supplied - if (newURL.includes(">")) { + if (newURL.includes('>')) { //Get rid of ID from message - parseID = newURL.split(">").pop(); - newURL = "https://open.lbry.io" + parseID; + parseID = newURL.split('>').pop(); + newURL = 'https://open.lbry.io' + parseID; if (responseDebug) { - console.log("Username Provided!"); - console.log("parseID = " + parseID); - console.log("newURL = " + newURL); + console.log('Username Provided!'); + console.log('parseID = ' + parseID); + console.log('newURL = ' + newURL); } //check if just Username Was Supplied - if (!newURL.substr(20).includes("/")) { + if (!newURL.substr(20).includes('/')) { return; } //check if more than username was supplied //Also check obscurity in username like ``@MSFTserver` vs `@MSFTserverPics` - if (parseID.includes("/")) { + if (parseID.includes('/')) { //parse out extra params before `/` like `<@123456789>Pics` - parseID = parseID.split("/").pop(); - newURL = "https://open.lbry.io/" + parseID; + parseID = parseID.split('/').pop(); + newURL = 'https://open.lbry.io/' + parseID; if (responseDebug) { - console.log("Username no / check"); - console.log("parseID = " + parseID); - console.log("newURL = " + newURL); + console.log('Username no / check'); + console.log('parseID = ' + parseID); + console.log('newURL = ' + newURL); } //checks if username had if after it or just blank to be safe - if (newURL == "https://open.lbry.io/" || parseID.startsWith("#")) { + if (newURL == 'https://open.lbry.io/' || parseID.startsWith('#')) { return; } } //one last saftey check - if (newURL == "https://open.lbry.io") { + if (newURL == 'https://open.lbry.io') { return; } //If no UserName Found proceed } else { - if (newURL == "https://open.lbry.io/") { + if (newURL == 'https://open.lbry.io/') { return; } if (responseDebug) { - console.log("___________________________"); - console.log("newURL = " + newURL); + console.log('___________________________'); + console.log('newURL = ' + newURL); } } const embed = { - description: - "I see you tried to post a LBRY URL, here's a friendly hyperlink to share and for others to access your content with a single click: \n" + - newURL, + description: "I see you tried to post a LBRY URL, here's a friendly hyperlink to share and for others to access your content with a single click: \n" + newURL, color: 7976557, author: { - name: "LBRY Linker", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'LBRY Linker', + icon_url: 'https://i.imgur.com/yWf5USu.png' } }; msg.channel.send({ embed }); diff --git a/bot/modules/price.js b/bot/modules/price.js index 3b06b2b..d65163f 100644 --- a/bot/modules/price.js +++ b/bot/modules/price.js @@ -1,268 +1,265 @@ -"use strict"; -let jp = require("jsonpath"); -let moment = require("moment"); -let numeral = require("numeral"); -let request = require("request"); -let config = require("config"); -let hasPriceBotChannels = require("../helpers.js").hasPriceBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("pricebot").mainchannel; +'use strict'; +let jp = require('jsonpath'); +let moment = require('moment'); +let numeral = require('numeral'); +let request = require('request'); +let config = require('config'); +let hasPriceBotChannels = require('../helpers.js').hasPriceBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('pricebot').mainchannel; -exports.commands = ["price"]; +exports.commands = ['price']; exports.price = { - usage: " ", - description: "displays price of lbc", + usage: ' ', + description: 'displays price of lbc', process: function(bot, msg, suffix) { var options = { - defaultCurrency: "BTC", + defaultCurrency: 'BTC', // supported currencies and api steps to arrive at the final value currencies: { USD: { - steps: ["LBCBTC", "BTCUSD"], - format: "$0,0.00", - sign: "USD " + steps: ['LBCBTC', 'BTCUSD'], + format: '$0,0.00', + sign: 'USD ' }, GBP: { - steps: ["LBCBTC", "BTCGBP"], - format: "£0,0.00", - sign: "£" + steps: ['LBCBTC', 'BTCGBP'], + format: '£0,0.00', + sign: '£' }, AUD: { - steps: ["LBCBTC", "BTCAUD"], - format: "$0,0.00", - sign: "AUD " + steps: ['LBCBTC', 'BTCAUD'], + format: '$0,0.00', + sign: 'AUD ' }, BRL: { - steps: ["LBCBTC", "BTCBRL"], - format: "R$0,0.00", - sign: "R$" + steps: ['LBCBTC', 'BTCBRL'], + format: 'R$0,0.00', + sign: 'R$' }, CAD: { - steps: ["LBCBTC", "BTCCAD"], - format: "$0,0.00", - sign: "CAD " + steps: ['LBCBTC', 'BTCCAD'], + format: '$0,0.00', + sign: 'CAD ' }, CHF: { - steps: ["LBCBTC", "BTCCHF"], - format: "CHF 0,0.00", - sign: "CHF" + steps: ['LBCBTC', 'BTCCHF'], + format: 'CHF 0,0.00', + sign: 'CHF' }, CLP: { - steps: ["LBCBTC", "BTCCLP"], - format: "$0,0.00", - sign: "CLP " + steps: ['LBCBTC', 'BTCCLP'], + format: '$0,0.00', + sign: 'CLP ' }, CNY: { - steps: ["LBCBTC", "BTCCNY"], - format: "¥0,0.00", - sign: "¥" + steps: ['LBCBTC', 'BTCCNY'], + format: '¥0,0.00', + sign: '¥' }, DKK: { - steps: ["LBCBTC", "BTCDKK"], - format: "kr 0,0.00", - sign: "kr" + steps: ['LBCBTC', 'BTCDKK'], + format: 'kr 0,0.00', + sign: 'kr' }, EUR: { - steps: ["LBCBTC", "BTCEUR"], - format: "€0,0.00", - sign: "€" + steps: ['LBCBTC', 'BTCEUR'], + format: '€0,0.00', + sign: '€' }, HKD: { - steps: ["LBCBTC", "BTCHKD"], - format: "$0,0.00", - sign: "HKD " + steps: ['LBCBTC', 'BTCHKD'], + format: '$0,0.00', + sign: 'HKD ' }, INR: { - steps: ["LBCBTC", "BTCINR"], - format: "₹0,0.00", - sign: "₹" + steps: ['LBCBTC', 'BTCINR'], + format: '₹0,0.00', + sign: '₹' }, ISK: { - steps: ["LBCBTC", "BTCISK"], - format: "kr 0,0.00", - sign: "kr" + steps: ['LBCBTC', 'BTCISK'], + format: 'kr 0,0.00', + sign: 'kr' }, JPY: { - steps: ["LBCBTC", "BTCJPY"], - format: "¥0,0.00", - sign: "¥" + steps: ['LBCBTC', 'BTCJPY'], + format: '¥0,0.00', + sign: '¥' }, KRW: { - steps: ["LBCBTC", "BTCKRW"], - format: "₩0,0.00", - sign: "₩" + steps: ['LBCBTC', 'BTCKRW'], + format: '₩0,0.00', + sign: '₩' }, NZD: { - steps: ["LBCBTC", "BTCNZD"], - format: "$0,0.00", - sign: "NZD " + steps: ['LBCBTC', 'BTCNZD'], + format: '$0,0.00', + sign: 'NZD ' }, PLN: { - steps: ["LBCBTC", "BTCPLN"], - format: "zł 0,0.00", - sign: "zł" + steps: ['LBCBTC', 'BTCPLN'], + format: 'zł 0,0.00', + sign: 'zł' }, RUB: { - steps: ["LBCBTC", "BTCRUB"], - format: "RUB 0,0.00", - sign: "RUB" + steps: ['LBCBTC', 'BTCRUB'], + format: 'RUB 0,0.00', + sign: 'RUB' }, SEK: { - steps: ["LBCBTC", "BTCSEK"], - format: "kr 0,0.00", - sign: "kr" + steps: ['LBCBTC', 'BTCSEK'], + format: 'kr 0,0.00', + sign: 'kr' }, SGD: { - steps: ["LBCBTC", "BTCSGD"], - format: "$0,0.00", - sign: "SGD " + steps: ['LBCBTC', 'BTCSGD'], + format: '$0,0.00', + sign: 'SGD ' }, THB: { - steps: ["LBCBTC", "BTCTHB"], - format: "฿0,0.00", - sign: "฿" + steps: ['LBCBTC', 'BTCTHB'], + format: '฿0,0.00', + sign: '฿' }, TWD: { - steps: ["LBCBTC", "BTCTWD"], - format: "NT$0,0.00", - sign: "NT$" + steps: ['LBCBTC', 'BTCTWD'], + format: 'NT$0,0.00', + sign: 'NT$' }, IDR: { - steps: ["LBCBTC", "BTCIDR"], - format: "Rp0,0.00", - sign: "Rp" + steps: ['LBCBTC', 'BTCIDR'], + format: 'Rp0,0.00', + sign: 'Rp' }, BTC: { - steps: ["LBCBTC"], - format: "0,0[.][00000000] BTC", - sign: "BTC" + steps: ['LBCBTC'], + format: '0,0[.][00000000] BTC', + sign: 'BTC' } }, // api steps api: { LBCBTC: { - url: "https://bittrex.com/api/v1.1/public/getticker?market=BTC-LBC", - path: "$.result.Bid" + url: 'https://bittrex.com/api/v1.1/public/getticker?market=BTC-LBC', + path: '$.result.Bid' }, BTCUSD: { - url: "https://blockchain.info/ticker", - path: "$.USD.buy" + url: 'https://blockchain.info/ticker', + path: '$.USD.buy' }, BTCGBP: { - url: "https://blockchain.info/ticker", - path: "$.GBP.buy" + url: 'https://blockchain.info/ticker', + path: '$.GBP.buy' }, BTCAUD: { - url: "https://blockchain.info/ticker", - path: "$.AUD.buy" + url: 'https://blockchain.info/ticker', + path: '$.AUD.buy' }, BTCBRL: { - url: "https://blockchain.info/ticker", - path: "$.BRL.buy" + url: 'https://blockchain.info/ticker', + path: '$.BRL.buy' }, BTCCAD: { - url: "https://blockchain.info/ticker", - path: "$.CAD.buy" + url: 'https://blockchain.info/ticker', + path: '$.CAD.buy' }, BTCCHF: { - url: "https://blockchain.info/ticker", - path: "$.CHF.buy" + url: 'https://blockchain.info/ticker', + path: '$.CHF.buy' }, BTCCLP: { - url: "https://blockchain.info/ticker", - path: "$.CLP.buy" + url: 'https://blockchain.info/ticker', + path: '$.CLP.buy' }, BTCCNY: { - url: "https://blockchain.info/ticker", - path: "$.CNY.buy" + url: 'https://blockchain.info/ticker', + path: '$.CNY.buy' }, BTCDKK: { - url: "https://blockchain.info/ticker", - path: "$.DKK.buy" + url: 'https://blockchain.info/ticker', + path: '$.DKK.buy' }, BTCEUR: { - url: "https://blockchain.info/ticker", - path: "$.EUR.buy" + url: 'https://blockchain.info/ticker', + path: '$.EUR.buy' }, BTCHKD: { - url: "https://blockchain.info/ticker", - path: "$.HKD.buy" + url: 'https://blockchain.info/ticker', + path: '$.HKD.buy' }, BTCINR: { - url: "https://blockchain.info/ticker", - path: "$.INR.buy" + url: 'https://blockchain.info/ticker', + path: '$.INR.buy' }, BTCISK: { - url: "https://blockchain.info/ticker", - path: "$.ISK.buy" + url: 'https://blockchain.info/ticker', + path: '$.ISK.buy' }, BTCJPY: { - url: "https://blockchain.info/ticker", - path: "$.JPY.buy" + url: 'https://blockchain.info/ticker', + path: '$.JPY.buy' }, BTCKRW: { - url: "https://blockchain.info/ticker", - path: "$.KRW.buy" + url: 'https://blockchain.info/ticker', + path: '$.KRW.buy' }, BTCNZD: { - url: "https://blockchain.info/ticker", - path: "$.NZD.buy" + url: 'https://blockchain.info/ticker', + path: '$.NZD.buy' }, BTCPLN: { - url: "https://blockchain.info/ticker", - path: "$.PLN.buy" + url: 'https://blockchain.info/ticker', + path: '$.PLN.buy' }, BTCRUB: { - url: "https://blockchain.info/ticker", - path: "$.RUB.buy" + url: 'https://blockchain.info/ticker', + path: '$.RUB.buy' }, BTCSEK: { - url: "https://blockchain.info/ticker", - path: "$.SEK.buy" + url: 'https://blockchain.info/ticker', + path: '$.SEK.buy' }, BTCSGD: { - url: "https://blockchain.info/ticker", - path: "$.SGD.buy" + url: 'https://blockchain.info/ticker', + path: '$.SGD.buy' }, BTCTHB: { - url: "https://blockchain.info/ticker", - path: "$.THB.buy" + url: 'https://blockchain.info/ticker', + path: '$.THB.buy' }, BTCTWD: { - url: "https://blockchain.info/ticker", - path: "$.TWD.buy" + url: 'https://blockchain.info/ticker', + path: '$.TWD.buy' }, BTCIDR: { - url: - "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=IDR", - path: "$.IDR" + url: 'https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=IDR', + path: '$.IDR' } }, // display date/time format - dtFormat: "Do MMM YYYY h:mma [UTC]", + dtFormat: 'Do MMM YYYY h:mma [UTC]', // refresh rate in milliseconds to retrieve a new price (default to 10 minutes) refreshTime: 100000 }; var words = suffix .trim() - .split(" ") + .split(' ') .filter(function(n) { - return n !== ""; + return n !== ''; }); - var currency = - words.length > 0 ? words[0].toUpperCase() : options.defaultCurrency; + var currency = words.length > 0 ? words[0].toUpperCase() : options.defaultCurrency; var amount = words.length > 1 ? parseFloat(words[1], 10) : 1; - var showHelp = - isNaN(amount) || Object.keys(options.currencies).indexOf(currency) === -1; + var showHelp = isNaN(amount) || Object.keys(options.currencies).indexOf(currency) === -1; // store the last retrieved rate var cachedRates = {}; - var command = "!price"; + var command = '!price'; var currencies = Object.keys(options.currencies); for (var i = 0; i < currencies.length; i++) { @@ -275,9 +272,7 @@ exports.price = { doHelp(bot, msg, suffix); } else { if (!hasPriceBotChannels(msg) && !inPrivate(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to price bot." - ); + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to price bot.'); return; } doSteps(bot, currency, amount); @@ -285,44 +280,32 @@ exports.price = { function doHelp(bot, msg, suffix) { if (!hasPriceBotChannels(msg) && !inPrivate(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to price bot." - ); + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to price bot.'); return; } var message = - "**" + + '**' + command + - "**: show the price of 1 LBC in " + + '**: show the price of 1 LBC in ' + options.defaultCurrency + - "\n" + - "**" + + '\n' + + '**' + command + - " help**: this message\n" + - "**" + + ' help**: this message\n' + + '**' + command + - " CURRENCY**: show the price of 1 LBC in CURRENCY. Supported values for CURRENCY are Listed Below\n" + - "**" + + ' CURRENCY**: show the price of 1 LBC in CURRENCY. Supported values for CURRENCY are Listed Below\n' + + '**' + command + - " CURRENCY AMOUNT**: show the price of AMOUNT LBC in CURRENCY\n" + - "**Supported Currencies:** *usd*, *gbp*, *eur*, *aud*, *brl*, *cad*, *chf*, *clp*, *cny*, *dkk*, *hkd*, *inr*, *isk*, *jpy*, *krw*, *nzd*, *pln* ,*rub*, *sek*, *sgd*, *thb*, *twd*, *idr* and *btc* (case-insensitive)"; + ' CURRENCY AMOUNT**: show the price of AMOUNT LBC in CURRENCY\n' + + '**Supported Currencies:** *usd*, *gbp*, *eur*, *aud*, *brl*, *cad*, *chf*, *clp*, *cny*, *dkk*, *hkd*, *inr*, *isk*, *jpy*, *krw*, *nzd*, *pln* ,*rub*, *sek*, *sgd*, *thb*, *twd*, *idr* and *btc* (case-insensitive)'; msg.channel.send(message); } function formatMessage(amount, rate, option) { var cur = option.sign; var value = numeral(rate.rate * amount).format(option.format); - return ( - "*" + - numeral(amount).format("0,0[.][00000000]") + - " LBC = " + - cur + - " " + - value + - "*\n_last updated " + - rate.time.utc().format(options.dtFormat) + - "_" - ); + return '*' + numeral(amount).format('0,0[.][00000000]') + ' LBC = ' + cur + ' ' + value + '*\n_last updated ' + rate.time.utc().format(options.dtFormat) + '_'; } function doSteps(bot, currency, amount) { @@ -330,9 +313,7 @@ exports.price = { var shouldReload = true; if (cachedRates[currency]) { var cache = cachedRates[currency]; - shouldReload = - cache.time === null || - moment().diff(cache.time) >= options.refreshTime; + shouldReload = cache.time === null || moment().diff(cache.time) >= options.refreshTime; if (!shouldReload) { var message = formatMessage(amount, cache, option); msg.channel.send(message); @@ -354,22 +335,14 @@ exports.price = { if (steps.length > 0) { var pairName = steps[0]; if (!options.api[pairName]) { - msg.channel.send( - "There was a configuration error. " + - pairName + - " pair was not found." - ); + msg.channel.send('There was a configuration error. ' + pairName + ' pair was not found.'); return; } var pair = options.api[pairName]; request.get(pair.url, function(error, response, body) { if (error) { - msg.channel.send( - err.message - ? err.message - : "The request could not be completed at this time. Please try again later." - ); + msg.channel.send(err.message ? err.message : 'The request could not be completed at this time. Please try again later.'); return; } var pairRate = 0; @@ -398,9 +371,7 @@ exports.price = { cachedRates[currency] = result; msg.channel.send(formatMessage(amount, result, option)); } else { - msg.channel.send( - "The rate returned for the " + pairName + " pair was invalid." - ); + msg.channel.send('The rate returned for the ' + pairName + ' pair was invalid.'); } }); } diff --git a/bot/modules/purge.js b/bot/modules/purge.js index 11222c9..a287ae5 100644 --- a/bot/modules/purge.js +++ b/bot/modules/purge.js @@ -1,13 +1,13 @@ -let hasPerms = require("../helpers.js").hasPerms; -let inPrivate = require("../helpers.js").inPrivate; +let hasPerms = require('../helpers.js').hasPerms; +let inPrivate = require('../helpers.js').inPrivate; exports.commands = [ - "purge" // command that is in this file, every command needs it own export as shown below + 'purge' // command that is in this file, every command needs it own export as shown below ]; exports.purge = { - usage: "", - description: "Deletes Messages", + usage: '', + description: 'Deletes Messages', process: function(bot, msg, suffix) { if (inPrivate(msg)) { msg.channel.send("You Cant Purge Message In DM's!"); @@ -15,7 +15,7 @@ exports.purge = { } if (hasPerms(msg)) { if (!suffix) { - var newamount = "2"; + var newamount = '2'; } else { var amount = Number(suffix); var adding = 1; @@ -29,25 +29,15 @@ exports.purge = { .then(messages => { msg.channel.bulkDelete(messages); // Logging the number of messages deleted on both the channel and console. - msg.channel - .send( - "Deletion of messages successful. \n Total messages deleted including command: " + - newamount - ) - .then(message => message.delete(5000)); - console.log( - "Deletion of messages successful. \n Total messages deleted including command: " + - newamount - ); + msg.channel.send('Deletion of messages successful. \n Total messages deleted including command: ' + newamount).then(message => message.delete(5000)); + console.log('Deletion of messages successful. \n Total messages deleted including command: ' + newamount); }) .catch(err => { - console.log("Error while doing Bulk Delete"); + console.log('Error while doing Bulk Delete'); console.log(err); }); } else { - msg.channel - .send("only moderators can use this command!") - .then(message => message.delete(5000)); + msg.channel.send('only moderators can use this command!').then(message => message.delete(5000)); } } }; diff --git a/bot/modules/releasenotes.js b/bot/modules/releasenotes.js index c7e28e4..8240557 100644 --- a/bot/modules/releasenotes.js +++ b/bot/modules/releasenotes.js @@ -1,25 +1,25 @@ -let request = require("request"); -let config = require("config"); -let hasPerms = require("../helpers.js").hasPerms; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("gitrelease").channel; +let request = require('request'); +let config = require('config'); +let hasPerms = require('../helpers.js').hasPerms; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('gitrelease').channel; exports.commands = [ - "releasenotes" // command that is in this file, every command needs it own export as shown below + 'releasenotes' // command that is in this file, every command needs it own export as shown below ]; exports.releasenotes = { - usage: "", - description: "gets current release notes from GITHUB", + usage: '', + description: 'gets current release notes from GITHUB', process: function(bot, msg, suffix) { var headers = { - "Content-Type": "application/json", - "User-Agent": "Super Agent/0.0.1" + 'Content-Type': 'application/json', + 'User-Agent': 'Super Agent/0.0.1' }; // Configure the request var options = { - url: "https://api.github.com/repos/lbryio/lbry-app/releases/latest", - method: "GET", + url: 'https://api.github.com/repos/lbryio/lbry-app/releases/latest', + method: 'GET', headers: headers }; @@ -32,19 +32,18 @@ exports.releasenotes = { if (releasemessage.length < 2000) { message = { embed: { - title: "*Download " + releasename + " here!*", + title: '*Download ' + releasename + ' here!*', description: releasemessage, url: releaseurl, color: 7976557, timestamp: releasedate, author: { - name: "Lbry-app Release Notes for " + releasename, - icon_url: - "http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png" + name: 'Lbry-app Release Notes for ' + releasename, + icon_url: 'http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png' }, footer: { - icon_url: "https://i.imgur.com/yWf5USu.png", - text: "Lbry-app Updated " + icon_url: 'https://i.imgur.com/yWf5USu.png', + text: 'Lbry-app Updated ' } } }; @@ -52,18 +51,18 @@ exports.releasenotes = { msg.channel.send(message); return; } - if (hasPerms(msg) && suffix === "post") { + if (hasPerms(msg) && suffix === 'post') { bot.channels.get(ChannelID).send(message); } else { - msg.channel.send(msg.author + " Release notes sent via DM"); + msg.channel.send(msg.author + ' Release notes sent via DM'); msg.author.send(message); } } else { message = releasemessage .trim() - .split("###") + .split('###') .filter(function(n) { - return n !== ""; + return n !== ''; }); releasemessage1 = message[0]; releasemessage2 = message[1]; @@ -72,19 +71,18 @@ exports.releasenotes = { releasemessage5 = message[4]; message1 = { embed: { - title: "*Download " + releasename + " here!*", + title: '*Download ' + releasename + ' here!*', description: releasemessage1, url: releaseurl, color: 7976557, timestamp: releasedate, author: { - name: "Lbry-app Release Notes for " + releasename, - icon_url: - "http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png" + name: 'Lbry-app Release Notes for ' + releasename, + icon_url: 'http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png' }, footer: { - icon_url: "https://i.imgur.com/yWf5USu.png", - text: "Lbry-app Updated " + icon_url: 'https://i.imgur.com/yWf5USu.png', + text: 'Lbry-app Updated ' } } }; @@ -94,12 +92,11 @@ exports.releasenotes = { color: 7976557, timestamp: releasedate, author: { - icon_url: - "http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png" + icon_url: 'http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png' }, footer: { - icon_url: "https://i.imgur.com/yWf5USu.png", - text: "Lbry-app Updated " + icon_url: 'https://i.imgur.com/yWf5USu.png', + text: 'Lbry-app Updated ' } } }; @@ -109,12 +106,11 @@ exports.releasenotes = { color: 7976557, timestamp: releasedate, author: { - icon_url: - "http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png" + icon_url: 'http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png' }, footer: { - icon_url: "https://i.imgur.com/yWf5USu.png", - text: "Lbry-app Updated " + icon_url: 'https://i.imgur.com/yWf5USu.png', + text: 'Lbry-app Updated ' } } }; @@ -124,12 +120,11 @@ exports.releasenotes = { color: 7976557, timestamp: releasedate, author: { - icon_url: - "http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png" + icon_url: 'http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png' }, footer: { - icon_url: "https://i.imgur.com/yWf5USu.png", - text: "Lbry-app Updated " + icon_url: 'https://i.imgur.com/yWf5USu.png', + text: 'Lbry-app Updated ' } } }; @@ -139,12 +134,11 @@ exports.releasenotes = { color: 7976557, timestamp: releasedate, author: { - icon_url: - "http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png" + icon_url: 'http://www.pngall.com/wp-content/uploads/2016/04/Github-PNG-Image.png' }, footer: { - icon_url: "https://i.imgur.com/yWf5USu.png", - text: "Lbry-app Updated " + icon_url: 'https://i.imgur.com/yWf5USu.png', + text: 'Lbry-app Updated ' } } }; @@ -156,14 +150,14 @@ exports.releasenotes = { msg.channel.send(message5); return; } - if (hasPerms(msg) && suffix === "post") { + if (hasPerms(msg) && suffix === 'post') { bot.channels.get(ChannelID).send(message1); bot.channels.get(ChannelID).send(message2); bot.channels.get(ChannelID).send(message3); bot.channels.get(ChannelID).send(message4); bot.channels.get(ChannelID).send(message5); } else { - msg.channel.send(msg.author + " Release notes sent via DM"); + msg.channel.send(msg.author + ' Release notes sent via DM'); msg.author.send(message1); msg.author.send(message2); msg.author.send(message3); diff --git a/bot/modules/rolesetter.js b/bot/modules/rolesetter.js index e9a1db0..e7f7a64 100644 --- a/bot/modules/rolesetter.js +++ b/bot/modules/rolesetter.js @@ -1,19 +1,19 @@ -let config = require("config"); -let botconfig = config.get("bot"); -let rolelist = config.get("rolelist"); +let config = require('config'); +let botconfig = config.get('bot'); +let rolelist = config.get('rolelist'); exports.commands = [ - "addrole", // command that is in this file, every command needs it own export as shown below - "delrole", - "roles" + 'addrole', // command that is in this file, every command needs it own export as shown below + 'delrole', + 'roles' ]; exports.addrole = { - usage: "", - description: "Adds you to specified role", + usage: '', + description: 'Adds you to specified role', process: function(bot, msg, suffix) { // Here the bot,msg and suffix is avaible, this function can be async if needed. - var newrole = msg.guild.roles.find("name", suffix); + var newrole = msg.guild.roles.find('name', suffix); // Checks if the user put a role in the message. if (suffix) { @@ -22,48 +22,28 @@ exports.addrole = { // Checks if the role even exists in the discord server if (newrole !== null) { // Checks if the member has the role that they are trying to add - if (!msg.member.roles.find("name", suffix)) { - msg.member - .addRole(newrole) - .then( - msg.channel.send( - msg.member + " has been added to the " + suffix + " role!" - ) - ); + if (!msg.member.roles.find('name', suffix)) { + msg.member.addRole(newrole).then(msg.channel.send(msg.member + ' has been added to the ' + suffix + ' role!')); } else { - msg.channel.send( - "It seems that you already have that role! Try removing it first with the " + - botconfig.prefix + - "delrole command!" - ); + msg.channel.send('It seems that you already have that role! Try removing it first with the ' + botconfig.prefix + 'delrole command!'); } } else { - msg.channel.send( - "The role " + "`" + suffix + "`" + " does not exist!" - ); + msg.channel.send('The role ' + '`' + suffix + '`' + ' does not exist!'); } } else { - msg.channel.send( - "That role isn't one you can add yourself too! Please run the " + - botconfig.prefix + - "roles command to find out which ones are allowed." - ); + msg.channel.send("That role isn't one you can add yourself too! Please run the " + botconfig.prefix + 'roles command to find out which ones are allowed.'); } } else { - msg.channel.send( - "Please specify a role. Type " + - botconfig.prefix + - "roles to see which you may add!" - ); + msg.channel.send('Please specify a role. Type ' + botconfig.prefix + 'roles to see which you may add!'); } } }; exports.delrole = { - usage: "", - description: "Deletes your role specified", + usage: '', + description: 'Deletes your role specified', process: function(bot, msg, suffix) { // Here the bot,msg and suffix is avaible, this function can be async if needed. - let oldrole = msg.guild.roles.find("name", suffix); + let oldrole = msg.guild.roles.find('name', suffix); // Checks if the user put a role in the message. if (suffix) { // Checks if the role mentioned in the message is in the allowed roles listed in the wunderbot config. @@ -71,62 +51,42 @@ exports.delrole = { // Checks if the role even exists in the discord server if (oldrole !== null) { // Checks if the member has the role that they are trying to add - if (msg.member.roles.find("name", suffix)) { - msg.member - .removeRole(oldrole) - .then( - msg.channel.send( - msg.member + " has been removed from the " + suffix + " role!" - ) - ); + if (msg.member.roles.find('name', suffix)) { + msg.member.removeRole(oldrole).then(msg.channel.send(msg.member + ' has been removed from the ' + suffix + ' role!')); } else { - msg.channel.send( - "You don't seem to have that role! Try adding it first with the " + - botconfig.prefix + - "addrole command!" - ); + msg.channel.send("You don't seem to have that role! Try adding it first with the " + botconfig.prefix + 'addrole command!'); } } else { - msg.channel.send( - "The role " + "`" + suffix + "`" + " does not exist!" - ); + msg.channel.send('The role ' + '`' + suffix + '`' + ' does not exist!'); } } else { - msg.channel.send( - "That role isn't one you can add yourself too! Please run the " + - botconfig.prefix + - "roles command to find out which ones are allowed." - ); + msg.channel.send("That role isn't one you can add yourself too! Please run the " + botconfig.prefix + 'roles command to find out which ones are allowed.'); } } else { - msg.channel.send( - "Please specify a role. Type " + - botconfig.prefix + - "roles to see which you may add!" - ); + msg.channel.send('Please specify a role. Type ' + botconfig.prefix + 'roles to see which you may add!'); } } }; exports.roles = { - usage: "", - description: "displays roles you can give yourself", + usage: '', + description: 'displays roles you can give yourself', process: function(bot, msg, suffix) { // Here the bot,msg and suffix is avaible, this function can be async if needed. msg.channel.send({ embed: { color: 3447003, - title: "Wunderbot", - description: "You have accessed the rolebot function of Wunderbot!", + title: 'Wunderbot', + description: 'You have accessed the rolebot function of Wunderbot!', fields: [ { - name: "List of roles", + name: 'List of roles', value: buildRoleString(rolelist.allowedroles), inline: false } ], footer: { icon_url: msg.author.avatarURL, - text: "Requested by: " + JSON.stringify(msg.author.username) + text: 'Requested by: ' + JSON.stringify(msg.author.username) } } }); @@ -135,9 +95,9 @@ exports.roles = { }; function buildRoleString(roles) { - let str = ""; + let str = ''; for (let i = 0; i < roles.length; i++) { - str += "`" + roles[i] + "`" + "\n"; + str += '`' + roles[i] + '`' + '\n'; } return str; } diff --git a/bot/modules/spam-detection.js b/bot/modules/spam-detection.js index 2a006e6..ef21ea6 100644 --- a/bot/modules/spam-detection.js +++ b/bot/modules/spam-detection.js @@ -2,12 +2,12 @@ const authors = []; let warned = []; let banned = []; let messagelog = []; -let config = require("config"); -let botlog = config.get("moderation").logchannel; -let hasPerms = require("../helpers.js").hasPerms; -let inPrivate = require("../helpers.js").inPrivate; -let hasExcludedSpamChannels = require("../helpers.js").hasExcludedSpamChannels; -let hasExcludedSpamUsers = require("../helpers.js").hasExcludedSpamUsers; +let config = require('config'); +let botlog = config.get('moderation').logchannel; +let hasPerms = require('../helpers.js').hasPerms; +let inPrivate = require('../helpers.js').inPrivate; +let hasExcludedSpamChannels = require('../helpers.js').hasExcludedSpamChannels; +let hasExcludedSpamUsers = require('../helpers.js').hasExcludedSpamUsers; /** * Add simple spam protection to your discord server. @@ -16,26 +16,19 @@ let hasExcludedSpamUsers = require("../helpers.js").hasExcludedSpamUsers; * @return {[type]} [description] */ -exports.custom = ["antiSpam"]; +exports.custom = ['antiSpam']; exports.antiSpam = function(bot) { const warnBuffer = 5; const maxBuffer = 10; const interval = 1500; - const warningMessage = - ", Stop spamming or you will be banned! This is your warning!"; - const banMessage = "has been banned for spamming!"; + const warningMessage = ', Stop spamming or you will be banned! This is your warning!'; + const banMessage = 'has been banned for spamming!'; const maxDuplicatesWarning = 5; const maxDuplicatesBan = 10; - bot.on("message", msg => { - if ( - inPrivate(msg) || - msg.author.bot || - hasPerms(msg) || - hasExcludedSpamChannels(msg) || - hasExcludedSpamUsers(msg) - ) { + bot.on('message', msg => { + if (inPrivate(msg) || msg.author.bot || hasPerms(msg) || hasExcludedSpamChannels(msg) || hasExcludedSpamUsers(msg)) { return; } if (msg.author.id != bot.user.id) { @@ -52,11 +45,7 @@ exports.antiSpam = function(bot) { // Check how many times the same message has been sent. let msgMatch = 0; for (let i = 0; i < messagelog.length; i++) { - if ( - messagelog[i].message == msg.content && - messagelog[i].author == msg.author.id && - msg.author.id !== bot.user.id - ) { + if (messagelog[i].message == msg.content && messagelog[i].author == msg.author.id && msg.author.id !== bot.user.id) { msgMatch++; } } @@ -99,7 +88,7 @@ exports.antiSpam = function(bot) { */ function warn(msg, userid) { warned.push(msg.author.id); - msg.channel.send(msg.author + " " + warningMessage); + msg.channel.send(msg.author + ' ' + warningMessage); } /** @@ -117,21 +106,17 @@ exports.antiSpam = function(bot) { banned.push(msg.author.id); - let user = msg.channel.guild.members.find( - member => member.user.id === msg.author.id - ); + let user = msg.channel.guild.members.find(member => member.user.id === msg.author.id); if (user) { user .ban() .then(member => { - msg.channel.send(msg.author + " " + banMessage); - bot.channels.get(botlog).send(msg.author + " " + banMessage); + msg.channel.send(msg.author + ' ' + banMessage); + bot.channels.get(botlog).send(msg.author + ' ' + banMessage); return true; }) .catch(() => { - msg.channel.send( - "insufficient permission to kick " + msg.author + " for spamming." - ); + msg.channel.send('insufficient permission to kick ' + msg.author + ' for spamming.'); return false; }); } diff --git a/bot/modules/speech.js b/bot/modules/speech.js index 7bd3c26..49a8434 100644 --- a/bot/modules/speech.js +++ b/bot/modules/speech.js @@ -1,56 +1,54 @@ -let request = require("request"); -let wget = require("wget"); -let fs = require("fs"); -let config = require("config"); -let hasSpeechBotChannels = require("../helpers.js").hasSpeechBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("speechbot").mainchannel; +let request = require('request'); +let wget = require('wget'); +let fs = require('fs'); +let config = require('config'); +let hasSpeechBotChannels = require('../helpers.js').hasSpeechBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('speechbot').mainchannel; //debug output "true/false" outputs same error as slack message in console if set to true //if set to false console will be left blank like normal //some have more info on file details of error -let FullDebug = "true"; +let FullDebug = 'true'; //outputs response from speech, very bulk reply -let ResponseDebug = "false"; +let ResponseDebug = 'false'; exports.commands = [ - "speech" // command that is in this file, every command needs it own export as shown below + 'speech' // command that is in this file, every command needs it own export as shown below ]; exports.speech = { - usage: "", - description: "gets top claim from spee.ch, coming soon post to spee.ch", + usage: '', + description: 'gets top claim from spee.ch, coming soon post to spee.ch', process: function(bot, msg, suffix) { if (!hasSpeechBotChannels(msg) && !inPrivate(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to speech bot." - ); + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to speech bot.'); return; } - var command = "!speech"; + var command = '!speech'; words = suffix .trim() - .split(" ") + .split(' ') .filter(function(n) { - return n !== ""; + return n !== ''; }); var imagename = words[0]; //check if image name is help, if it is then do help message - if (imagename == "help") { + if (imagename == 'help') { doHelp(bot, msg, suffix); return; } else { //check if imagename is defined if not do error if (imagename === undefined) { - if (FullDebug === "true") { - var message = "`no name provided`"; - console.log("no name provided"); + if (FullDebug === 'true') { + var message = '`no name provided`'; + console.log('no name provided'); msg.channel.send(message); doHelp(bot, msg, suffix); return; } else { - var message = "`no name provided`"; + var message = '`no name provided`'; msg.channel.send(message); doHelp(bot, msg, suffix); return; @@ -62,19 +60,13 @@ exports.speech = { //check if a url is provided if none do help message if (filepath === undefined) { - if (FullDebug === "true") { - var message = - "`no url provided, fetching image from:`\n" + - "https://spee.ch/" + - imagename; - console.log("no url provided"); + if (FullDebug === 'true') { + var message = '`no url provided, fetching image from:`\n' + 'https://spee.ch/' + imagename; + console.log('no url provided'); msg.channel.send(message); return; } else { - var message = - "`no url provided, fetching image from:`\n" + - "https://spee.ch/" + - imagename; + var message = '`no url provided, fetching image from:`\n' + 'https://spee.ch/' + imagename; msg.channel.send(message); return; } @@ -87,16 +79,14 @@ exports.speech = { var linkvalid = url.slice(0, 4); //check of url provided begins with http in not throw error and help message - if (linkvalid !== "http") { - if (FullDebug === "true") { - var message = - "`error not a valid url, please start with http or https`"; - console.log("invalid url provided: " + filepath); + if (linkvalid !== 'http') { + if (FullDebug === 'true') { + var message = '`error not a valid url, please start with http or https`'; + console.log('invalid url provided: ' + filepath); msg.channel.send(message); return; } else { - var message = - "`error not a valid url, please start with http or https`"; + var message = '`error not a valid url, please start with http or https`'; msg.channel.send(message); return; } @@ -105,13 +95,13 @@ exports.speech = { //function to check if url is an image var isUriImage = function(uri) { //make sure we remove any nasty GET params - uri = uri.split("?")[0]; + uri = uri.split('?')[0]; //moving on, split the uri into parts that had dots before them - var parts = uri.split("."); + var parts = uri.split('.'); //get the last part ( should be the extension ) var extension = parts[parts.length - 1]; //define some image types to test against - var imageTypes = ["jpg", "jpeg", "tiff", "png", "gif", "bmp"]; + var imageTypes = ['jpg', 'jpeg', 'tiff', 'png', 'gif', 'bmp']; //check if the extension matches anything in the list. if it does set true if not set false if (imageTypes.indexOf(extension) !== -1) { return true; @@ -122,15 +112,13 @@ exports.speech = { //check if url is an image if its not throw error and help message if (isUriImage(url) === false) { - if (FullDebug === "true") { - var message = - "`error not a valid image url, be sure the link includes a file type`"; - console.log("invalid url provided: " + url); + if (FullDebug === 'true') { + var message = '`error not a valid image url, be sure the link includes a file type`'; + console.log('invalid url provided: ' + url); msg.channel.send(message); return; } else { - var message = - "`error not a valid image url, be sure the link includes a file type`"; + var message = '`error not a valid image url, be sure the link includes a file type`'; msg.channel.send(message); return; } @@ -139,49 +127,40 @@ exports.speech = { var eighteen = words[2]; //check is NSFW if yes or no sets proper value if none - if ( - eighteen == "" || - eighteen == "none" || - eighteen == undefined || - eighteen == null || - eighteen == "no" || - eighteen == "false" || - eighteen == false || - eighteen == "n" - ) { - eighteen = "no"; + if (eighteen == '' || eighteen == 'none' || eighteen == undefined || eighteen == null || eighteen == 'no' || eighteen == 'false' || eighteen == false || eighteen == 'n') { + eighteen = 'no'; } else { - eighteen = "yes"; + eighteen = 'yes'; } //prepare url for wget var source = url; //parse the filename to use to save file - filepath = source.split("/").pop(); + filepath = source.split('/').pop(); //set proper directory for downloading image - var outputFile = "speech-uploads/" + filepath; + var outputFile = 'speech-uploads/' + filepath; //set download directory to current working directory var dir = process.cwd(); //set full path to directory for speech uploading - var fullpath = dir + "\\speech-uploads\\" + filepath; + var fullpath = dir + '\\speech-uploads\\' + filepath; //download url via wget var download = wget.download(url, outputFile); //check if url is reachable if not throw error - download.on("error", function(err) { - if (FullDebug === "true") { - console.log("error could not reach: " + url + " : " + err); - var message = "`error url could not be reached`"; + download.on('error', function(err) { + if (FullDebug === 'true') { + console.log('error could not reach: ' + url + ' : ' + err); + var message = '`error url could not be reached`'; msg.channel.send(message); return; } else { - var message = "`error url could not be reached`"; + var message = '`error url could not be reached`'; msg.channel.send(message); return; } }); - download.on("end", output => { + download.on('end', output => { //if no errors and file ready -> do the request output && doSteps(bot, imagename, url, eighteen); }); @@ -191,17 +170,17 @@ exports.speech = { function doHelp(bot, msg, suffix) { msg.channel.send({ embed: { - title: "", + title: '', description: - "**!speech ``** : *displays top claim on speech* \n\n\n" + - "**COMING SOON POSTING TO SPEECH** \n\n" + - "**!speech ` `** : *Uploads Image URL to Spee.ch* \n" + - "**NOTE : dont include spaces in name (NSFW is optional true/false, if left blank will default to false)** \n" + - "EXAMPLE : `!speech my-image-name https://url/to/image.png false`", + '**!speech ``** : *displays top claim on speech* \n\n\n' + + '**COMING SOON POSTING TO SPEECH** \n\n' + + '**!speech ` `** : *Uploads Image URL to Spee.ch* \n' + + '**NOTE : dont include spaces in name (NSFW is optional true/false, if left blank will default to false)** \n' + + 'EXAMPLE : `!speech my-image-name https://url/to/image.png false`', color: 7976557, author: { - name: "Speech Bot Help", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Speech Bot Help', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); @@ -211,7 +190,7 @@ exports.speech = { function doSteps(bot, imagename, url, eighteen) { request.post( //url to send post request - "https://spee.ch/api/publish", + 'https://spee.ch/api/publish', //json payload { json: { @@ -223,7 +202,7 @@ exports.speech = { //get response from server function(error, response, body) { //output response if ResponseDebug set to true - if (ResponseDebug === "true") { + if (ResponseDebug === 'true') { console.log(response); console.log(error); console.log(body.success); @@ -231,59 +210,36 @@ exports.speech = { } //check speech response for file path error, if found throw internal error! - if (body.message === "no files found in request") { - if (FullDebug === "true") { - console.log("no file found: " + fullpath); - var message = - "`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists"; + if (body.message === 'no files found in request') { + if (FullDebug === 'true') { + console.log('no file found: ' + fullpath); + var message = '`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists'; msg.channel.send(message); return; } else { - var message = - "`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists"; + var message = '`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists'; msg.channel.send(message); return; } } //check speech response for filename error, if found throw internal error! - if (body.message === "no name field found in request") { - if (FullDebug === "true") { - console.log("no name field found: " + imagename); - var message = - "`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists"; + if (body.message === 'no name field found in request') { + if (FullDebug === 'true') { + console.log('no name field found: ' + imagename); + var message = '`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists'; msg.channel.send(message); return; } else { - var message = - "`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists"; + var message = '`Failed to upload file internally!!`\n please contact <@244245498746241025> or another moderator if the issue persists'; msg.channel.send(message); return; } } //if no errors post this message - var message = - 'uploading... \n "name":"' + - imagename + - '",\n "URL": "' + - url + - '",\n "nsfw":"' + - eighteen + - '"\n to spee.ch'; - console.log( - 'uploading... \n "name":"' + - imagename + - '",\n "file name": "' + - filepath + - '",\n "url":"' + - url + - '"\n "path":"' + - fullpath + - '"\n "nsfw": "' + - eighteen + - '"' - ); + var message = 'uploading... \n "name":"' + imagename + '",\n "URL": "' + url + '",\n "nsfw":"' + eighteen + '"\n to spee.ch'; + console.log('uploading... \n "name":"' + imagename + '",\n "file name": "' + filepath + '",\n "url":"' + url + '"\n "path":"' + fullpath + '"\n "nsfw": "' + eighteen + '"'); msg.channel.send(message); } ); diff --git a/bot/modules/stats.js b/bot/modules/stats.js index bbfed25..0f6f4b8 100644 --- a/bot/modules/stats.js +++ b/bot/modules/stats.js @@ -1,152 +1,143 @@ -let jp = require("jsonpath"); -let moment = require("moment"); -let numeral = require("numeral"); -let request = require("request"); -let config = require("config"); -let needle = require("needle"); -let hasStatsBotChannels = require("../helpers.js").hasStatsBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("statsbot").mainchannel; -let statsurl = "https://coinmarketcap.com/currencies/library-credit/"; +let jp = require('jsonpath'); +let moment = require('moment'); +let numeral = require('numeral'); +let request = require('request'); +let config = require('config'); +let needle = require('needle'); +let hasStatsBotChannels = require('../helpers.js').hasStatsBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('statsbot').mainchannel; +let statsurl = 'https://coinmarketcap.com/currencies/library-credit/'; exports.commands = [ - "stats" // command that is in this file, every command needs it own export as shown below + 'stats' // command that is in this file, every command needs it own export as shown below ]; exports.stats = { - usage: "", - description: "Displays list of current Market stats", + usage: '', + description: 'Displays list of current Market stats', process: function(bot, msg) { - needle.get( - "https://api.coinmarketcap.com/v1/ticker/library-credit/", - function(error, response) { - if (error || response.statusCode !== 200) { - msg.channel.send("coinmarketcap API is not available"); - } else { - var data = response.body[0]; - var rank = data.rank; - var price_usd = Number(data.price_usd); - var price_btc = Number(data.price_btc); - var market_cap_usd = Number(data.market_cap_usd); - var available_supply = Number(data.available_supply); - var total_supply = Number(data.total_supply); - var percent_change_1h = Number(data.percent_change_1h); - var percent_change_24h = Number(data.percent_change_24h); - var json = response.body[0]; - var newjson = parse_obj(json); - var parse = JSON.stringify(newjson); - var volume24_usd = parse.replace(/[^0-9]/g, ""); - var dt = new Date(); - var timestamp = dt.toUTCString(); - var hr_indicator = ":thumbsup:"; - var day_indicator = ":thumbsup:"; - if (percent_change_1h < 0) { - hr_indicator = ":thumbsdown:"; - } - if (percent_change_24h < 0) { - day_indicator = ":thumbsdown:"; - } + needle.get('https://api.coinmarketcap.com/v1/ticker/library-credit/', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('coinmarketcap API is not available'); + } else { + var data = response.body[0]; + var rank = data.rank; + var price_usd = Number(data.price_usd); + var price_btc = Number(data.price_btc); + var market_cap_usd = Number(data.market_cap_usd); + var available_supply = Number(data.available_supply); + var total_supply = Number(data.total_supply); + var percent_change_1h = Number(data.percent_change_1h); + var percent_change_24h = Number(data.percent_change_24h); + var json = response.body[0]; + var newjson = parse_obj(json); + var parse = JSON.stringify(newjson); + var volume24_usd = parse.replace(/[^0-9]/g, ''); + var dt = new Date(); + var timestamp = dt.toUTCString(); + var hr_indicator = ':thumbsup:'; + var day_indicator = ':thumbsup:'; + if (percent_change_1h < 0) { + hr_indicator = ':thumbsdown:'; + } + if (percent_change_24h < 0) { + day_indicator = ':thumbsdown:'; + } - needle.get( - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=GBP", - function(error, response) { + needle.get('https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=GBP', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('coinmarketcap API is not available'); + } else { + var data = response.body[0]; + var price_gbp = Number(data.price_gbp); + needle.get('https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=EUR', function(error, response) { if (error || response.statusCode !== 200) { - msg.channel.send("coinmarketcap API is not available"); + msg.channel.send('coinmarketcap API is not available'); } else { var data = response.body[0]; - var price_gbp = Number(data.price_gbp); - needle.get( - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=EUR", - function(error, response) { - if (error || response.statusCode !== 200) { - msg.channel.send("coinmarketcap API is not available"); - } else { - var data = response.body[0]; - var price_eur = Number(data.price_eur); - description = - "**Rank: [" + - rank + - "](" + - statsurl + - ")**\n" + - "**Data**\n" + - "Market Cap: [$" + - numberWithCommas(market_cap_usd) + - "](" + - statsurl + - ") \n" + - "Total Supply: [" + - numberWithCommas(total_supply) + - " LBC](" + - statsurl + - ")\n" + - "Circulating Supply: [" + - numberWithCommas(available_supply) + - " LBC](" + - statsurl + - ")\n" + - "24 Hour Volume: [$" + - volume24_usd + - "](" + - statsurl + - ") \n\n" + - "**Price**\n" + - "BTC: [₿" + - price_btc.toFixed(8) + - "](" + - statsurl + - ")\n" + - "USD: [$" + - price_usd.toFixed(2) + - "](" + - statsurl + - ") \n" + - "EUR: [€" + - price_eur.toFixed(2) + - "](" + - statsurl + - ") \n" + - "GBP: [£" + - price_gbp.toFixed(2) + - "](" + - statsurl + - ") \n\n" + - "**% Change**\n" + - "1 Hour: [" + - percent_change_1h + - "](" + - statsurl + - ") " + - hr_indicator + - " \n\n" + - "1 Day: [" + - percent_change_24h + - "](" + - statsurl + - ") " + - day_indicator + - " \n\n"; - const embed = { - description: description, - color: 7976557, - footer: { - text: "Last Updated: " + timestamp - }, - author: { - name: "Coin Market Cap Stats (LBC)", - url: statsurl, - icon_url: "https://i.imgur.com/yWf5USu.png" - } - }; - msg.channel.send({ embed }); - } + var price_eur = Number(data.price_eur); + description = + '**Rank: [' + + rank + + '](' + + statsurl + + ')**\n' + + '**Data**\n' + + 'Market Cap: [$' + + numberWithCommas(market_cap_usd) + + '](' + + statsurl + + ') \n' + + 'Total Supply: [' + + numberWithCommas(total_supply) + + ' LBC](' + + statsurl + + ')\n' + + 'Circulating Supply: [' + + numberWithCommas(available_supply) + + ' LBC](' + + statsurl + + ')\n' + + '24 Hour Volume: [$' + + volume24_usd + + '](' + + statsurl + + ') \n\n' + + '**Price**\n' + + 'BTC: [₿' + + price_btc.toFixed(8) + + '](' + + statsurl + + ')\n' + + 'USD: [$' + + price_usd.toFixed(2) + + '](' + + statsurl + + ') \n' + + 'EUR: [€' + + price_eur.toFixed(2) + + '](' + + statsurl + + ') \n' + + 'GBP: [£' + + price_gbp.toFixed(2) + + '](' + + statsurl + + ') \n\n' + + '**% Change**\n' + + '1 Hour: [' + + percent_change_1h + + '](' + + statsurl + + ') ' + + hr_indicator + + ' \n\n' + + '1 Day: [' + + percent_change_24h + + '](' + + statsurl + + ') ' + + day_indicator + + ' \n\n'; + const embed = { + description: description, + color: 7976557, + footer: { + text: 'Last Updated: ' + timestamp + }, + author: { + name: 'Coin Market Cap Stats (LBC)', + url: statsurl, + icon_url: 'https://i.imgur.com/yWf5USu.png' } - ); + }; + msg.channel.send({ embed }); } - } - ); - } + }); + } + }); } - ); + }); function parse_obj(obj) { var array = []; var prop; @@ -154,7 +145,7 @@ exports.stats = { if (obj.hasOwnProperty(prop)) { var key = parseInt(prop, 10); var value = obj[prop]; - if (typeof value == "object") { + if (typeof value == 'object') { value = parse_obj(value); } array[key] = value; @@ -163,7 +154,7 @@ exports.stats = { return array; } function numberWithCommas(x) { - return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } } }; diff --git a/bot/modules/supportbot.js b/bot/modules/supportbot.js index a7dfb9e..d0938e1 100644 --- a/bot/modules/supportbot.js +++ b/bot/modules/supportbot.js @@ -1,35 +1,35 @@ -"use strict"; +'use strict'; //let config = require("config"); //let rolelist = config.get("rolelist"); -const Discord = require("discord.js"); +const Discord = require('discord.js'); let initialized = false; let discordBot = null; module.exports = { - init: init + init: init }; function init(discordBot_) { - if (initialized) { - throw new Error("init was already called once"); - } + if (initialized) { + throw new Error('init was already called once'); + } - discordBot = discordBot_; + discordBot = discordBot_; - discordBot.on("message", checkForCommand); + discordBot.on('message', checkForCommand); } /** * * @param {String} message */ -let checkForCommand = function (message) { - //if the close command is found - if (!message.author.bot && message.content.toLowerCase().indexOf('!close') >= 0) { - //send the -close command twice with a 4 seconds timeout - message.channel.send("-close").catch(console.error); - setTimeout(() => { - message.channel.send("-close").catch(console.error); - }, 4000); - } -}; \ No newline at end of file +let checkForCommand = function(message) { + //if the close command is found + if (!message.author.bot && message.content.toLowerCase().indexOf('!close') >= 0) { + //send the -close command twice with a 4 seconds timeout + message.channel.send('-close').catch(console.error); + setTimeout(() => { + message.channel.send('-close').catch(console.error); + }, 4000); + } +}; diff --git a/bot/modules/tipfix.js b/bot/modules/tipfix.js index 38e0f4d..02f4fa2 100644 --- a/bot/modules/tipfix.js +++ b/bot/modules/tipfix.js @@ -1,9 +1,8 @@ -"use strict"; -exports.commands = ["tip"]; +'use strict'; +exports.commands = ['tip']; exports.tip = { - usage: "", - description: - "balance: get your balance\n deposit: get address for your deposits\n withdraw ADDRESS AMOUNT: withdraw AMOUNT credits to ADDRESS\n : mention a user with @ and then the amount to tip them", + usage: '', + description: 'balance: get your balance\n deposit: get address for your deposits\n withdraw ADDRESS AMOUNT: withdraw AMOUNT credits to ADDRESS\n : mention a user with @ and then the amount to tip them', process: function(bot) { return; // Tipping is now handled by the separate tipbot(in branch tipbot_dc), no need to to anything here... } diff --git a/bot/modules/welcome.js b/bot/modules/welcome.js index a3456a1..bea5e18 100644 --- a/bot/modules/welcome.js +++ b/bot/modules/welcome.js @@ -1,99 +1,98 @@ -let hasPerms = require("../helpers.js").hasPerms; -let inPrivate = require("../helpers.js").inPrivate; +let hasPerms = require('../helpers.js').hasPerms; +let inPrivate = require('../helpers.js').inPrivate; -exports.custom = ["onUserJoin"]; +exports.custom = ['onUserJoin']; exports.onUserJoin = function(bot) { - bot.on("guildMemberAdd", member => { + bot.on('guildMemberAdd', member => { member.send({ embed: { - title: "*Click here for more info about LBRY!*", + title: '*Click here for more info about LBRY!*', description: - "**Welcome to LBRY Discord Community, you are now officially a LBRYian!** \n" + - "If you are new to LBRY and would like to learn more, see the links at the end of this message. \n" + - "This community allows LBRYians to interact with the team directly and for us to engage users in order to grow the LBRY platform! \n" + - "**Looking for *Rewards Verification*? Please make a request in the #verification channel by typing **-new** - this will create a ticket (channel) for your request. A mod will reach out to you, please be patient . **Note: DO NOT message any team members or post in other channels about verification concerns.**. Only 1 Reward account is allowed per household** \n", - url: "https://lbry.io/what", + '**Welcome to LBRY Discord Community, you are now officially a LBRYian!** \n' + + 'If you are new to LBRY and would like to learn more, see the links at the end of this message. \n' + + 'This community allows LBRYians to interact with the team directly and for us to engage users in order to grow the LBRY platform! \n' + + '**Looking for *Rewards Verification*? Please make a request in the #verification channel by typing **-new** - this will create a ticket (channel) for your request. A mod will reach out to you, please be patient . **Note: DO NOT message any team members or post in other channels about verification concerns.**. Only 1 Reward account is allowed per household** \n', + url: 'https://lbry.io/what', color: 7976557, author: { - name: "Welcome to LBRY Discord Community", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Welcome to LBRY Discord Community', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); member.send({ embed: { description: - "1. Be respectful to other community members. Harrasment and vulgarity will not be tolerated \n" + - "2. Do not spam, advertise or post referral links \n" + - "3. Use appropriate channels for your discussions/questions. If you are looking for help with LBRY, use #help, for price talk, use #market-and-trading \n" + - "4. #general discussions should be at least somewhat related to LBRY, otherwise there is #random \n" + - "5. Do not post **not safe for work (NFSW)** content in any non-marked channels, there is #random-nsfw for that \n" + - "6. Do not direct message and LBRY team or mods without being asked to do so \n" + - "7. Do not request free LBC, begging will not be tolerated \n", + '1. Be respectful to other community members. Harrasment and vulgarity will not be tolerated \n' + + '2. Do not spam, advertise or post referral links \n' + + '3. Use appropriate channels for your discussions/questions. If you are looking for help with LBRY, use #help, for price talk, use #market-and-trading \n' + + '4. #general discussions should be at least somewhat related to LBRY, otherwise there is #random \n' + + '5. Do not post **not safe for work (NFSW)** content in any non-marked channels, there is #random-nsfw for that \n' + + '6. Do not direct message and LBRY team or mods without being asked to do so \n' + + '7. Do not request free LBC, begging will not be tolerated \n', color: 7976557, author: { - name: "Ground rules", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Ground rules', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); member.send({ embed: { description: - "1. Type !tip help in the #bot-sandbox channel to interact with our Tipbot which can be used to send and receive LBRY Credits (LBC). **Enable 2FA in your Discord account settings!** \n" + - "2. See the Frequently Asked Questions (FAQ) section below prior to asking for help or information on LBRY \n" + - "3. Backing up your LBRY wallet is your responsbility, see FAQ link below \n" + - "4. You can find the LBRY Block explorer at https://explorer.lbry.io \n" + - "5. Want to contribute more? Check out https://lbry.io/faq/contributing \n" + - "6. Are you a dev? Check out the #dev channel \n" + - "7. Want to share something you published? Post it on the #publishers channel \n", + '1. Type !tip help in the #bot-sandbox channel to interact with our Tipbot which can be used to send and receive LBRY Credits (LBC). **Enable 2FA in your Discord account settings!** \n' + + '2. See the Frequently Asked Questions (FAQ) section below prior to asking for help or information on LBRY \n' + + '3. Backing up your LBRY wallet is your responsbility, see FAQ link below \n' + + '4. You can find the LBRY Block explorer at https://explorer.lbry.io \n' + + '5. Want to contribute more? Check out https://lbry.io/faq/contributing \n' + + '6. Are you a dev? Check out the #dev channel \n' + + '7. Want to share something you published? Post it on the #publishers channel \n', color: 7976557, author: { - name: "Helpful hints", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Helpful hints', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); member.send({ embed: { - title: "*Click here for more info about LBRY!*", + title: '*Click here for more info about LBRY!*', description: - "[**LBRY**](https://lbry.io) is a protocol providing fully decentralized network for the discovery, distribution, and payment of data. It utilizes the [**LBRY blockchain**](https://lbry.io/what#the-network) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, and rights and access rules. \n[_**Download the LBRY App here**_](https://lbry.io/get)", - url: "https://lbry.io/what", + '[**LBRY**](https://lbry.io) is a protocol providing fully decentralized network for the discovery, distribution, and payment of data. It utilizes the [**LBRY blockchain**](https://lbry.io/what#the-network) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, and rights and access rules. \n[_**Download the LBRY App here**_](https://lbry.io/get)', + url: 'https://lbry.io/what', color: 7976557, author: { - name: "What is LBRY?", - url: "https://lbry.io/what", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'What is LBRY?', + url: 'https://lbry.io/what', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); member.send({ embed: { - title: "*Click here to see all LBRY Frequently Asked Questions (FAQ)!*", + title: '*Click here to see all LBRY Frequently Asked Questions (FAQ)!*', description: - "Want to backup your LBRY wallet? [**Backup**](https://lbry.io/faq/how-to-backup-wallet) \nLooking for LBRY data? [**Behind the scenes files**](https://lbry.io/faq/lbry-directories) \nTrouble starting LBRY? [**Startup troubleshooting**](https://lbry.io/faq/startup-troubleshooting) \nNeed help finding your log files (will help us troubleshoot!)? [**Find logs**](https://lbry.io/faq/how-to-find-lbry-log-file) \nNot able to stream any content? [**Troublshoot streaming**](https://lbry.io/faq/unable-to-stream)\nNeed help with publishing? [**How to Publish**](https://lbry.io/faq/how-to-publish) \nWant more LBRY Credits (LBC)? [**Get LBC**](https://lbry.io/faq/earn-credits) \nLooking for referral information? [**Referrals**](https://lbry.io/faq/referrals)", - url: "https://lbry.io/faq", + 'Want to backup your LBRY wallet? [**Backup**](https://lbry.io/faq/how-to-backup-wallet) \nLooking for LBRY data? [**Behind the scenes files**](https://lbry.io/faq/lbry-directories) \nTrouble starting LBRY? [**Startup troubleshooting**](https://lbry.io/faq/startup-troubleshooting) \nNeed help finding your log files (will help us troubleshoot!)? [**Find logs**](https://lbry.io/faq/how-to-find-lbry-log-file) \nNot able to stream any content? [**Troublshoot streaming**](https://lbry.io/faq/unable-to-stream)\nNeed help with publishing? [**How to Publish**](https://lbry.io/faq/how-to-publish) \nWant more LBRY Credits (LBC)? [**Get LBC**](https://lbry.io/faq/earn-credits) \nLooking for referral information? [**Referrals**](https://lbry.io/faq/referrals)', + url: 'https://lbry.io/faq', color: 7976557, author: { - name: "LBRY FAQ", - url: "https://lbry.io/faq", - icon_url: "https://spee.ch/8/Id5Qoc3w.png" + name: 'LBRY FAQ', + url: 'https://lbry.io/faq', + icon_url: 'https://spee.ch/8/Id5Qoc3w.png' } } }); member.send({ embed: { - title: "*Have you checked out spee.ch yet?!*", + title: '*Have you checked out spee.ch yet?!*', description: "[**spee.ch**](https://spee.ch) runs on top of the LBRY network - it's essentially an open source, censorship resistent and decentralized image and video sharing site with the added benefit of being a web-based (works on mobile too!) gateway into the LBRY network. spee.ch can be used to retrieve LBRY images/videos that are free by accessing them through a web browser. \nFor example, if content is located at lbry://loose-cannons-episode1#12c87bb42dd8832167b1e54edf72bbd37bc47622, you can view it on spee.ch at: https://spee.ch/12c87bb42dd8832167b1e54edf72bbd37bc47622/loose-cannons-episode1. You can also view channels on spee.ch, such as: https://spee.ch/@copchronicles:5c039dc7423657e59d78939df72c186e43273675 or https://spee.ch/@MinutePhysics:589276465a23c589801d874f484cc39f307d7ec7 \n\nspee.ch also allows you to create a channel to group your uploads and retreive them easily. These channels are separate from any you may have in the LBRY app since they exist on the spee.ch site via a login process. You can even share your channel name and password so that others can contribute to it.", - url: "https://spee.ch/about", + url: 'https://spee.ch/about', color: 7976557, author: { - name: "spee.ch", - url: "https://spee.ch", - icon_url: - "http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png" + name: 'spee.ch', + url: 'https://spee.ch', + icon_url: 'http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png' } } }); @@ -101,115 +100,114 @@ exports.onUserJoin = function(bot) { }; exports.commands = [ - "welcome" // command that is in this file, every command needs it own export as shown below + 'welcome' // command that is in this file, every command needs it own export as shown below ]; exports.welcome = { - usage: "<@username>", - description: "send welcome message to specified user", + usage: '<@username>', + description: 'send welcome message to specified user', process: function(bot, msg, suffix) { if (inPrivate(msg)) { - msg.channel.send("command cannot be used in a DM"); + msg.channel.send('command cannot be used in a DM'); return; } - if (suffix == "") { - msg.channel.send("no user defined"); + if (suffix == '') { + msg.channel.send('no user defined'); return; } if (!hasPerms(msg)) { - msg.channel.send("You Dont Have Permission To Use This Command!"); + msg.channel.send('You Dont Have Permission To Use This Command!'); return; } msg.mentions.members.first().send({ embed: { - title: "*Click here for more info about LBRY!*", + title: '*Click here for more info about LBRY!*', description: - "**Welcome to LBRY Discord Community, you are now officially a LBRYian!** \n" + - "If you are new to LBRY and would like to learn more, see the links at the end of this message. \n" + - "This community allows LBRYians to interact with the team directly and for us to engage users in order to grow the LBRY platform! \n" + - "**Looking for *Rewards Verification*? Please make a request in the #verification channel by typing **-new** - this will create a ticket (channel) for your request. A mod will reach out to you, please be patient, **Note: DO NOT message any team members or post in other channels about verification concerns.**. Only 1 Reward account is allowed per household** \n", - url: "https://lbry.io/what", + '**Welcome to LBRY Discord Community, you are now officially a LBRYian!** \n' + + 'If you are new to LBRY and would like to learn more, see the links at the end of this message. \n' + + 'This community allows LBRYians to interact with the team directly and for us to engage users in order to grow the LBRY platform! \n' + + '**Looking for *Rewards Verification*? Please make a request in the #verification channel by typing **-new** - this will create a ticket (channel) for your request. A mod will reach out to you, please be patient, **Note: DO NOT message any team members or post in other channels about verification concerns.**. Only 1 Reward account is allowed per household** \n', + url: 'https://lbry.io/what', color: 7976557, author: { - name: "Welcome to LBRY Discord Community", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Welcome to LBRY Discord Community', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); msg.mentions.members.first().send({ embed: { description: - "1. Be respectful to other community members. Harrasment and vulgarity will not be tolerated \n" + - "2. Do not spam, advertise or post referral links \n" + - "3. Use appropriate channels for your discussions/questions. If you are looking for help with LBRY, use #help, for price talk, use #market-and-trading \n" + - "4. #general discussions should be at least somewhat related to LBRY, otherwise there is #random \n" + - "5. Do not post **not safe for work (NFSW)** content in any non-marked channels, there is #random-nsfw for that \n" + - "6. Do not direct message and LBRY team or mods without being asked to do so \n" + - "7. Do not request free LBC, begging will not be tolerated \n", + '1. Be respectful to other community members. Harrasment and vulgarity will not be tolerated \n' + + '2. Do not spam, advertise or post referral links \n' + + '3. Use appropriate channels for your discussions/questions. If you are looking for help with LBRY, use #help, for price talk, use #market-and-trading \n' + + '4. #general discussions should be at least somewhat related to LBRY, otherwise there is #random \n' + + '5. Do not post **not safe for work (NFSW)** content in any non-marked channels, there is #random-nsfw for that \n' + + '6. Do not direct message and LBRY team or mods without being asked to do so \n' + + '7. Do not request free LBC, begging will not be tolerated \n', color: 7976557, author: { - name: "Ground rules", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Ground rules', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); msg.mentions.members.first().send({ embed: { description: - "1. Type !tip help in the #bot-sandbox channel to interact with our Tipbot which can be used to send and receive LBRY Credits (LBC). **Enable 2FA in your Discord account settings!** \n" + - "2. See the Frequently Asked Questions (FAQ) section below prior to asking for help or information on LBRY \n" + - "3. Backing up your LBRY wallet is your responsbility, see FAQ link below \n" + - "4. You can find the LBRY Block explorer at https://explorer.lbry.io \n" + - "5. Want to contribute more? Check out https://lbry.io/faq/contributing \n" + - "6. Are you a dev? Check out the #dev channel \n" + - "7. Want to share something you published? Post it on the #publishers channel \n", + '1. Type !tip help in the #bot-sandbox channel to interact with our Tipbot which can be used to send and receive LBRY Credits (LBC). **Enable 2FA in your Discord account settings!** \n' + + '2. See the Frequently Asked Questions (FAQ) section below prior to asking for help or information on LBRY \n' + + '3. Backing up your LBRY wallet is your responsbility, see FAQ link below \n' + + '4. You can find the LBRY Block explorer at https://explorer.lbry.io \n' + + '5. Want to contribute more? Check out https://lbry.io/faq/contributing \n' + + '6. Are you a dev? Check out the #dev channel \n' + + '7. Want to share something you published? Post it on the #publishers channel \n', color: 7976557, author: { - name: "Helpful hints", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'Helpful hints', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); msg.mentions.members.first().send({ embed: { - title: "*Click here for more info about LBRY!*", + title: '*Click here for more info about LBRY!*', description: - "[**LBRY**](https://lbry.io) is a protocol providing fully decentralized network for the discovery, distribution, and payment of data. It utilizes the [**LBRY blockchain**](https://lbry.io/what#the-network) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, and rights and access rules. \n[_**Download the LBRY App here**_](https://lbry.io/get)", - url: "https://lbry.io/what", + '[**LBRY**](https://lbry.io) is a protocol providing fully decentralized network for the discovery, distribution, and payment of data. It utilizes the [**LBRY blockchain**](https://lbry.io/what#the-network) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, and rights and access rules. \n[_**Download the LBRY App here**_](https://lbry.io/get)', + url: 'https://lbry.io/what', color: 7976557, author: { - name: "What is LBRY?", - url: "https://lbry.io/what", - icon_url: "https://i.imgur.com/yWf5USu.png" + name: 'What is LBRY?', + url: 'https://lbry.io/what', + icon_url: 'https://i.imgur.com/yWf5USu.png' } } }); msg.mentions.members.first().send({ embed: { - title: "*Click here to see all LBRY Frequently Asked Questions (FAQ)!*", + title: '*Click here to see all LBRY Frequently Asked Questions (FAQ)!*', description: - "Want to backup your LBRY wallet? [**Backup**](https://lbry.io/faq/how-to-backup-wallet) \nLooking for LBRY data? [**Behind the scenes files**](https://lbry.io/faq/lbry-directories) \nTrouble starting LBRY? [**Startup troubleshooting**](https://lbry.io/faq/startup-troubleshooting) \nNeed help finding your log files (will help us troubleshoot!)? [**Find logs**](https://lbry.io/faq/how-to-find-lbry-log-file) \nNot able to stream any content? [**Troublshoot streaming**](https://lbry.io/faq/unable-to-stream)\nNeed help with publishing? [**How to Publish**](https://lbry.io/faq/how-to-publish) \nWant more LBRY Credits (LBC)? [**Get LBC**](https://lbry.io/faq/earn-credits) \nLooking for referral information? [**Referrals**](https://lbry.io/faq/referrals)", - url: "https://lbry.io/faq", + 'Want to backup your LBRY wallet? [**Backup**](https://lbry.io/faq/how-to-backup-wallet) \nLooking for LBRY data? [**Behind the scenes files**](https://lbry.io/faq/lbry-directories) \nTrouble starting LBRY? [**Startup troubleshooting**](https://lbry.io/faq/startup-troubleshooting) \nNeed help finding your log files (will help us troubleshoot!)? [**Find logs**](https://lbry.io/faq/how-to-find-lbry-log-file) \nNot able to stream any content? [**Troublshoot streaming**](https://lbry.io/faq/unable-to-stream)\nNeed help with publishing? [**How to Publish**](https://lbry.io/faq/how-to-publish) \nWant more LBRY Credits (LBC)? [**Get LBC**](https://lbry.io/faq/earn-credits) \nLooking for referral information? [**Referrals**](https://lbry.io/faq/referrals)', + url: 'https://lbry.io/faq', color: 7976557, author: { - name: "LBRY FAQ", - url: "https://lbry.io/faq", - icon_url: "https://spee.ch/8/Id5Qoc3w.png" + name: 'LBRY FAQ', + url: 'https://lbry.io/faq', + icon_url: 'https://spee.ch/8/Id5Qoc3w.png' } } }); msg.mentions.members.first().send({ embed: { - title: "*Have you checked out spee.ch yet?!*", + title: '*Have you checked out spee.ch yet?!*', description: "[**spee.ch**](https://spee.ch) runs on top of the LBRY network - it's essentially an open source, censorship resistent and decentralized image and video sharing site with the added benefit of being a web-based (works on mobile too!) gateway into the LBRY network. spee.ch can be used to retrieve LBRY images/videos that are free by accessing them through a web browser. \nFor example, if content is located at lbry://loose-cannons-episode1#12c87bb42dd8832167b1e54edf72bbd37bc47622, you can view it on spee.ch at: https://spee.ch/12c87bb42dd8832167b1e54edf72bbd37bc47622/loose-cannons-episode1. You can also view channels on spee.ch, such as: https://spee.ch/@copchronicles:5c039dc7423657e59d78939df72c186e43273675 or https://spee.ch/@MinutePhysics:589276465a23c589801d874f484cc39f307d7ec7 \n\nspee.ch also allows you to create a channel to group your uploads and retreive them easily. These channels are separate from any you may have in the LBRY app since they exist on the spee.ch site via a login process. You can even share your channel name and password so that others can contribute to it.", - url: "https://spee.ch/about", + url: 'https://spee.ch/about', color: 7976557, author: { - name: "spee.ch", - url: "https://spee.ch", - icon_url: - "http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png" + name: 'spee.ch', + url: 'https://spee.ch', + icon_url: 'http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png' } } }); diff --git a/config/commands.json b/config/commands.json index bf9bcdc..09f72d7 100644 --- a/config/commands.json +++ b/config/commands.json @@ -1,690 +1,699 @@ { - "!helpcommands": { - "usage": "", - "description": "Displays Helpful Commands", - "operation": "none", - "bundle": { - "url": "", - "title": "", - "description": "filled at runtime", - "color": 7976557, - "author": { - "name": "List of Helpful LBRY Commands", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!what": { - "usage": "", - "description": "What is Lbry?", - "operation": "send", - "bundle": { - "url": "https://lbry.io/what", - "title": "*Click Here for more Info!*", - "description": "[**LBRY**](https://lbry.io) is a protocol providing fully decentralized network for the discovery, distribution, and payment of data. It utilizes the [**LBRY blockchain**](https://lbry.io/what#the-network) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, and rights and access rules. \n[_**Get the App here**_](https://lbry.io/get)", - "color": 7976557, - "author": { - "name": "What is LBRY?", - "url": "https://lbry.io/what", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!begging": { - "usage": "", - "description": "Dont Request Free Coins Message", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "**Please don't request free coins or invites, we have a strict policy against begging. Further offenses will result in removal from the chat.**", - "color": 7976557, - "author": { - "name": "BEGGING!", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!beta": { - "usage": "", - "description": "beta message", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Even though LBRY is in Open Beta, it's still beta software! There will be bugs and issues to be worked out, thanks for your patience!", - "color": 7976557, - "author": { - "name": "Open Beta", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!github": { - "usage": "", - "description": "Lbry Github", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "The official github for LBRY is [github.com/lbryio](https://github.com/lbryio)", - "color": 7976557, - "author": { - "name": "GitHub", - "url": "https://github.com/lbryio", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!appdownload": { - "usage": "", - "description": "LBRY-app Installers", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "**Installers for the LBRY Application are available for download** [**HERE**](https://lbry.io/get)", - "color": 7976557, - "author": { - "name": "Get The App", - "url": "http://lbry.io/get?auto=1", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!daemondownload": { - "usage": "", - "description": "LBRY Daemon Installers", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Installers for the LBRY Daemon are available for download [**HERE**](https://github.com/lbryio/lbry/releases)", - "color": 7976557, - "author": { - "name": "Daemon Download", - "url": "https://github.com/lbryio/lbry/releases", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!directories": { - "usage": "", - "description": "Lbry-app Directories", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "You can find details about the folders your LBRY files are stored in at [lbry.io/faq/lbry-directories](https://lbry.io/faq/lbry-directories)", - "color": 7976557, - "author": { - "name": "Directories", - "url": "https://lbry.io/faq/lbry-directories", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!faq": { - "usage": "", - "description": "LBRY F.A.Q.", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "These questions and many more have been answered on the [F.A.Q Page](https://lbry.io/faq/)", - "color": 7976557, - "author": { - "name": "F.A.Q", - "url": "https://lbry.io/faq/", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!contribute": { - "usage": "", - "description": "Contributing to LBRY", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Want to help develop and contribute to the Lbry Project?\nCheck out this **[GUIDE](https://lbry.io/faq/contributing)** that will get you startd.", - "color": 7976557, - "author": { - "name": "Contributing to LBRY", - "url": "https://lbry.io/faq/contributing", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!news": { - "usage": "", - "description": "LBRY inc. News Feed", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "check out the News Feed **[HERE](https://lbry.io/news)**.", - "color": 7976557, - "author": { - "name": "LBRY inc. News Feed", - "url": "https://lbry.io/news", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!name": { - "usage": "", - "description": "Change Name Message", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Hey, glad to see you love LBRY so much, but for the safety of our users we ask that you avoid using discord names that include the word lbry. This is to prevent impersonation and scams.", - "color": 7976557, - "author": { - "name": "Discord Username", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!mining": { - "usage": "", - "description": "Mining LBRY Credits (LBC)", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "We have a dedicated channel for mining discussion, feel free to join <#363049669636390913>, we have guides pinned in that channel to get you started mining some LBC!", - "color": 7976557, - "author": { - "name": "Mining", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!pricestance": { - "usage": "", - "description": "Our Stance on LBC Price", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Details about our stance on price can be found here: [lbry.io/news/acryptypical](https://lbry.io/news/acryptypical)", - "color": 7976557, - "author": { - "name": "CEO's Stance on Price", - "url": "https://lbry.io/news/acryptypical", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!youtuber": { - "usage": "", - "description": "Are you a Youtuber curious about LBRY?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Are you a Youtuber curious about LBRY? Have a look at [lbry.io/youtube](https://lbry.io/youtube)", - "color": 7976557, - "author": { - "name": "Are you a Youtuber?", - "url": "https://lbry.io/youtube", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!publish": { - "usage": "", - "description": "How To Publish on LBRY?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "We've created a small guide to help with the Publishing features of LBRY, check it out here: [lbry.io/faq/how-to-publish](https://lbry.io/faq/how-to-publish)", - "color": 7976557, - "author": { - "name": "How To Publish on LBRY?", - "url": "https://lbry.io/faq/how-to-publish", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!random": { - "usage": "", - "description": "Off-Topic Message", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please keep conversation on topic, or move random conversations to #363084227518136322 if you wish to continue", - "color": 7976557, - "author": { - "name": "Random", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!naming": { - "usage": "", - "description": "How does LBRY naming work?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Names exist so that we can map a human readable and understandable word or term to a more difficult to remember number or ID. In the traditional domain system, names map to numerical IP addresses. In LBRY, names map to a unique, permanent ID representing a piece of digital content and/or a publisher identity. Learn more **[HERE](https://lbry.io/faq/naming)**", - "color": 7976557, - "author": { - "name": "How does LBRY naming work?", - "url": "https://lbry.io/faq/naming", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!bounty": { - "usage": "", - "description": "LBRY Bounties", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "You can earn LBRY Credits for completing tasks as part of the LBRY Bounty Program, All bounties can be seen on the **[Bounty Home Page](https://lbry.io/bounty)**.\nBounties range from simple typo fixes to third party applications and custom projects!", - "color": 7976557, - "author": { - "name": "LBRY Bounties", - "url": "https://lbry.io/bounty", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!roadmap": { - "usage": "", - "description": "The Lbry RoadMap", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Check Out The **[RoadMap](https://lbry.io/roadmap)**, it only outlines past and anticipated technical changes, it does not cover other initiatives. Development was fast and furious among a small group prior to 0.6, and release notes are sparse.", - "color": 7976557, - "author": { - "name": "RoadMap", - "url": "https://lbry.io/roadmap", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!referrals": { - "usage": "", - "description": "What are Referrals?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see [lbry.io/faq/referrals](https://lbry.io/faq/referrals) - referral redemptions are currently in test mode and limited to one. But you can see your entire referral history in your LBRY app.", - "color": 7976557, - "author": { - "name": "Referrals", - "url": "https://lbry.io/faq/referrals", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!rewards": { - "usage": "", - "description": "What are Rewards?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "[Rewards](https://lbry.io/faq/rewards) are given to legitimate users who are using the system (and in turn are testing things for us). In order to redeem rewards, you may need to verify your identity through a Credit Card or other manual methods.\n Please see [lbry.io/faq/identity-requirements](https://lbry.io/faq/identity-requirements)", - "color": 7976557, - "author": { - "name": "Rewards", - "url": "https://lbry.io/faq/rewards", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!rewardsvsreferrals": { - "usage": "", - "description": "What the Difference Between Rewards & Referrals?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Rewards are different to referral bonuses. Rewards are given for testing the LBRY software and system. Referrals are given for sharing LBRY with the masses.", - "color": 7976557, - "author": { - "name": "Rewards Vs. Referrals", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!cc": { - "usage": "", - "description": "Credit Card Verification?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "In an effort to limit abuse, newly invited LBRY users will be required to verify their identity via a Credit Card or by a manual verification process in order to be eligible for Rewards. Prepaid or Virtual credit cards are disallowed. Certain countries (where we've previously seen abuse) are being denied, but that list may expand later on. If you use Tor/Proxy/VPN, you also may be denied. If credit card verification does not work for you, please go to the <#363050496023592961> channel for assistance.\n**Verification is purely optional and ONLY relevant for Rewards, the app can be used without providing CC information**\n**Please See:https://lbry.io/faq/identity-requirements**", - "color": 7976557, - "author": { - "name": "Credit Card Verification", - "url": "https://lbry.io/faq/identity-requirements", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!verify": { - "usage": "", - "description": "How to Verify?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please download the latest version from [HERE](https://lbry.io/get) Upon install, you'll be greeted with a welcome message. If you already had the App installed, then go to the wallet (bank icon in the top right) > Rewards - this should show your current status. New users will need to verify in order to access rewards. Type !cc or !verification for more information.", - "color": 7976557, - "author": { - "name": "How To Verify?", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!verification": { - "usage": "", - "description": "Verification Help Message", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "If you would like to be verified go to <#363050496023592961> and type *`-new`* \nthis will create a ticket (channel) for your request. A LBRY mod will get back to you as soon as possible. We appreciate your patience. Only one account per household is allowed access to LBRY Rewards. Check out our [YouTube Sync FAQ](https://lbry.io/faq/youtube) for assistance with the YouTube Sync rewards verification method.", - "color": 7976557, - "author": { - "name": "Rewards Verification", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!logfile":{ - "usage": "", - "description": "How to find LBRY-app Log File?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "You can find your log files by following the guide [HERE](https://lbry.io/faq/how-to-find-lbry-log-file)", - "color": 7976557, - "author": { - "name": "How to find my LogFile?", - "url": "https://lbry.io/faq/how-to-find-lbry-log-file", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!backup": { - "usage": "", - "description": "How to Backup the Wallet", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see this guide on how to backup your wallet: [lbry.io/faq/how-to-backup-wallet](https://lbry.io/faq/how-to-backup-wallet)", - "color": 7976557, - "author": { - "name": "How to Backup my Wallet?", - "url": "https://lbry.io/faq/how-to-backup-wallet", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!startup": { - "usage": "", - "description": "Startup Troubleshooting?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see [lbry.io/faq/startup-troubleshooting](https://lbry.io/faq/startup-troubleshooting) if you are having trouble getting LBRY to start correctly.", - "color": 7976557, - "author": { - "name": "Startup Troubleshooting", - "url": "https://lbry.io/faq/startup-troubleshooting", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!streamingissues": { - "usage": "", - "description": "Unable To Stream?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see [lbry.io/faq/unable-to-stream](https://lbry.io/faq/unable-to-stream) if you are experiencing problems viewing **ANY** LBRY content.", - "color": 7976557, - "author": { - "name": "Streaming Troubleshooting", - "url": "https://lbry.io/faq/unable-to-stream", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!ports": { - "usage": "", - "description": "LBRY Ports", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "The daemon uses ports **3333** and **4444**. It may interfere with mining software, Start the miner after the app and you should be okay. Also these ports need to be port forwarded on your router. Google is your friend there. \n **Please see this tutorial on how to change ports : [lbry.io/faq/how-to-change-port](https://lbry.io/faq/how-to-change-port)**", - "color": 7976557, - "author": { - "name": "Ports", - "url": "https://lbry.io/faq/how-to-change-port", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!migrate":{ - "usage": "", - "description": "How to Migrate your Wallet/Data", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see [lbry.io/faq/backup-data](https://lbry.io/faq/backup-data) for instructions on how to backup and/or migrate your LBRY data", - "color": 7976557, - "author": { - "name": "How To Backup/Migrate LBRY Data?", - "url": "https://lbry.io/faq/backup-data", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!tipping": { - "usage": "", - "description": "Details About LBRY-app Tipping", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see [lbry.io/faq/tipping](https://lbry.io/faq/tipping) for details about tipping in the LBRY-App", - "color": 7976557, - "author": { - "name": "LBRY-App Tipping?", - "url": "https://lbry.io/faq/tipping", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!email": { - "usage": "", - "description": "How to change Email in LBRY-app?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "If you need to change your LBRY connected email, please see instructions [HERE](https://lbry.io/faq/how-to-change-email)", - "color": 7976557, - "author": { - "name": "LBRY-App Change connected E-mail?", - "url": "https://lbry.io/faq/how-to-change-email", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!cli": { - "usage": "", - "description": "How to interact with LBRY CLI?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "If you are interested in interacting with the LBRY protocol via commands, check out [lbry.io/faq/how-to-cli](https://lbry.io/faq/how-to-cli)", - "color": 7976557, - "author": { - "name": "Interact with the LBRY CLI", - "url": "https://lbry.io/faq/how-to-cli", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!ipfstorrent": { - "usage": "", - "description": "How is LBRY different from IPFS / BitTorrent?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "If you are interested in how LBRY is different from IPFS or BitTorrent, check out [lbry.io/faq/different-ipfs](https://lbry.io/faq/different-ipfs)", - "color": 7976557, - "author": { - "name": "How is LBRY different from IPFS / BitTorrent?", - "url": "https://lbry.io/faq/different-ipfs", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!shapeshift": { - "usage": "", - "description": "How can I convert my crypto into LBC?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see this guide on how to convert your crypto into LBC: [lbry.io/faq/shapeshift](https://lbry.io/faq/shapeshift)", - "color": 7976557, - "author": { - "name": "How can I convert my crypto into LBC?", - "url": "https://lbry.io/faq/shapeshift", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!youtube": { - "usage": "", - "description": "What is YouTube Sync?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see this guide on how youtube sync works, check out [lbry.io/faq/youtube](https://lbry.io/faq/youtube)", - "color": 7976557, - "author": { - "name": "What is YouTube Sync?", - "url": "https://lbry.io/faq/youtube", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!transactions": { - "usage": "", - "description": "What types of LBRY transactions are there?", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Please see this guide on [transaction types](https://lbry.io/faq/transaction-types)", - "color": 7976557, - "author": { - "name": "What types of LBRY transactions are there?", - "url": "https://lbry.io/faq/transaction-types", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!team": { - "usage": "", - "description": "Meet the Team!", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Get to know the [Offical Team](https://lbry.io/team) behind the scenes of lbry inc.", - "color": 7976557, - "author": { - "name": "Meet the Team!", - "url": "https://lbry.io/team", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!phone": { - "usage": "", - "description": "Phone Verification!", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description" : "[Phone number](https://lbry.io/faq/phone) verification provides another method for LBRY users to participate in the rewards program", - "color": 7976557, - "author": { - "name": "Phone Verification!", - "url": "https://lbry.io/faq/phone", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!basic": { - "usage": "", - "description": "LBRY App Basics!", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description" : "[LBRY App Basics](https://lbry.io/faq/lbry-basics) The purpose of this FAQ is to answer questions about some of the basic functionality available in the LBRY App", - "color": 7976557, - "author": { - "name": "LBRY App Basics!", - "url": "https://lbry.io/faq/lbry-basics", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!tipbot": { - "usage": "", - "description": "Tipbot Help Message", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": "Type `!tip help` to interact with our Tipbot which can be used to send and receive LBRY Credits (LBC). <#369896313082478594> should be used to talk to bots in order to avoid spamming other channels.", - "color": 7976557, - "author": { - "name": "Tipbot Help Message", - "url": "", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } + "!helpcommands": { + "usage": "", + "description": "Displays Helpful Commands", + "operation": "none", + "bundle": { + "url": "", + "title": "", + "description": "filled at runtime", + "color": 7976557, + "author": { + "name": "List of Helpful LBRY Commands", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } } + }, + "!what": { + "usage": "", + "description": "What is Lbry?", + "operation": "send", + "bundle": { + "url": "https://lbry.io/what", + "title": "*Click Here for more Info!*", + "description": + "[**LBRY**](https://lbry.io) is a protocol providing fully decentralized network for the discovery, distribution, and payment of data. It utilizes the [**LBRY blockchain**](https://lbry.io/what#the-network) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, and rights and access rules. \n[_**Get the App here**_](https://lbry.io/get)", + "color": 7976557, + "author": { + "name": "What is LBRY?", + "url": "https://lbry.io/what", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!begging": { + "usage": "", + "description": "Dont Request Free Coins Message", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "**Please don't request free coins or invites, we have a strict policy against begging. Further offenses will result in removal from the chat.**", + "color": 7976557, + "author": { + "name": "BEGGING!", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!beta": { + "usage": "", + "description": "beta message", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Even though LBRY is in Open Beta, it's still beta software! There will be bugs and issues to be worked out, thanks for your patience!", + "color": 7976557, + "author": { + "name": "Open Beta", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!github": { + "usage": "", + "description": "Lbry Github", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "The official github for LBRY is [github.com/lbryio](https://github.com/lbryio)", + "color": 7976557, + "author": { + "name": "GitHub", + "url": "https://github.com/lbryio", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!appdownload": { + "usage": "", + "description": "LBRY-app Installers", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "**Installers for the LBRY Application are available for download** [**HERE**](https://lbry.io/get)", + "color": 7976557, + "author": { + "name": "Get The App", + "url": "http://lbry.io/get?auto=1", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!daemondownload": { + "usage": "", + "description": "LBRY Daemon Installers", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Installers for the LBRY Daemon are available for download [**HERE**](https://github.com/lbryio/lbry/releases)", + "color": 7976557, + "author": { + "name": "Daemon Download", + "url": "https://github.com/lbryio/lbry/releases", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!directories": { + "usage": "", + "description": "Lbry-app Directories", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "You can find details about the folders your LBRY files are stored in at [lbry.io/faq/lbry-directories](https://lbry.io/faq/lbry-directories)", + "color": 7976557, + "author": { + "name": "Directories", + "url": "https://lbry.io/faq/lbry-directories", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!faq": { + "usage": "", + "description": "LBRY F.A.Q.", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "These questions and many more have been answered on the [F.A.Q Page](https://lbry.io/faq/)", + "color": 7976557, + "author": { + "name": "F.A.Q", + "url": "https://lbry.io/faq/", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!contribute": { + "usage": "", + "description": "Contributing to LBRY", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Want to help develop and contribute to the Lbry Project?\nCheck out this **[GUIDE](https://lbry.io/faq/contributing)** that will get you startd.", + "color": 7976557, + "author": { + "name": "Contributing to LBRY", + "url": "https://lbry.io/faq/contributing", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!news": { + "usage": "", + "description": "LBRY inc. News Feed", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "check out the News Feed **[HERE](https://lbry.io/news)**.", + "color": 7976557, + "author": { + "name": "LBRY inc. News Feed", + "url": "https://lbry.io/news", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!name": { + "usage": "", + "description": "Change Name Message", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Hey, glad to see you love LBRY so much, but for the safety of our users we ask that you avoid using discord names that include the word lbry. This is to prevent impersonation and scams.", + "color": 7976557, + "author": { + "name": "Discord Username", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!mining": { + "usage": "", + "description": "Mining LBRY Credits (LBC)", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "We have a dedicated channel for mining discussion, feel free to join <#363049669636390913>, we have guides pinned in that channel to get you started mining some LBC!", + "color": 7976557, + "author": { + "name": "Mining", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!pricestance": { + "usage": "", + "description": "Our Stance on LBC Price", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Details about our stance on price can be found here: [lbry.io/news/acryptypical](https://lbry.io/news/acryptypical)", + "color": 7976557, + "author": { + "name": "CEO's Stance on Price", + "url": "https://lbry.io/news/acryptypical", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!youtuber": { + "usage": "", + "description": "Are you a Youtuber curious about LBRY?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Are you a Youtuber curious about LBRY? Have a look at [lbry.io/youtube](https://lbry.io/youtube)", + "color": 7976557, + "author": { + "name": "Are you a Youtuber?", + "url": "https://lbry.io/youtube", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!publish": { + "usage": "", + "description": "How To Publish on LBRY?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "We've created a small guide to help with the Publishing features of LBRY, check it out here: [lbry.io/faq/how-to-publish](https://lbry.io/faq/how-to-publish)", + "color": 7976557, + "author": { + "name": "How To Publish on LBRY?", + "url": "https://lbry.io/faq/how-to-publish", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!random": { + "usage": "", + "description": "Off-Topic Message", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please keep conversation on topic, or move random conversations to #363084227518136322 if you wish to continue", + "color": 7976557, + "author": { + "name": "Random", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!naming": { + "usage": "", + "description": "How does LBRY naming work?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "Names exist so that we can map a human readable and understandable word or term to a more difficult to remember number or ID. In the traditional domain system, names map to numerical IP addresses. In LBRY, names map to a unique, permanent ID representing a piece of digital content and/or a publisher identity. Learn more **[HERE](https://lbry.io/faq/naming)**", + "color": 7976557, + "author": { + "name": "How does LBRY naming work?", + "url": "https://lbry.io/faq/naming", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!bounty": { + "usage": "", + "description": "LBRY Bounties", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "You can earn LBRY Credits for completing tasks as part of the LBRY Bounty Program, All bounties can be seen on the **[Bounty Home Page](https://lbry.io/bounty)**.\nBounties range from simple typo fixes to third party applications and custom projects!", + "color": 7976557, + "author": { + "name": "LBRY Bounties", + "url": "https://lbry.io/bounty", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!roadmap": { + "usage": "", + "description": "The Lbry RoadMap", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "Check Out The **[RoadMap](https://lbry.io/roadmap)**, it only outlines past and anticipated technical changes, it does not cover other initiatives. Development was fast and furious among a small group prior to 0.6, and release notes are sparse.", + "color": 7976557, + "author": { + "name": "RoadMap", + "url": "https://lbry.io/roadmap", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!referrals": { + "usage": "", + "description": "What are Referrals?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see [lbry.io/faq/referrals](https://lbry.io/faq/referrals) - referral redemptions are currently in test mode and limited to one. But you can see your entire referral history in your LBRY app.", + "color": 7976557, + "author": { + "name": "Referrals", + "url": "https://lbry.io/faq/referrals", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!rewards": { + "usage": "", + "description": "What are Rewards?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "[Rewards](https://lbry.io/faq/rewards) are given to legitimate users who are using the system (and in turn are testing things for us). In order to redeem rewards, you may need to verify your identity through a Credit Card or other manual methods.\n Please see [lbry.io/faq/identity-requirements](https://lbry.io/faq/identity-requirements)", + "color": 7976557, + "author": { + "name": "Rewards", + "url": "https://lbry.io/faq/rewards", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!rewardsvsreferrals": { + "usage": "", + "description": "What the Difference Between Rewards & Referrals?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Rewards are different to referral bonuses. Rewards are given for testing the LBRY software and system. Referrals are given for sharing LBRY with the masses.", + "color": 7976557, + "author": { + "name": "Rewards Vs. Referrals", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!cc": { + "usage": "", + "description": "Credit Card Verification?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "In an effort to limit abuse, newly invited LBRY users will be required to verify their identity via a Credit Card or by a manual verification process in order to be eligible for Rewards. Prepaid or Virtual credit cards are disallowed. Certain countries (where we've previously seen abuse) are being denied, but that list may expand later on. If you use Tor/Proxy/VPN, you also may be denied. If credit card verification does not work for you, please go to the <#363050496023592961> channel for assistance.\n**Verification is purely optional and ONLY relevant for Rewards, the app can be used without providing CC information**\n**Please See:https://lbry.io/faq/identity-requirements**", + "color": 7976557, + "author": { + "name": "Credit Card Verification", + "url": "https://lbry.io/faq/identity-requirements", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!verify": { + "usage": "", + "description": "How to Verify?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "Please download the latest version from [HERE](https://lbry.io/get) Upon install, you'll be greeted with a welcome message. If you already had the App installed, then go to the wallet (bank icon in the top right) > Rewards - this should show your current status. New users will need to verify in order to access rewards. Type !cc or !verification for more information.", + "color": 7976557, + "author": { + "name": "How To Verify?", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!verification": { + "usage": "", + "description": "Verification Help Message", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "If you would like to be verified go to <#363050496023592961> and type *`-new`* \nthis will create a ticket (channel) for your request. A LBRY mod will get back to you as soon as possible. We appreciate your patience. Only one account per household is allowed access to LBRY Rewards. Check out our [YouTube Sync FAQ](https://lbry.io/faq/youtube) for assistance with the YouTube Sync rewards verification method.", + "color": 7976557, + "author": { + "name": "Rewards Verification", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!logfile": { + "usage": "", + "description": "How to find LBRY-app Log File?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "You can find your log files by following the guide [HERE](https://lbry.io/faq/how-to-find-lbry-log-file)", + "color": 7976557, + "author": { + "name": "How to find my LogFile?", + "url": "https://lbry.io/faq/how-to-find-lbry-log-file", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!backup": { + "usage": "", + "description": "How to Backup the Wallet", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see this guide on how to backup your wallet: [lbry.io/faq/how-to-backup-wallet](https://lbry.io/faq/how-to-backup-wallet)", + "color": 7976557, + "author": { + "name": "How to Backup my Wallet?", + "url": "https://lbry.io/faq/how-to-backup-wallet", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!startup": { + "usage": "", + "description": "Startup Troubleshooting?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see [lbry.io/faq/startup-troubleshooting](https://lbry.io/faq/startup-troubleshooting) if you are having trouble getting LBRY to start correctly.", + "color": 7976557, + "author": { + "name": "Startup Troubleshooting", + "url": "https://lbry.io/faq/startup-troubleshooting", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!streamingissues": { + "usage": "", + "description": "Unable To Stream?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see [lbry.io/faq/unable-to-stream](https://lbry.io/faq/unable-to-stream) if you are experiencing problems viewing **ANY** LBRY content.", + "color": 7976557, + "author": { + "name": "Streaming Troubleshooting", + "url": "https://lbry.io/faq/unable-to-stream", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!ports": { + "usage": "", + "description": "LBRY Ports", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": + "The daemon uses ports **3333** and **4444**. It may interfere with mining software, Start the miner after the app and you should be okay. Also these ports need to be port forwarded on your router. Google is your friend there. \n **Please see this tutorial on how to change ports : [lbry.io/faq/how-to-change-port](https://lbry.io/faq/how-to-change-port)**", + "color": 7976557, + "author": { + "name": "Ports", + "url": "https://lbry.io/faq/how-to-change-port", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!migrate": { + "usage": "", + "description": "How to Migrate your Wallet/Data", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see [lbry.io/faq/backup-data](https://lbry.io/faq/backup-data) for instructions on how to backup and/or migrate your LBRY data", + "color": 7976557, + "author": { + "name": "How To Backup/Migrate LBRY Data?", + "url": "https://lbry.io/faq/backup-data", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!tipping": { + "usage": "", + "description": "Details About LBRY-app Tipping", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see [lbry.io/faq/tipping](https://lbry.io/faq/tipping) for details about tipping in the LBRY-App", + "color": 7976557, + "author": { + "name": "LBRY-App Tipping?", + "url": "https://lbry.io/faq/tipping", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!email": { + "usage": "", + "description": "How to change Email in LBRY-app?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "If you need to change your LBRY connected email, please see instructions [HERE](https://lbry.io/faq/how-to-change-email)", + "color": 7976557, + "author": { + "name": "LBRY-App Change connected E-mail?", + "url": "https://lbry.io/faq/how-to-change-email", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!cli": { + "usage": "", + "description": "How to interact with LBRY CLI?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "If you are interested in interacting with the LBRY protocol via commands, check out [lbry.io/faq/how-to-cli](https://lbry.io/faq/how-to-cli)", + "color": 7976557, + "author": { + "name": "Interact with the LBRY CLI", + "url": "https://lbry.io/faq/how-to-cli", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!ipfstorrent": { + "usage": "", + "description": "How is LBRY different from IPFS / BitTorrent?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "If you are interested in how LBRY is different from IPFS or BitTorrent, check out [lbry.io/faq/different-ipfs](https://lbry.io/faq/different-ipfs)", + "color": 7976557, + "author": { + "name": "How is LBRY different from IPFS / BitTorrent?", + "url": "https://lbry.io/faq/different-ipfs", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!shapeshift": { + "usage": "", + "description": "How can I convert my crypto into LBC?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see this guide on how to convert your crypto into LBC: [lbry.io/faq/shapeshift](https://lbry.io/faq/shapeshift)", + "color": 7976557, + "author": { + "name": "How can I convert my crypto into LBC?", + "url": "https://lbry.io/faq/shapeshift", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!youtube": { + "usage": "", + "description": "What is YouTube Sync?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see this guide on how youtube sync works, check out [lbry.io/faq/youtube](https://lbry.io/faq/youtube)", + "color": 7976557, + "author": { + "name": "What is YouTube Sync?", + "url": "https://lbry.io/faq/youtube", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!transactions": { + "usage": "", + "description": "What types of LBRY transactions are there?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Please see this guide on [transaction types](https://lbry.io/faq/transaction-types)", + "color": 7976557, + "author": { + "name": "What types of LBRY transactions are there?", + "url": "https://lbry.io/faq/transaction-types", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!team": { + "usage": "", + "description": "Meet the Team!", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Get to know the [Offical Team](https://lbry.io/team) behind the scenes of lbry inc.", + "color": 7976557, + "author": { + "name": "Meet the Team!", + "url": "https://lbry.io/team", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!phone": { + "usage": "", + "description": "Phone Verification!", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "[Phone number](https://lbry.io/faq/phone) verification provides another method for LBRY users to participate in the rewards program", + "color": 7976557, + "author": { + "name": "Phone Verification!", + "url": "https://lbry.io/faq/phone", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!basic": { + "usage": "", + "description": "LBRY App Basics!", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "[LBRY App Basics](https://lbry.io/faq/lbry-basics) The purpose of this FAQ is to answer questions about some of the basic functionality available in the LBRY App", + "color": 7976557, + "author": { + "name": "LBRY App Basics!", + "url": "https://lbry.io/faq/lbry-basics", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!tipbot": { + "usage": "", + "description": "Tipbot Help Message", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "Type `!tip help` to interact with our Tipbot which can be used to send and receive LBRY Credits (LBC). <#369896313082478594> should be used to talk to bots in order to avoid spamming other channels.", + "color": 7976557, + "author": { + "name": "Tipbot Help Message", + "url": "", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + } } diff --git a/package.json b/package.json index eb188c4..ed3b349 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ "wget": "^0.0.1" }, "scripts": { - "prettier": "prettier * --write", + "prettier": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", "build": "babel bot -d dist", "prod": "babel bot -d dist & node dist/bot.js", - "lint": "prettier --write bot/**/*.js", - "precommit": "prettier --write bot/**/*.js" + "lint": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", + "precommit": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240" }, "devDependencies": { "husky": "^0.14.3", From 3ca233bea6eecf03ac07fad01fb011230cbc9347 Mon Sep 17 00:00:00 2001 From: Ralph Date: Thu, 29 Mar 2018 15:57:25 -0400 Subject: [PATCH 07/27] Re-Added moderation to config (#148) * Re-Add moderation to config --- bot/bot.js | 1 + config/default.json.example | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/bot/bot.js b/bot/bot.js index 682ed5b..3a9b2cb 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -88,6 +88,7 @@ function checkMessageForCommand(msg, isEdit) { var cmd = alias; } else { var cmd = commands[cmdTxt]; + } if (cmdTxt === 'help') { //help is special since it iterates over the other commands diff --git a/config/default.json.example b/config/default.json.example index 8cc9366..157a104 100644 --- a/config/default.json.example +++ b/config/default.json.example @@ -5,6 +5,10 @@ "prefix": "!", "debug": false }, + "moderation": { + "perms": ["LBRY ASSISTANT","LBRY TEAM"], // Roles that have access to all commands. + "logchannel": "371620338263523328" // Channel to log the bots moderation.. + }, "lbrycrd": { "port": 9245, "user": "user", From 5bb31db42758cd9992854910d29437f284f558cd Mon Sep 17 00:00:00 2001 From: Ralph Date: Fri, 30 Mar 2018 15:49:54 -0400 Subject: [PATCH 08/27] Fix Prettier --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ed3b349..d338496 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ "wget": "^0.0.1" }, "scripts": { - "prettier": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", + "prettier": "prettier --write * --single-quote --print-width 240", "build": "babel bot -d dist", "prod": "babel bot -d dist & node dist/bot.js", - "lint": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", - "precommit": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240" + "lint": "prettier --write bot/**/*.js --single-quote --print-width 240", + "precommit": "prettier --write bot/**/*.js --single-quote true --print-width 240" }, "devDependencies": { "husky": "^0.14.3", From fe568ebfb9268c9e60650549d97cbd115afe7ab4 Mon Sep 17 00:00:00 2001 From: Ralph Date: Fri, 30 Mar 2018 15:51:30 -0400 Subject: [PATCH 09/27] Update rolelist to include baserole --- config/default.json.example | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/default.json.example b/config/default.json.example index 157a104..548816a 100644 --- a/config/default.json.example +++ b/config/default.json.example @@ -80,9 +80,10 @@ "mainchannel": "363050205043621908" // Main Stats Bot channel for directing with help message }, "rolelist": { + "baserole": "Member", "allowedroles": [ - "Reward Scammer", - "Reported Scammer" + "Scammer", + "Spammer" ] }, "claimbot": { From 6db77871d10cc016185701349e083f51ddbdbb8d Mon Sep 17 00:00:00 2001 From: Ralph Date: Fri, 30 Mar 2018 16:07:30 -0400 Subject: [PATCH 10/27] Updated setGame to setActivity (Deprecation) --- bot/bot.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bot/bot.js b/bot/bot.js index dc5d764..5ed3f12 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -43,7 +43,9 @@ bot.on('ready', function() { console.log('Logged in! Serving in ' + bot.guilds.array().length + ' servers'); require('./plugins.js').init(); console.log('type ' + config.prefix + 'help in Discord for a commands list.'); - bot.user.setGame(config.prefix + 'help'); + bot.user + .setActivity(config.prefix + 'help', { type: 'LISTENING' }) + .catch(console.error); //initialize the claimbot (content bot) claimbot.init(bot); From e693dd55280f8fe15ba4b4cae6d8064eef23ef82 Mon Sep 17 00:00:00 2001 From: Ralph Date: Fri, 30 Mar 2018 17:28:16 -0400 Subject: [PATCH 11/27] Reverted RegEx on Prettier Script --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d338496..ed3b349 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ "wget": "^0.0.1" }, "scripts": { - "prettier": "prettier --write * --single-quote --print-width 240", + "prettier": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", "build": "babel bot -d dist", "prod": "babel bot -d dist & node dist/bot.js", - "lint": "prettier --write bot/**/*.js --single-quote --print-width 240", - "precommit": "prettier --write bot/**/*.js --single-quote true --print-width 240" + "lint": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", + "precommit": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240" }, "devDependencies": { "husky": "^0.14.3", From 7a6a9bf748c6192660b131e6a5b49bfe014c2ebd Mon Sep 17 00:00:00 2001 From: Ralph Date: Fri, 30 Mar 2018 17:51:54 -0400 Subject: [PATCH 12/27] Added Base Role Functionality --- bot/modules/rolesetter.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/bot/modules/rolesetter.js b/bot/modules/rolesetter.js index e7f7a64..e0fa442 100644 --- a/bot/modules/rolesetter.js +++ b/bot/modules/rolesetter.js @@ -14,11 +14,30 @@ exports.addrole = { process: function(bot, msg, suffix) { // Here the bot,msg and suffix is avaible, this function can be async if needed. var newrole = msg.guild.roles.find('name', suffix); + var baserole = msg.guild.roles.find('name', rolelist.baserole); // Checks if the user put a role in the message. if (suffix) { // Checks if the role mentioned in the message is in the allowed roles listed in the wunderbot config. if (rolelist.allowedroles.includes(suffix)) { + // Checks if the role even exists in the discord server + if (newrole !== null) { + // Checks if the member has the role that they are trying to add + if (!msg.member.roles.find('name', suffix)) { + msg.member.addRole(newrole).then(msg.channel.send(msg.member + ' has been added to the ' + suffix + ' role!')); + if (baserole !== null) { + if (!msg.member.roles.find('name', rolelist.baserole)) { + msg.member.addRole(baserole).then(msg.channel.send(msg.member + ' has been added to the ' + rolelist.baserole + ' role!')); + } + } else { + msg.channel.send('The ' + rolelist.baserole + " Doesn't exist. Please add that role first!"); + } + } else { + msg.channel.send('It seems that you already have that role! Try removing it first with the ' + botconfig.prefix + 'delrole command!'); + } + } else { + msg.channel.send('The role ' + '`' + suffix + '`' + ' does not exist!'); + } // Checks if the role even exists in the discord server if (newrole !== null) { // Checks if the member has the role that they are trying to add @@ -62,8 +81,6 @@ exports.delrole = { } else { msg.channel.send("That role isn't one you can add yourself too! Please run the " + botconfig.prefix + 'roles command to find out which ones are allowed.'); } - } else { - msg.channel.send('Please specify a role. Type ' + botconfig.prefix + 'roles to see which you may add!'); } } }; @@ -82,6 +99,16 @@ exports.roles = { name: 'List of roles', value: buildRoleString(rolelist.allowedroles), inline: false + }, + { + name: 'How to add a role to yourself', + value: '!addrole (role) - Adds a specified role to yourself.\n!addrole Certified Troll would add the Certified Troll role.', + inline: false + }, + { + name: 'How to remove a role from yourself', + value: '!delrole (role) - Removed a specified role from yourself.\n!delrole Certified Troll would remove the Certified Troll role.', + inline: false } ], footer: { From ba9f3de3d6777a3f324e807baeb4ab4fdb08e731 Mon Sep 17 00:00:00 2001 From: Ralph Date: Fri, 30 Mar 2018 17:54:56 -0400 Subject: [PATCH 13/27] Update rolesetter.js --- bot/modules/rolesetter.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/modules/rolesetter.js b/bot/modules/rolesetter.js index e0fa442..9bc7170 100644 --- a/bot/modules/rolesetter.js +++ b/bot/modules/rolesetter.js @@ -81,6 +81,8 @@ exports.delrole = { } else { msg.channel.send("That role isn't one you can add yourself too! Please run the " + botconfig.prefix + 'roles command to find out which ones are allowed.'); } + } else { + msg.channel.send('Please specify a role. Type ' + botconfig.prefix + 'roles to see which you may add!'); } } }; From f77041f69521cd0f239959e20f85a592e130e33b Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 14:05:12 -0700 Subject: [PATCH 14/27] crash fix for offline and non dm-able --- bot/bot.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bot/bot.js b/bot/bot.js index 5ed3f12..88cd08f 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -65,7 +65,13 @@ function checkMessageForCommand(msg, isEdit) { if (msg.author.id != bot.user.id && msg.content.startsWith(config.prefix)) { //check if user is Online if (!msg.author.presence.status || msg.author.presence.status == 'offline' || msg.author.presence.status == 'invisible') { - msg.channel.send('Please set your Discord Presence to Online to talk to the Bot!'); + msg.author.send('Please set your Discord Presence to Online to talk to the bot!') + .catch(msg.channel.send(msg.author + + ', Please enable Direct Messages from server members to communicate fully with our bot, ' + + 'it is located in the user setting area under Privacy & Safety tab, ' + + 'select the option allow direct messages from server members') + .then(msg.channel.send('Please set your Discord Presence to Online to talk to the Bot!')) + ); return; } console.log('treating ' + msg.content + ' from UserID:' + msg.author + ' || UserName: ' + msg.author.username + ' as command'); From 11f12120e02ce87b467ca365c59f9087075740d5 Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 14:20:07 -0700 Subject: [PATCH 15/27] fix bot crashes when not allowed to dm --- bot/modules/welcome.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/bot/modules/welcome.js b/bot/modules/welcome.js index bea5e18..a0780df 100644 --- a/bot/modules/welcome.js +++ b/bot/modules/welcome.js @@ -19,7 +19,10 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(bot.channels.get('369896313082478594').send(member + + ', Please enable Direct Messages from server members to communicate fully with our bot, it is located in the user setting area under Privacy & Safety tab, select the option allow direct messages from server members\nSince the bot could not send you our Welcome message please check the posts in <#428634445176766464> and available commands in <#428661678796832768>' + ) + ); member.send({ embed: { description: @@ -36,7 +39,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); member.send({ embed: { description: @@ -53,7 +56,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); member.send({ embed: { title: '*Click here for more info about LBRY!*', @@ -67,7 +70,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); member.send({ embed: { title: '*Click here to see all LBRY Frequently Asked Questions (FAQ)!*', @@ -81,7 +84,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://spee.ch/8/Id5Qoc3w.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); member.send({ embed: { title: '*Have you checked out spee.ch yet?!*', @@ -95,7 +98,7 @@ exports.onUserJoin = function(bot) { icon_url: 'http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); }); }; @@ -134,7 +137,10 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(msg.channel.send(msg.mentions.members.first() + + ', Please enable Direct Messages from server members to communicate fully with our bot, it is located in the user setting area under Privacy & Safety tab, select the option allow direct messages from server members' + ) + ); msg.mentions.members.first().send({ embed: { description: @@ -151,7 +157,7 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); msg.mentions.members.first().send({ embed: { description: @@ -168,7 +174,7 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); msg.mentions.members.first().send({ embed: { title: '*Click here for more info about LBRY!*', @@ -182,7 +188,7 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); msg.mentions.members.first().send({ embed: { title: '*Click here to see all LBRY Frequently Asked Questions (FAQ)!*', @@ -196,7 +202,7 @@ exports.welcome = { icon_url: 'https://spee.ch/8/Id5Qoc3w.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); msg.mentions.members.first().send({ embed: { title: '*Have you checked out spee.ch yet?!*', @@ -210,6 +216,6 @@ exports.welcome = { icon_url: 'http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png' } } - }); + }).catch(console.error).then(console.log('could not send dm')); } }; From 5fb14d97a8a14e9d53961074bcbc8d90fda95717 Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 14:24:18 -0700 Subject: [PATCH 16/27] last fixes for crashes pm2 will catch and restart --- bot/bot.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bot/bot.js b/bot/bot.js index 88cd08f..6d88785 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -55,11 +55,21 @@ bot.on('ready', function() { supportbot.init(bot); }); +process.on('unhandledRejection', err => { + console.log('unhandledRejection: ' + err); + process.exit(1); //exit node.js with an error +}); + bot.on('disconnected', function() { console.log('Disconnected!'); process.exit(1); //exit node.js with an error }); +bot.on('error', function(error) { + console.log('error: ' + error); + process.exit(1); //exit node.js with an error +}); + function checkMessageForCommand(msg, isEdit) { //check if message is a command if (msg.author.id != bot.user.id && msg.content.startsWith(config.prefix)) { From 6c877ce5e4b8c80d647a0c708ea072c0998e1c8b Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 14:56:45 -0700 Subject: [PATCH 17/27] update prettier for windows --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ed3b349..1dd8c1c 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ "wget": "^0.0.1" }, "scripts": { - "prettier": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", + "prettier": "prettier --write \"{bot,.}/**/*.{js,json}\" --single-quote --print-width 240", "build": "babel bot -d dist", "prod": "babel bot -d dist & node dist/bot.js", - "lint": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240", - "precommit": "prettier --write '{bot,.}/**/*.{js,json}' --single-quote --print-width 240" + "lint": "prettier --write \"{bot,.}/**/*.{js,json}\" --single-quote --print-width 240", + "precommit": "prettier --write \"{bot,.}/**/*.{js,json}\" --single-quote --print-width 240" }, "devDependencies": { "husky": "^0.14.3", From 9dea8384fca83d3384d1902398f5e04ebeee9a22 Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 15:46:34 -0700 Subject: [PATCH 18/27] fix checks --- bot/bot.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bot/bot.js b/bot/bot.js index 6d88785..ac8a883 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -76,13 +76,17 @@ function checkMessageForCommand(msg, isEdit) { //check if user is Online if (!msg.author.presence.status || msg.author.presence.status == 'offline' || msg.author.presence.status == 'invisible') { msg.author.send('Please set your Discord Presence to Online to talk to the bot!') - .catch(msg.channel.send(msg.author + - ', Please enable Direct Messages from server members to communicate fully with our bot, ' + - 'it is located in the user setting area under Privacy & Safety tab, ' + - 'select the option allow direct messages from server members') - .then(msg.channel.send('Please set your Discord Presence to Online to talk to the Bot!')) - ); + .catch(function(error) { + msg.channel.send(msg.author + + ', Please enable Direct Messages from server members to communicate fully with our bot, ' + + 'it is located in the user setting area under Privacy & Safety tab, ' + + 'select the option allow direct messages from server members' + ).then(msg.channel.send( + 'Please set your Discord Presence to Online to talk to the Bot!' + ); + ); return; + }); } console.log('treating ' + msg.content + ' from UserID:' + msg.author + ' || UserName: ' + msg.author.username + ' as command'); var cmdTxt = msg.content.split(' ')[0].substring(config.prefix.length); From 5198918ed4d53fd9501f46a287ff8c6406521c43 Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 15:51:26 -0700 Subject: [PATCH 19/27] fix checks --- bot/modules/welcome.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/bot/modules/welcome.js b/bot/modules/welcome.js index a0780df..3f0637d 100644 --- a/bot/modules/welcome.js +++ b/bot/modules/welcome.js @@ -19,10 +19,11 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(bot.channels.get('369896313082478594').send(member + - ', Please enable Direct Messages from server members to communicate fully with our bot, it is located in the user setting area under Privacy & Safety tab, select the option allow direct messages from server members\nSince the bot could not send you our Welcome message please check the posts in <#428634445176766464> and available commands in <#428661678796832768>' + }).catch(function(error) { + bot.channels.get('369896313082478594').send(member + + ', Please enable Direct Messages from server members to communicate fully with our bot, it is located in the user setting area under Privacy & Safety tab, select the option allow direct messages from server members\nSince the bot could not send you our Welcome message please check the posts in <#428634445176766464> and available commands in <#428661678796832768>' ) - ); + }); member.send({ embed: { description: @@ -39,7 +40,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); member.send({ embed: { description: @@ -56,7 +57,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); member.send({ embed: { title: '*Click here for more info about LBRY!*', @@ -70,7 +71,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); member.send({ embed: { title: '*Click here to see all LBRY Frequently Asked Questions (FAQ)!*', @@ -84,7 +85,7 @@ exports.onUserJoin = function(bot) { icon_url: 'https://spee.ch/8/Id5Qoc3w.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); member.send({ embed: { title: '*Have you checked out spee.ch yet?!*', @@ -98,7 +99,7 @@ exports.onUserJoin = function(bot) { icon_url: 'http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); }); }; @@ -137,10 +138,11 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(msg.channel.send(msg.mentions.members.first() + + }).catch(function(error) { + msg.channel.send(msg.mentions.members.first() + ', Please enable Direct Messages from server members to communicate fully with our bot, it is located in the user setting area under Privacy & Safety tab, select the option allow direct messages from server members' ) - ); + }); msg.mentions.members.first().send({ embed: { description: @@ -157,7 +159,7 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); msg.mentions.members.first().send({ embed: { description: @@ -174,7 +176,7 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); msg.mentions.members.first().send({ embed: { title: '*Click here for more info about LBRY!*', @@ -188,7 +190,7 @@ exports.welcome = { icon_url: 'https://i.imgur.com/yWf5USu.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); msg.mentions.members.first().send({ embed: { title: '*Click here to see all LBRY Frequently Asked Questions (FAQ)!*', @@ -216,6 +218,6 @@ exports.welcome = { icon_url: 'http://www.pd4pic.com/images/flag-green-blue-purple-indigo-bars-background.png' } } - }).catch(console.error).then(console.log('could not send dm')); + }).catch(function(error) {console.log('could not send dm')}); } }; From 1f92b7b6637a1b75d4c6f8ab105a25cdfed8aa51 Mon Sep 17 00:00:00 2001 From: MSFTserver Date: Sat, 31 Mar 2018 16:14:13 -0700 Subject: [PATCH 20/27] move treating command moves treating command message down to valid command to avoid logging all messages with activator ! --- bot/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/bot.js b/bot/bot.js index ac8a883..4d6cb6d 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -88,7 +88,6 @@ function checkMessageForCommand(msg, isEdit) { return; }); } - console.log('treating ' + msg.content + ' from UserID:' + msg.author + ' || UserName: ' + msg.author.username + ' as command'); var cmdTxt = msg.content.split(' ')[0].substring(config.prefix.length); var suffix = msg.content.substring(cmdTxt.length + config.prefix.length + 1); //add one for the ! and one for the space if (msg.isMentioned(bot.user)) { @@ -166,6 +165,7 @@ function checkMessageForCommand(msg, isEdit) { } } else if (cmd) { // Add permission check here later on ;) + console.log('treating ' + msg.content + ' from UserID:' + msg.author + ' || UserName: ' + msg.author.username + ' as command'); try { cmd.process(bot, msg, suffix, isEdit); } catch (e) { From 0d2d2dc2700d5d8f22808eb5d76877280de19bb1 Mon Sep 17 00:00:00 2001 From: Ralph Date: Mon, 2 Apr 2018 16:34:55 -0400 Subject: [PATCH 21/27] Changed var to let --- bot/modules/rolesetter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/modules/rolesetter.js b/bot/modules/rolesetter.js index 9bc7170..4f6d141 100644 --- a/bot/modules/rolesetter.js +++ b/bot/modules/rolesetter.js @@ -13,8 +13,8 @@ exports.addrole = { description: 'Adds you to specified role', process: function(bot, msg, suffix) { // Here the bot,msg and suffix is avaible, this function can be async if needed. - var newrole = msg.guild.roles.find('name', suffix); - var baserole = msg.guild.roles.find('name', rolelist.baserole); + let newrole = msg.guild.roles.find('name', suffix); + let baserole = msg.guild.roles.find('name', rolelist.baserole); // Checks if the user put a role in the message. if (suffix) { From f578c8a6f07ce4c704cb6f3c7f28cab34096bc70 Mon Sep 17 00:00:00 2001 From: Ralph Date: Mon, 2 Apr 2018 16:40:49 -0400 Subject: [PATCH 22/27] Removed Unnecessary Semi-Colon --- bot/bot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/bot.js b/bot/bot.js index 4d6cb6d..26deff2 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -83,7 +83,7 @@ function checkMessageForCommand(msg, isEdit) { 'select the option allow direct messages from server members' ).then(msg.channel.send( 'Please set your Discord Presence to Online to talk to the Bot!' - ); + ) ); return; }); From 328365a492f2f46698676119e4fe3f2665880a26 Mon Sep 17 00:00:00 2001 From: Ralph Date: Mon, 2 Apr 2018 16:54:46 -0400 Subject: [PATCH 23/27] Removed Duplicate Code During last Master Branch Merge, Lots of Dupe code was added for some reason. Thought it was all removed, but I guess I missed some. --- bot/modules/rolesetter.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/bot/modules/rolesetter.js b/bot/modules/rolesetter.js index 4f6d141..2b8e041 100644 --- a/bot/modules/rolesetter.js +++ b/bot/modules/rolesetter.js @@ -15,7 +15,6 @@ exports.addrole = { // Here the bot,msg and suffix is avaible, this function can be async if needed. let newrole = msg.guild.roles.find('name', suffix); let baserole = msg.guild.roles.find('name', rolelist.baserole); - // Checks if the user put a role in the message. if (suffix) { // Checks if the role mentioned in the message is in the allowed roles listed in the wunderbot config. @@ -38,17 +37,6 @@ exports.addrole = { } else { msg.channel.send('The role ' + '`' + suffix + '`' + ' does not exist!'); } - // Checks if the role even exists in the discord server - if (newrole !== null) { - // Checks if the member has the role that they are trying to add - if (!msg.member.roles.find('name', suffix)) { - msg.member.addRole(newrole).then(msg.channel.send(msg.member + ' has been added to the ' + suffix + ' role!')); - } else { - msg.channel.send('It seems that you already have that role! Try removing it first with the ' + botconfig.prefix + 'delrole command!'); - } - } else { - msg.channel.send('The role ' + '`' + suffix + '`' + ' does not exist!'); - } } else { msg.channel.send("That role isn't one you can add yourself too! Please run the " + botconfig.prefix + 'roles command to find out which ones are allowed.'); } From 57ec9f5db83a2d3d86d2cfa432842c12f8c2a4c2 Mon Sep 17 00:00:00 2001 From: Ralph Date: Thu, 5 Apr 2018 14:17:57 -0400 Subject: [PATCH 24/27] Changed LBRY assistant to Moderator Team --- config/default.json.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/default.json.example b/config/default.json.example index 548816a..b5ae83d 100644 --- a/config/default.json.example +++ b/config/default.json.example @@ -6,7 +6,7 @@ "debug": false }, "moderation": { - "perms": ["LBRY ASSISTANT","LBRY TEAM"], // Roles that have access to all commands. + "perms": ["Moderator Team","LBRY TEAM"], // Roles that have access to all commands. "logchannel": "371620338263523328" // Channel to log the bots moderation.. }, "lbrycrd": { From 40a1adaba4f4e7a6115a6a4b94941683424cd0c5 Mon Sep 17 00:00:00 2001 From: Ralph Date: Thu, 5 Apr 2018 14:21:28 -0400 Subject: [PATCH 25/27] Added new Roles to Default Config for Rolesetter --- config/default.json.example | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/config/default.json.example b/config/default.json.example index b5ae83d..20b5082 100644 --- a/config/default.json.example +++ b/config/default.json.example @@ -80,11 +80,9 @@ "mainchannel": "363050205043621908" // Main Stats Bot channel for directing with help message }, "rolelist": { - "baserole": "Member", - "allowedroles": [ - "Scammer", - "Spammer" - ] + // The roles here are Case Sensitive to how they are in your Discord Server! + "baserole": "LBRYian", + "allowedroles": ["NSFW", "Marketers", "Miners", "Off-Topic Chats"] }, "claimbot": { "channels": [ From c17f81bb8fdf6ee4f43698dd134489a268e06411 Mon Sep 17 00:00:00 2001 From: YULIUS KURNIAWAN KRISTIANTO Date: Fri, 13 Apr 2018 00:59:38 +0700 Subject: [PATCH 26/27] added new commands im added a new command , !AUP , !shop , !alpha, !content & !meet --- config/commands.json | 96 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/config/commands.json b/config/commands.json index 09f72d7..c27e56f 100644 --- a/config/commands.json +++ b/config/commands.json @@ -680,6 +680,102 @@ } } }, + "!shop": { + "usage": "", + "description": "LBRY Inc. Shop!", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "want to shop, visit our store [LBRY Inc. Shop](https://shop.lbry.io) Logowear and custom designs from LBRY, Inc", + "color": 7976557, + "author": { + "name": "LBRY Inc. Shop!", + "url": "https://shop.lbry.io", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!content": { + "usage": "", + "description": "What content can I legally upload to LBRY ?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": " This guide provides answers to questions regarding what you may upload to the LBRY app and network, as well as how to report illegal or infringing content.[Read Our FAQ](https://lbry.io/faq/content). ", + "color": 7976557, + "author": { + "name": "What content can I legally upload to LBRY ?", + "url": "https://lbry.io/faq/content", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!aup": { + "usage": "", + "description": "Acceptable Use Policy", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": " [Read Our FAQ](https://lbry.io/faq/acceptable-use-policy) to know more information on LBRY Acceptable Use Policy ", + "color": 7976557, + "author": { + "name": "Acceptable Use Policy", + "url": "https://lbry.io/faq/acceptable-use-policy", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!aup": { + "usage": "", + "description": "Acceptable Use Policy", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": " [Read Our FAQ](https://lbry.io/faq/acceptable-use-policy) to know more information on LBRY Acceptable Use Policy ", + "color": 7976557, + "author": { + "name": "Acceptable Use Policy", + "url": "https://lbry.io/faq/acceptable-use-policy", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!meet": { + "usage": "", + "description": "Wanna Meet Up?", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": " LBRY is looking for ambassadors to spread the word to College campuses and [Meetup](https://lbry.io/meet) groups worldwide! ", + "color": 7976557, + "author": { + "name": "Wanna Meet Up?", + "url": "https://lbry.io/meet", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, + "!alpha": { + "usage": "", + "description": "Android Alpha Tester", + "operation": "send", + "bundle": { + "url": "", + "title": "", + "description": "LBRY needs alpha testers for our [Android](https://lbry.io/android-alpha) app!", + "color": 7976557, + "author": { + "name": "Android Alpha Tester", + "url": "https://lbry.io/android-alpha", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + } + }, "!tipbot": { "usage": "", "description": "Tipbot Help Message", From ca0965737f644f892c9c9b3a846beda816272ff8 Mon Sep 17 00:00:00 2001 From: Thomas Zarebczan Date: Thu, 12 Apr 2018 16:52:33 -0400 Subject: [PATCH 27/27] grammar/updates --- config/commands.json | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/config/commands.json b/config/commands.json index c27e56f..781a45b 100644 --- a/config/commands.json +++ b/config/commands.json @@ -687,7 +687,7 @@ "bundle": { "url": "", "title": "", - "description": "want to shop, visit our store [LBRY Inc. Shop](https://shop.lbry.io) Logowear and custom designs from LBRY, Inc", + "description": "Visit our at-cost [merchandise store](https://shop.lbry.io) to check out the latest LBRY swag.", "color": 7976557, "author": { "name": "LBRY Inc. Shop!", @@ -698,12 +698,12 @@ }, "!content": { "usage": "", - "description": "What content can I legally upload to LBRY ?", + "description": "What content can I legally upload to LBRY?", "operation": "send", "bundle": { "url": "", "title": "", - "description": " This guide provides answers to questions regarding what you may upload to the LBRY app and network, as well as how to report illegal or infringing content.[Read Our FAQ](https://lbry.io/faq/content). ", + "description": "[Read our FAQ](https://lbry.io/faq/content) to learn more about LBRY's content policy.", "color": 7976557, "author": { "name": "What content can I legally upload to LBRY ?", @@ -719,23 +719,7 @@ "bundle": { "url": "", "title": "", - "description": " [Read Our FAQ](https://lbry.io/faq/acceptable-use-policy) to know more information on LBRY Acceptable Use Policy ", - "color": 7976557, - "author": { - "name": "Acceptable Use Policy", - "url": "https://lbry.io/faq/acceptable-use-policy", - "icon_url": "https://i.imgur.com/yWf5USu.png" - } - } - }, - "!aup": { - "usage": "", - "description": "Acceptable Use Policy", - "operation": "send", - "bundle": { - "url": "", - "title": "", - "description": " [Read Our FAQ](https://lbry.io/faq/acceptable-use-policy) to know more information on LBRY Acceptable Use Policy ", + "description": "[Read Our FAQ](https://lbry.io/faq/acceptable-use-policy) to learn more about LBRY's Acceptable Use Policy", "color": 7976557, "author": { "name": "Acceptable Use Policy", @@ -751,7 +735,7 @@ "bundle": { "url": "", "title": "", - "description": " LBRY is looking for ambassadors to spread the word to College campuses and [Meetup](https://lbry.io/meet) groups worldwide! ", + "description": "LBRY is looking for ambassadors to spread the word to [College campuses](https://lbry.io/college) and [Meetup](https://lbry.io/meet) groups worldwide! ", "color": 7976557, "author": { "name": "Wanna Meet Up?", @@ -767,7 +751,7 @@ "bundle": { "url": "", "title": "", - "description": "LBRY needs alpha testers for our [Android](https://lbry.io/android-alpha) app!", + "description": "Sign up to become an alpha tester for our [Android app](https://lbry.io/android-alpha)!", "color": 7976557, "author": { "name": "Android Alpha Tester",