Beginner's Setup Guide - d-zone-org/d-zone GitHub Wiki
Privileged Intents and Permissions Required
D-Zone relies on using the full member list as well as presence updates and message content from the Discord API. These are privileged intents that must be enabled in your bot application page. These intents are unrestricted if your bot is in less than 100 servers.
When adding the D-Zone bot to a server, make sure it has at least the View Channels
permission. It should also have Send Messages
to be able to respond to commands. No other permissions are required.
Heroku
For a simple setup, try free deployment on Heroku
Docker
For a docker container setup with SSL, you can use this one created by Griefed:
Otherwise, read on.
Requirements
If you want to run D-Zone for your Discord server, you will need the following:
- A computer to run the node server
- The computer you're on right now would be fine, or you can use a node.js hosting service.
- A port available on the node server for the websocket
- This usually means port forwarding on your router, like when you host a game server.
- A web host or local host for the client files
- If hosting on HTTPS, you will need to provide an SSL certificate (try Let's Encrypt)
- People tend to get stuck on this one, please find a web host before proceeding.
- If you're on Linux, you can use NGINX as described in this guide for Linux
This guide is written for Windows, but much of it should be the same on other systems. My friend Macley has written Linux-specific and Windows-specific guides which include self-hosting the web files.
First, you must install Node. I use the LTS release.
To check that you have installed Node properly, open a command prompt and type node -v
. It should tell you what version you have just installed. Also run npm -v
to ensure this too was installed. If you're getting errors, you may need to reboot. If that still doesn't work, google how to add node and npm to your PATH variable.
Installation
Click the big green download button on D-Zone's GitHub page to download the ZIP. Inside is a folder called d-zone-master
, extract it where you want. Then open that folder, and in an empty space right click while holding Shift and choose "Open command window here". You could also browse to the folder manually in CMD if you know how. Then run this:
npm install
This will take a few minutes. You may see some warnings, this is okay. If you get an error and the package did not install, you may need to download the Visual C++ runtimes from Microsoft. You also may need Python 2.7 installed. If all goes well, you should now have a node_modules
folder.
Configuration
Create or set an environment variable called token
to your bot's token. If you don't know how or don't want to use environment variables, create a file called .env
in the project root with the text token=your_token_here
. To get your bot's token, go here. If you aren't using a bot (you should use one), go google how to get your Discord token.
If you are hosting on HTTPS (recommended), you need to also set your cert
and key
variables to the full paths of your certificates (e.g. on Ubuntu /etc/letsencrypt/live/example.com/fullchain.pem
and /etc/letsencrypt/live/example.com/privkey.pem
). These can also be set in the .env
file. Make sure node will have read permission for these files.
Rename discord-config-example.json
to discord-config.json
and insert the info for your Discord server(s). If you don't know your server ID, look in Server Settings > Widget in Discord. You must specify one default
Discord server. You can include multiple servers here, and as long as your bot can connect to them, they will be available for clients to view.
If your server has thousands of members, you will probably want to hide offline users by adding hideOffline: true to your server options. You can password-protect a server from being viewed by a client by using the password
property (see notes). Check the Configuration reference for more info.
Rename socket-config-example.json
to socket-config.json
and insert the address and port you want to run the websocket on. If you're going to run the server on your computer, this would be your IP. The port can be almost anything you want, but I recommend 3000
. If you're behind a router, you may need to forward this port. If you are using HTTPS, set secure
to true
. Make sure the address matches your certificate name if using HTTPS. An IP address won't work with your certificate.
While in the same command prompt window (or in a new one, as long as it's pointed at your D-Zone folder) start the server with npm start
or just node index.js
Uploading
The client files are all contained within the web
folder, and need to be built with npm run-script build
. After running that, you will have a file called bundle.js
in /web/static
. Upload everything in the web
folder except the script
folder to your web host. Do not remove the web folder from the package; the server component requires it.
Open a browser tab and visit the URL where you uploaded /web/index.html
. If everything works, the client should connect to the default server, generate a world, and receive live updates via websocket from the server.
If you see "Upgrade required" then you are typing in the wrong URL. The websocket port is not to be visited in your browser! You simply need to visit the folder that you uploaded to your web host.
If it's stuck on "Connecting..." make sure that the port in your socket config is open.
You can tweak the message box parameters by editing misc-config.json
. Check the Misc Config reference for details.
If you're having any other problems, you can catch me on Discord here: https://discord.gg/0MvHMfHcTKUvE2kC
Remember, this is still being developed! Check back for updates! :grinning: To get the latest version, you will have to download and install a new instance in a new folder, copy over your configuration files, and build again.
Notes
Respect the privacy of the users in your Discord server. By creating a D-Zone for your server without a password, you are allowing anyone with the URL to view any conversations your bot has permission to see.
The build
script creates a minified bundle file with no source mapping, while watch
is not minified but is quicker to run and has source mapping. So, watch
is good for development and build
is good for deployment. If you have no idea what this means, use build