Get Off Discord And Keep Your Friends_

[feed|standalone]

A guide to help someone who cares about privacy use Discord without really using Discord.

Intro

If you have gamer friends and you want to make the switch to a better platform it's likely all your attempts usually result in either an argument or just never work. I find that I'm usually able to get them to agree that a world where companies weren't evil would be a better place but usually it just ends with either: It's just a better service and it's worth the privacy loss or everyone else uses it...

With the common problem recognized we can move on to what you need:

  • A server (be it a VPS or hardware you own).
  • A domain.
  • A relationship with the admin of a discord sever (or your own server).

Now onto the actual guide. This guide will be split into three parts: Text, Voice, Stream. This guide will cover self-hostable/FOSS services for these categories as well as bridging those services to Discord.

I will mainly cover what I personally use to do this on my own server...

Text

Service

Personally on my server I use Matrix. A set up guide can be found here.

Matrix is pretty easy to set up and you just have to set it up normally. Try to take care about setting it up properly/securely and do as many performance tweaks as you feel comfortable implementing.

That being said Matrix is kinda bloated and takes up a crazy amount of ram. The reason I still use Matrix is because it's more normie friendly. With time I hope it becomes more light-weight as well as a genuine contender to Discord. Other than the performance I actually don't have any other major reasons to dislike it. It's still the closest project to actually convince Discord users to switch in my opinion, and that's my main priority. For text you can also use XMPP which is a lot better although for more hardcore users. I use Prosody on my server and it's pretty awesome. I know you can also bridge XMPP chat to Discord, but I have no experience with that.

Bridging

For bridging to Discord you will need a Discord account to make bots needed to link the servers. I suggest you make a separate (if you already have Discord) and properly OPSEC created account to make your bots.

For bridging Matrix to Discord I use Half-Shot's Matrix Discord Bridge (here). There is also another one that puppets your own Discord account. Tying you Discord account to your Matrix one.

I use Half-Shot's because for privacy reasons I want to limit the amount of relation from Discord to the bridge. This bridge just keeps it all through a single Discord bot.

Before installing the bridge I set up a user for it. Something like:

sudo useradd -m matrixdb

I then cloned the repository to the home directory of the new user and followed the README on the github page.

The README also goes through how to make a discord bot.

NOTICE: I've set this bridge up twice and both times at some stage there was an error. From my memory I think after the bot is added there's a space somewhere in the discord-registration.yaml that causes the program to fail. So just check that over that when testing an npm start.

Once you add a _matrix webhook to a room it can be found in matrix with a string in the form #_discord_guildid_channelid:matrix.example.xyz with guildid and channelid replaced by that found in Discord. A quick way can be achieved once you've already bridged one channel to the matrix by having someone #channel_name the other channels you want to add on Discord and then clicking on the bridged link in Matrix (you still need the webhook).

After finding the room I highly suggest you do this:

Admin yourself on every room by running: npm run adminme -- -m '!AbcdefghijklmnopqR:example.com' -u '@Alice:example.com' -p '100'. The '!' string is the internal ID found in the advanced settings of the room on Matrix.

DO NOT ENCRYPT THE ROOM IT WILL FUCK UP THE WHOLE ROOM AND MAKE THE ROOM UNUSABLE FOREVER!

Then set the room to invite only and make sure it's taken off the public directory and is unsearchable. That way I can keep the Matrix server open to randos but still keep the Discord private if I wanted to.

I also suggest setting it up as a service:


[Service]
WorkingDirectory=/home/matrixdb/matrix-appservice-discord
ExecStart=/usr/local/bin/npm start
Restart=always
StandardOutput=syslog
StandardError=syslog
User=matrixdb
Group=matrixdb

[Install]
WantedBy=multi-user.target

Then just enable and start the service.

With that hopefully everything worked and you can now talk to your friends without using Discord!

Voice

Service

For my server I use Mumble. A guide for setting it up can be found here

Setting up the service is pretty straight forward. You make a SuperUser password on install and then you allow the default port through your firewall.

There is some config that has to be done in the /etc/mumble-server.ini:

allowping=True
opusthreshold=0

I also did obfuscate=True, logdays=-1 and set a password.

Adding ssl cert and key is also suggested what I did for that was make a sub-domain mumble.example.xyz then generated a key using certbot --nginx and then copied the symbolic links in /etc/letsencrypt/live/mumble.example.xyz/ to another folder and allowed permissions to mumble-server. Then added the paths to the .ini file.

Bridging

To bridge voice I used Stieneee's Mumble Discord Bridge. It's new but gets the job done!. Find it here.

It starts out the exact same as the matrix bridge make a discord bot, make a new user, clone the repo.

Then follow the README on the github page and generate a command specific to your server.

I also made a service for this:


[Service]
WorkingDirectory=/home/mumbledb/mumble-discord-bridge
ExecStart=/home/mumbledb/mumble-discord-bridge/mumble-discord-bridge -discord-cid "CID" -discord-gid "GID" -discord-token "BOTTOKEN" -mumble-address "mumble.example.xyz" -discord-disable-text -mumble-channel "MUMBLECHANNEL" -mumble-certificate cert.pem -nice -mumble-password PASSWORD -mode auto
Restart=always
StandardOutput=syslog
StandardError=syslog
User=mumbledb
Group=mumbledb

[Install]
WantedBy=multi-user.target

You should now be able to join a voice channel without using discord!

As a warning though as of the writing of this Music bots are super loud so tell your friends not to torture your ears.

If you want someone to move you to another voice channel just have them run !mumble-discord auto then !mumble-discord link when they are in the voice channel they want you to join in.

Streaming

Streaming can't be bridged but you can always use other services. I personally use Metastream for streaming web-based content, pretty much the only use I give the Brave browser. It works pretty well and works for a movie night when streaming movies off sketchy streaming sites and youtube stuff. Syncplay is another alternative and is self-hostable, it's okay for youtube and works for downloaded files as well... but all users have to download the file before it can be watched making it fail for a movie night.

As for streaming games and other content all you got is OBS plus Self-hosted streaming server or Peertube/LBRY.

Of course this stuff is not as good as Discord streaming (streaming tends to be quite behind on most other services) but it doesn't work on Linux anyway. You also can't watch your friends if they are streaming but to me that's not much of a loss. Although I can see why it could be a deal breaker (though trying to convince them to use other means is worth a shot).

There's no way yet as far as I know to bridge video but to me that's quite minor, and I'm sure if your nerdy enough to set all this up yourself you don't really care for it either.

Conclusion

Hopefully now you can use Discord much less if at all. I've been running this set up for a while now and I barley ever use Discord now. It's been worth it for me so I hope it is for you! Now you can be more private while slowly moving your friends over and hey, if they are too stubborn no problem.