├── .github └── ISSUE_TEMPLATE │ ├── bug-report.md │ ├── code-help.md │ └── feature_request.md ├── .gitignore ├── LICENSE ├── PULL_REQUEST_TEMPLATE.md ├── README.md ├── bot.js ├── config-example.json ├── package-lock.json └── package.json /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Report bugs to imporve the bot 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. ... 13 | 2. ... 14 | 3. ... 15 | 16 | **Screenshots** 17 | If applicable, add screenshots to help explain your problem. 18 | 19 | **Additional context** 20 | Add any other context about the problem here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/code-help.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Help me with the code 3 | about: Found a problem? Help me with some code 4 | 5 | --- 6 | 7 | **Is your code related to a problem?** 8 | A clear and concise description of what the problem is. 9 | 10 | **Describe the solution** 11 | A clear and concise description of how to use the code and what it will do. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative code solutions. 15 | 16 | **Code to use** 17 | Add code & describe how to use it. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for the bot 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem?** 8 | A clear and concise description of what the problem is. 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Screenshots** 17 | If applicable, add screenshots to help explain your problem. 18 | 19 | **Code that can help** 20 | Add any example code & describe how to use it. 21 | 22 | **Additional context** 23 | Add any other context or screenshots about the feature request here. 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | *.log 3 | config.json 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright © 2018-2021 TheCactusMonkey aka Cactooz (Hugo B) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **Describe what your pull request will improve for the bot** 2 | A clear and concise description of what the pull request will fix/add/remove ect. 3 | 4 | **Is your pull request related to a problem? Please describe it.** 5 | A clear and concise description of what the problem is. 6 | 7 | **Describe the way your pull request fix that problem.** 8 | A clear and concise description of what it should fix. 9 | 10 | **Describe alternatives you've considered** 11 | A clear and concise description of any alternative solutions or features you've considered. 12 | 13 | **Additional context** 14 | Add any other context or screenshots about the pull request here. 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Minecraft Server Status Discord Bot 2 | 3 | This is a stand alone fork of [Vegeta897's simple Minecraft server status bot](https://gist.github.com/vegeta897/e4410669c921c2ab7635e1d0153b0bc6). Thanks to him for making the first code! 4 | 5 | It's a simple Discord bot let's you ping your Minecraft server to see if it's online/offline using the command /ping or a command that you choose yourself. 6 | 7 | Check out the [wiki](https://github.com/TheCactusMonkey/MinecraftServer-DiscordBot/wiki) for more indepth tutorials/help how to configure your bot. You can also get some Tips and Tricks how to use the bot and some safety help to not get hacked or scammed. 8 | -------------------------------------------------------------------------------- /bot.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const bot = new Discord.Client(); 3 | const fetch = require('node-fetch'); 4 | 5 | const {prefix, command, token, defaultIP, serverName, serverUrl, serverLogo} = require('./config.json'); 6 | 7 | bot.login(token); 8 | 9 | bot.on('ready', () => { 10 | console.log(`\n${bot.readyAt} - Bot ready and connected!\nLogged in as ${bot.user.tag} (${bot.user.id}) on ${bot.guilds.cache.size} server(s).`); 11 | bot.user.setActivity(prefix + command) 12 | }); 13 | 14 | bot.on('message', message => { 15 | 16 | if (!message.content.startsWith(prefix) || message.author.bot) return; 17 | 18 | const args = message.content.slice(prefix.length).trim().split(/ +/); 19 | const commandName = args.shift().toLowerCase(); 20 | 21 | if (commandName === command) { 22 | 23 | const mcIP = args[0] || defaultIP; 24 | const mcPort = args[1] || 25565; 25 | 26 | let url = `http://mcapi.us/server/status?ip=${mcIP}&port=${mcPort}`; 27 | 28 | (async () => { 29 | try { 30 | const { online, players } = await fetch(url).then(response => response.json()); 31 | 32 | let status = "Offline" 33 | let color = 16711680 34 | if (online) { 35 | status = "Online"; 36 | color = 65280 37 | } 38 | 39 | const embed = { 40 | "author": { 41 | "name": `${serverName} Server Status`, 42 | "url": serverUrl, 43 | "icon_url": serverLogo 44 | }, 45 | "color": color, 46 | "fields": [ 47 | { 48 | "name": "Status:", 49 | "value": status, 50 | "inline": true 51 | }, 52 | { 53 | "name": "Players Online:", 54 | "value": `**${players.now}** / **${players.max}**`, 55 | "inline": true 56 | } 57 | ], 58 | "footer": { 59 | "text": `IP: ${mcIP}, Port: ${mcPort}` 60 | } 61 | }; 62 | message.channel.send({ embed }); 63 | 64 | } catch (error) { 65 | console.log(error); 66 | return message.channel.send('Error while getting Minecraft server status...'); 67 | } 68 | })(); 69 | }; 70 | }); 71 | -------------------------------------------------------------------------------- /config-example.json: -------------------------------------------------------------------------------- 1 | { 2 | "__comment__": "Rename this file config.json and configure the variables below", 3 | "__comment2__": "You can also remove this line and the line above (__comment__ & __comment2__) it if you want to", 4 | "prefix": "!", 5 | "command": "ping", 6 | "token": "BOT-TOKEN", 7 | "defaultIP": "mc.server.net", 8 | "serverName": "Minecraft Server", 9 | "serverUrl": "https://minecraft.net", 10 | "serverLogo": "https://images-eu.ssl-images-amazon.com/images/I/512dVKB22QL.png" 11 | } 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "minecraftserverstatus-discordbot", 3 | "version": "3.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "minecraftserverstatus-discordbot", 9 | "version": "3.0.0", 10 | "dependencies": { 11 | "discord.js": "^12.5.3", 12 | "node-fetch": "^2.6.1" 13 | } 14 | }, 15 | "node_modules/@discordjs/collection": { 16 | "version": "0.1.6", 17 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", 18 | "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" 19 | }, 20 | "node_modules/@discordjs/form-data": { 21 | "version": "3.0.1", 22 | "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", 23 | "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", 24 | "dependencies": { 25 | "asynckit": "^0.4.0", 26 | "combined-stream": "^1.0.8", 27 | "mime-types": "^2.1.12" 28 | }, 29 | "engines": { 30 | "node": ">= 6" 31 | } 32 | }, 33 | "node_modules/abort-controller": { 34 | "version": "3.0.0", 35 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 36 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 37 | "dependencies": { 38 | "event-target-shim": "^5.0.0" 39 | }, 40 | "engines": { 41 | "node": ">=6.5" 42 | } 43 | }, 44 | "node_modules/asynckit": { 45 | "version": "0.4.0", 46 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 47 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 48 | }, 49 | "node_modules/combined-stream": { 50 | "version": "1.0.8", 51 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 52 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 53 | "dependencies": { 54 | "delayed-stream": "~1.0.0" 55 | }, 56 | "engines": { 57 | "node": ">= 0.8" 58 | } 59 | }, 60 | "node_modules/delayed-stream": { 61 | "version": "1.0.0", 62 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 63 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 64 | "engines": { 65 | "node": ">=0.4.0" 66 | } 67 | }, 68 | "node_modules/discord.js": { 69 | "version": "12.5.3", 70 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", 71 | "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", 72 | "dependencies": { 73 | "@discordjs/collection": "^0.1.6", 74 | "@discordjs/form-data": "^3.0.1", 75 | "abort-controller": "^3.0.0", 76 | "node-fetch": "^2.6.1", 77 | "prism-media": "^1.2.9", 78 | "setimmediate": "^1.0.5", 79 | "tweetnacl": "^1.0.3", 80 | "ws": "^7.4.4" 81 | }, 82 | "engines": { 83 | "node": ">=12.0.0" 84 | } 85 | }, 86 | "node_modules/event-target-shim": { 87 | "version": "5.0.1", 88 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 89 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 90 | "engines": { 91 | "node": ">=6" 92 | } 93 | }, 94 | "node_modules/mime-db": { 95 | "version": "1.47.0", 96 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", 97 | "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", 98 | "engines": { 99 | "node": ">= 0.6" 100 | } 101 | }, 102 | "node_modules/mime-types": { 103 | "version": "2.1.30", 104 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", 105 | "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", 106 | "dependencies": { 107 | "mime-db": "1.47.0" 108 | }, 109 | "engines": { 110 | "node": ">= 0.6" 111 | } 112 | }, 113 | "node_modules/node-fetch": { 114 | "version": "2.6.1", 115 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 116 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 117 | "engines": { 118 | "node": "4.x || >=6.0.0" 119 | } 120 | }, 121 | "node_modules/prism-media": { 122 | "version": "1.2.9", 123 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", 124 | "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==", 125 | "peerDependencies": { 126 | "@discordjs/opus": "^0.5.0", 127 | "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", 128 | "node-opus": "^0.3.3", 129 | "opusscript": "^0.0.8" 130 | }, 131 | "peerDependenciesMeta": { 132 | "@discordjs/opus": { 133 | "optional": true 134 | }, 135 | "ffmpeg-static": { 136 | "optional": true 137 | }, 138 | "node-opus": { 139 | "optional": true 140 | }, 141 | "opusscript": { 142 | "optional": true 143 | } 144 | } 145 | }, 146 | "node_modules/setimmediate": { 147 | "version": "1.0.5", 148 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 149 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 150 | }, 151 | "node_modules/tweetnacl": { 152 | "version": "1.0.3", 153 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 154 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 155 | }, 156 | "node_modules/ws": { 157 | "version": "7.4.5", 158 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", 159 | "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", 160 | "engines": { 161 | "node": ">=8.3.0" 162 | }, 163 | "peerDependencies": { 164 | "bufferutil": "^4.0.1", 165 | "utf-8-validate": "^5.0.2" 166 | }, 167 | "peerDependenciesMeta": { 168 | "bufferutil": { 169 | "optional": true 170 | }, 171 | "utf-8-validate": { 172 | "optional": true 173 | } 174 | } 175 | } 176 | }, 177 | "dependencies": { 178 | "@discordjs/collection": { 179 | "version": "0.1.6", 180 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", 181 | "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" 182 | }, 183 | "@discordjs/form-data": { 184 | "version": "3.0.1", 185 | "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", 186 | "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", 187 | "requires": { 188 | "asynckit": "^0.4.0", 189 | "combined-stream": "^1.0.8", 190 | "mime-types": "^2.1.12" 191 | } 192 | }, 193 | "abort-controller": { 194 | "version": "3.0.0", 195 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 196 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 197 | "requires": { 198 | "event-target-shim": "^5.0.0" 199 | } 200 | }, 201 | "asynckit": { 202 | "version": "0.4.0", 203 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 204 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 205 | }, 206 | "combined-stream": { 207 | "version": "1.0.8", 208 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 209 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 210 | "requires": { 211 | "delayed-stream": "~1.0.0" 212 | } 213 | }, 214 | "delayed-stream": { 215 | "version": "1.0.0", 216 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 217 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 218 | }, 219 | "discord.js": { 220 | "version": "12.5.3", 221 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", 222 | "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", 223 | "requires": { 224 | "@discordjs/collection": "^0.1.6", 225 | "@discordjs/form-data": "^3.0.1", 226 | "abort-controller": "^3.0.0", 227 | "node-fetch": "^2.6.1", 228 | "prism-media": "^1.2.9", 229 | "setimmediate": "^1.0.5", 230 | "tweetnacl": "^1.0.3", 231 | "ws": "^7.4.4" 232 | } 233 | }, 234 | "event-target-shim": { 235 | "version": "5.0.1", 236 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 237 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 238 | }, 239 | "mime-db": { 240 | "version": "1.47.0", 241 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", 242 | "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" 243 | }, 244 | "mime-types": { 245 | "version": "2.1.30", 246 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", 247 | "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", 248 | "requires": { 249 | "mime-db": "1.47.0" 250 | } 251 | }, 252 | "node-fetch": { 253 | "version": "2.6.1", 254 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 255 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 256 | }, 257 | "prism-media": { 258 | "version": "1.2.9", 259 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", 260 | "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==", 261 | "requires": {} 262 | }, 263 | "setimmediate": { 264 | "version": "1.0.5", 265 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 266 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 267 | }, 268 | "tweetnacl": { 269 | "version": "1.0.3", 270 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 271 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 272 | }, 273 | "ws": { 274 | "version": "7.4.5", 275 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", 276 | "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", 277 | "requires": {} 278 | } 279 | } 280 | } 281 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "minecraftserverstatus-discordbot", 3 | "version": "3.0.0", 4 | "description": "Minecraft server status bot for Discord", 5 | "main": "bot.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node ." 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/Cactooz/MinecraftServer-DiscordBot.gi" 13 | }, 14 | "author": "TheCactusMonkey aka Cactooz (Hugo B)", 15 | "bugs": { 16 | "url": "https://github.com/Cactooz/MinecraftServer-DiscordBot/issues" 17 | }, 18 | "homepage": "https://github.com/Cactooz/MinecraftServer-DiscordBot#readme", 19 | "dependencies": { 20 | "discord.js": "^12.5.3", 21 | "node-fetch": "^2.6.1" 22 | } 23 | } 24 | --------------------------------------------------------------------------------