Why use Discord?

If you’ve got a regular audience of the same people—let’s say 25 viewers—Discord can be great for growing and retaining followers.


Each community is a server with a number of users. Each server has a number of channels.

You log in with the same user to all servers. Some servers will allow you to change your display nickname on a per-server basis.

The following section on Connections will explain to you the importance of understanding the pitfalls of using the same user across different servers—not that there aren’t pitfalls of using one user per server, as is the case with a service like Slack.

I really recommend checking out Discord’s official guide, which can be useful to read before and after you to through this guide. That way you can fill in any gaps left by the official guide.


Here are some basic things that can be very detrimental to your server if you don’t address them:


When you start out, you’ll probably want to keep the number of channels as low as possible, unless you’ve got some very specific channels in mind. Your activity is not going to be as great as you think it will, and separate channels mainly work for “other stuff” you want to include that may not be in the interest of some of your members.

Discord have written their own guide on [“How to get the most out of your Community Server”][official-guide].

Consider the channel suggestions below something to only worry about if you’ve got a channel growing rapidly.


A welcome channel tends to serve the function of onboarding new users. You’ll usually see these for big servers where teaching people the rules of the server on an individual basis don’t scale.

You won’t need this channel for a long time until moderating and managing new users is getting out of hand. At that point, you just do the following, to quote the official guide:

  1. Create the welcome channel
  2. Deny @everyone the Send Messages permission.
  3. Give a mod or yourself the Send Messages permission.


An announcement channel works in a similar way with the only difference being that this channel will be active with new updates and announcements posted by people (or bots) permitted to do so.

The idea of an announcement channel is generally to be able to message all users in a nonintrusive and noise-free way. I don’t know if this is important to you if your audience is relatively low.

Often, #announcements can too dramatic a name, and also misleading about what users might find there. Is it even a good idea to use the channel when you’ve got things like your Twitter account to notify your audience.

Consider setting up an alternate #feed, #updates, or something similar for a catch-all automated feed for all notifications of you going live on Twitch or your posts to social media. This type of feed will still be useful for a small and growing channel. You can also just post these things to your #general channel, but depending on how much you publish, you might opt to publish it in a separate channel with or without permission for other users to post there.

Be sure to check out the IFTTT guide below for information on how to set up automated posting to your Discord when you go live on Twitch, post to social media, and much more.


A channel dedicated to posting Twitch clips and other shared moments from the stream.

Reaction buttons work particularly well for this kind of channel.


Talk about the last stream. Keeps it out of general chat and encourages people to comment more on each stream.

Voice channels


This is a voice channel specific to your live stream. Only select people, if any, can join the channel; the rest you’ll have to manually move to the voice channel.

Remember to set the bitrate quality of the voice channel to the maximum 96 kbps.

Inviting users

Next, you’ll probably want some people to actually join your server.

So how do you get people to join your bloody server?

First, let’s see how the Discord people explain it in their official guide:

An animation of how to create an invitation code in Discord from the official guide

So what you do is create an invitation link to your discord with or without an expiration date. The invitation code will have some garbled URL similar to a bit.ly.

The interface is a little different than the animation, but you end up with an invitation link like discord.gg/a1s2d3f4.

The obscurity of the link can be a good thing, but if you have no reservations about sharing your link, you might something more friendly instead.

Enter DiscordMe.


With DiscordMe, you can get an invitation link like discord.me/{yourName}. This easier to remember and looks a lot better in writing such as on overlays or stream graphics. If you’re a nerd, you can of course also just set up a redirect from {yourwebsite}/discord/join or something such to your obscure invitation link.

Get your butt to discord.me and create a user. When you’re done, go to your dashboard and click Add Discord Server.

Form for adding a Discord Server to DiscordMe

Filling out your information is extremely straightforward except for the Server ID field. To find this information, go to your Server Settings, then Widget. Enable Widget, pick the channel people are invited to, and copy-paste the Server ID.

If you’ve got a #welcome channel, this is the ideal place to invite new users.

I’d make sure “Public” is unticked if I were you, as you probably don’t want to show up in a public list of Discord channels.

Finish up, and you should now have a working discord.me/{yourName} link redirecting people to your invitation link. It’s not the smoothest workflow, but at least we got there eventually.


The current connections are:

These services tend to serve two purposes:

  1. Profile display
  2. Syncing friends to Discord

The only exception I’ve noticed is Twitch, which also enables:

One really frustrating thing about this is that your Twitch subscriptions don’t always carry over to Discord and show up in your list of sub-only servers. I’ve had that happen, and Discord appear pretty blasé about it.

Privacy issues

Do you really need to use those connections?

The main thing to understand is that connections have no per-server settings.

If you want to show something in your profile, you should do so thinking about what you wouldn’t mind everyone seeing in any situation.

Here’s a really shitty thing: using the YouTube connection’s “Display on profile” displays the e-mail address associated with your server, not the URL.

I don’t know who thought this was a good idea, but it serves as a reminder to guard your privacy carefully without putting your trust into people or apps that don’t deserve it.

Another shitty thing about Discord is that Streamer Mode, the supposed privacy shield for streamers, does not hide the friend suggestions1, which is really, really bad when Discord is suggesting you a Battle.net friend with their entire BattleTag.

Friend suggestions with Streamer Mode disabled
Friend suggestions with Streamer Mode disabled. User’s BattleTag revealed.
Friend suggestions with Streamer Mode enabled
Friend suggestions with Streamer Mode enabled. User’s BattleTag still revealed.

When it comes to privacy and contact lists, it’s important to remember that you don’t always have to leak your information for others to access it; it’s enough that your friends leak it for you.

In other words, you have to use Discord’s connections very carefully, if your privacy matters to you, and of them all, you only need the Twitch connection to access the Discord servers of Twitch streamers you subscribe to.

As more connections are added, it’s going to be difficult to keep this section updated. Meanwhile, I keep a copy of my own Discord settings you can use instead.

Just remember the main take-away here:

  • Don’t display something you don’t want in your Discord profile
    • Be sure to check what is actually displayed
  • Don’t use friend sync features

Nightbot connection

Nightbot is pretty much a mandatory Discord tool—like BetterTTV for Twitch chat—as it does things like transferring all your Twitch commands to Discord. Read the Nightbot section in the moderation guide for more info.

Partner program

On top of all their services, Discord offer a Partner Program.

The first thing to know about this is that, if you’re already a Twitch Partner, you’re automatically qualified for a Discord Partner. Otherwise, you have to meet some criteria outlined on the site.

The partner program perks aren’t that amazing so they’re honestly not worth getting into. They’re nice if you qualify, but you’re not really missing out if you don’t.


Misleading sliders

Look at the sliders for input volume and output volume:

The “Input volume” slider is maxed, and the “Output volume” slider is only half-way

Note or write down what you think each of the two settings are at.

You guessed it, they are both at 100%—what.

You have to mouse over each slider to see the value, which is another sloppy interface design. Keep this in mind if you just want to set both sliders at “max” or 100%—both of which clearly aren’t the same for output volume.

I’ll admit to being completely tripped up about this, so make sure you don’t make the same mistake and put your headphones on blast by maxing out the output volume to “match” the slider on input volume.


Audio attenuation turns down the volume of other apps, when someone is speaking. This is a great idea in theory, but on Windows 10, this messes up your Sound Mixer sliders—even when no one is speaking.

Be sure to right-click your volume icon and see whether the audio level for each app are on par after you’re done streaming and using Discord.

Here is where to turn it off:

“Do Nothing” when Windows detects communication activity

If you don’t want to mess with too much, attenuation can be a decent compromise, but if you plan on taking streaming seriously, you’re better off managing all your audio in a mixer or DAW—as my audio guide addresses.

Voice-channel bitrate

The default bitrate for voice channels is 64 kbps. You might want to use 96 kbps—especially for your #stream voice channel.

Bots and triggers


Mee6 looks like the Nightbot of Discord. You’ll have to inspect all the features yourself, but it seems like a mandatory bot that conveniently lets you opt in to features rather than tossing them all at you.


Another similar bot is Tatsumaki. It does a bunch of stuff by default which I’d prefer were opt-in, so it requires more managing than Mee6.

IFTTT triggers

To continue where we came from in the tools guide:

IFTTT (IF This Then That) now has Twitch support. What this means is that you can create recipes where one event triggers another. This is particularly useful when you don’t want to post in five different places at once about going live or something else. Here are some useful recipes:

Go see all the IFTTT Twitch recipes.

This also lets you create bot-like triggers in your Discord server, but that takes some more effort that I’ll go through in my upcoming Discord guide.

Post your tweets in Discord
  1. Click your top-right dropdown
  2. “New Applet”
  3. Click “this”
  4. Search for “Twitter” and pick it
  5. Connect to Twitter and log in
  6. Pick “New tweet by you”
  7. Check whichever tweet types you want to include and click Create
  8. Click “that”
  9. Search for “Maker” and pick it
  10. Connect
  11. Click “Make a web request”

For the next step, you need to set up your webhook URL in Discord.

  1. “Server settings”
  2. “Webhooks”, “Create Webhook”
  3. Name it something like “Twitterbot” or “Cygnatus tweets”
  4. Assign it to a channel to roam
  5. Give it a 128×128 avatar such as the Twitter logo
  6. Copy the webhook URL to clipboard

(NB: Be careful to click the green “Save” in the top right, as clicking “Done” will discard any changes you make. Dumb, I know.)

Now we return to IFTTT.

  1. Paste your webhook URL
  2. Set “Method” to “POST”
  3. Set “Content Type” to “application/json”

I’m gonna take a commercial break to explain a few things so you aren’t just cluelessly copy-pasting what I’m telling you to without the faintest idea of what is happening.

If you click the Ingredient button, you can choose some variables to put in your body. They have curly brackets around them when pasted:

These are tweet-related variables you can include in the Discord response.

Earlier on, we set the Content Type to “application/json”; this is the “data language” we will use to communicate your tweet to Discord’s webhook. Here are the JSON parameters for Discord’s webhooks according to their webhook documentation:

Since we named our webhook and gave it an avatar already, we only need the content parameter.

At minimum, our content should include a link to the tweet; this tweet link will be parsed by Discord and displayed, in full, image and all, in the Discord.

I suggested we go with something like “@ just tweeted “.2

Let’s reformat this as a JSON message that Discord will understand:

{"content": "@{{UserName}} just tweeted {{LinkToTweet}}"}

Paste all this in the last field of our form and create the trigger.

Ya dun! Although I’d probably turn off Receive notifications when this Applet runs, assuming you’re not astronomically vain.

Pay attention to this part, though:

This Applet can be delayed by up to an hour

In other words, using IFTTT can be too unreliable for announcing livestreams—but you’ll usually want to write a manual tweet to allow viewers to prepare to tune in. When it comes to your tweets, the sense of urgency is less significant.

Compare the IFTTT-powered Twitterbot with the Discord bot ErisBot:

ErisBot triggers immediately after a tweet, while IFTTT's Twitterbot takes 16 minutes.

I actually misspelled the Twitter handle of Guerrilla Games, so I ended up republishing the tweet. This time around, the difference was a whopping 56 minutes, so they’re clearly not kidding about that one-hour delay.

Special thanks to Huang Austin’s illuminating webhook guide! He links to some other guides for places like Reddit and GitHub as well, and he has an unlinked guide for IFTTT and YouTube as well.

Having gone through all this, you should have a good idea of how to use Discord webhook with other services; the only difference with other services is that you have to connect to them and then figure out which variables (“ingredients”) you can use in your content message. If you’re feeling adventurous, try experimenting with another service and see if you can get it to work. If you can, it means you finally understand how this stuff works!

Since I’m setting up my IFTTT and Discord anyway, let me just go through how you set up an automated alert in your Discord when you go live on Twitch.

Post in Discord when you’re live on Twitch

First, see if you can do this without reading the guide, since I already walked you through the guide for posting tweets in your Discord. Give it a go for half an hour, and if you still can’t get it to work, you have my permission to read this.

  1. Click your top-right dropdown
  2. “New Applet”
  3. Click “this”
  4. Search for “Twitch” and pick it
  5. Connect to Twitch and log in
  6. Pick “New stream started by you”
  7. Click “that”
  8. Search for “Maker” and pick it
  9. Connect
  10. Click “Make a web request”

For the next step, you need to set up your webhook URL in Discord.

  1. “Server settings”
  2. “Webhooks”, “Create Webhook”
  3. Name it something like “Twitchbot” or “Cygnatus on Twitch”
  4. Assign it to a channel to roam
  5. Give it a 128×128 avatar such as the Twitch logo
  6. Copy the webhook URL to clipboard

Back to IFTTT:

First, paste the webhook URL into its field.

Then we use the “ingredient” variables to compose a good Discord message. I’m just gonna go with this and experiment with it later:

{"content": "{{ChannelName}} has started streaming {{Game}} at {{ChannelUrl}}"}

Paste and create, and turn off notifications for when the trigger runs.

There we go. If you set up a trigger that posts to social media, you can use the same content message, except in plain text:

{{ChannelName}} has started streaming {{Game}} at {{ChannelUrl}}

Let’s rephrase it a bit, since people will already know who you are. We’ll also just put the link at the end without making a complete sentence out of the tweet:

Streaming {{Game}} {{ChannelUrl}}

The “this” is still the same, as it will be triggered by your stream going live; you just pick a different “that”.

It’s worth reminding you that tweeting every time you go live only makes sense if your “LIVE!” messages don’t make up 30% of your timeline or Discord channel.

Post your Mastodon toots in Discord

Mastodon is a new decentralized, FOSS alternative to Twitter that’s really catching on. I’m on the mastodon.social instance as @[email protected].

Setting up an IFTTT trigger for Mastodon is stupid easy, because all public profiles expose an Atom feed of a user’s updates; just append .atom like so:


  1. Click your top-right dropdown
  2. “New Applet”
  3. Click “this”
  4. Search for “RSS Fed” and pick it
  5. Connect the trigger
  6. Pick “New feed item”
  7. Enter your Atom feed URL and click Create
  8. Click “that”
  9. Search for “Maker” and pick “Maker Webhooks”
  10. Connect
  11. Click “Make a web request”

For the next step, you need to set up your webhook URL in Discord.

  1. “Server settings”
  2. “Webhooks”, “Create Webhook”
  3. Name it something like “Tootbot”, “Mastodonbot” or “Cygnatus toots”
  4. Assign it to a channel to roam
  5. Give it a 128×128 avatar
  6. Copy the webhook URL to clipboard

Back to IFTTT:

(If you want this step explained in more detail, see the Twitter-to-Discord guide above which is so similar it doesn’t make sense to copy-paste the whole thing again.)

First, paste the webhook URL into its field.

  1. Paste your webhook URL
  2. Set “Method” to “POST”
  3. Set “Content Type” to “application/json”

What should our Discord message look like? Let’s say something like “@[email protected] just tooted “.

Let’s reformat this as a JSON message that Discord will understand:

{"content": "@[email protected] just tooted {{EntryUrl}}"}

Paste all this in the last field of our form and create the trigger.

Fin! You may want to turn off Receive notifications when this Applet runs.

It may take up to an hour for your toot to be processed, and requests may be subject to rate-limiting as well.

Press Check now to test your applet for the first time. If nothing happens, go to the settings of your applet and check the activity log.

Example of the Mastodon-to-Discord applet in action

Keep in mind that Mastodon has a 500 character limit so your toot is going to get squished a bit and won’t retain its linebreaks. Because you’re using an Atom feed instead of a Mastodon-specific API, you also can’t filter replies and boosts out of your feed.

If you still can’t get it to work, drop me a note on mastodon.


For a more granular look at Discord settings, check out my “settings project” where I link to a file containing all my Discord settings.

And remember to read the tools guide which features some Discord-related tips.

What next?

Check out the guide for managing and moderating chat. It’s still in development, but there’s already a lot in there.

  1. As of September 4, 2016. ↩︎

  2. But you can include some of the other “ingredient” variables we went through before for your content text. ↩︎