Skip to content

Instantly share code, notes, and snippets.

@smiley
Last active July 19, 2024 23:33
Show Gist options
  • Save smiley/78c1c2a57d17a179a978a1438b389710 to your computer and use it in GitHub Desktop.
Save smiley/78c1c2a57d17a179a978a1438b389710 to your computer and use it in GitHub Desktop.
How to make an automatic "stream's live" notification for your Discord server

Making an automatic Twitch -> Discord notification (using IFTTT)

So you went live and you want everyone to know. Here's how you do it:

Part 1 - Register on IFTTT

Go to https://ifttt.com/ and create an account (if you don't already have one)

Part 2 - Make a Discord Webhook

  • Find the Discord channel in which you would like to send Tweets.
  • In the settings for that channel, find the Webhooks option and create a new webhook. Note: This URL should be kept private. It allows anyone to write messages to that specific channel using that specific URL. Keep it safe! WebhookDiscord
  • Name the webhook however you like and feel free to change the generic profile picture. I chose this icon as it fits the circle nicely.
  • Copy the URL somewhere and keep it handy for the next step.

Part 3 - Create a new IFTTT applet/recipe

  1. Go here to create a new "Applet"
  2. Click the big blue "[+] This" and choose "Twitch" (use the search bar to find it quickly)
  3. Connect your account if necessary.
  4. Choose "New stream started by you" (it should be the 2nd option from the left)
  5. Click the big blue "[+] That" and choose "Webhooks"
  6. Choose "Make a web request" (it should be the only option)
  7. Fill in the following details:

    URL: [your URL from "part 2" above] Method: POST Content type: application/json Body: [see the snippet below]

  8. Click "Create Action"
  9. Done!

Snippet for "Body"

Webhooks are super-customizable and allow you to make pretty well-detailed visuals. However, their format is also somewhat complex to get right without extensive testing, so here's a template which would be useful to most people:

{
  "content": "{{ChannelName}} went live on Twitch",
  "embeds": [{
    "title": "{{ChannelUrl}}",
    "url": "{{ChannelUrl}}",
    "color": 6570404,
    "footer": {
      "text": "{{CreatedAt}}"
    },
    "image": {
      "url": "{{StreamPreview}}"
    },
    "author": {
      "name": "{{ChannelName}} is now streaming"
    },
    "fields": [
      {
        "name": "Playing",
        "value": "{{Game}}",
        "inline": true
      },
      {
        "name": "Started at (streamer timezone)",
        "value": "{{CreatedAt}}",
        "inline": true
      }
    ]
  }]
}

This snippet produces this snippet: (for the channel "xQcow"): Example using xQcow's channel

Custom message

If you'd like to customize the message text -- "xqcow has gone live on Twitch!" -- change the content attribute:

{
  "content": "{{ChannelName}} has gone live on Twitch!",
  "embeds": [{

Show your Twitch profile picture in the embed (advanced)

If you'd like to show your Twitch profile picture in the box:

  1. Go to Twitch
  2. Right-click your profile picture in the top-right:

User area on Twitch.tv

  1. Click "Copy image address"
  2. Paste that address into this blob instead of <IMAGE_URL>:
"thumbnail": {
  "url": "<IMAGE_URL>"
},
  1. Paste that blob below the image area in the main blob, so that part would change from this:
    "footer": {
      "text": "{{CreatedAt}}"
    },
    "image": {
      "url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_{{ChannelName}}-1280x720.jpg"
    },
    "author": {
      "name": "{{ChannelName}} is now streaming!"
    },

To this:

    "footer": {
      "text": "{{CreatedAt}}"
    },
    "image": {
      "url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_{{ChannelName}}-1280x720.jpg"
    },
    "thumbnail": {
      "url": "<IMAGE_URL>"
    },
    "author": {
      "name": "{{ChannelName}} is now streaming!"
    },

Note: The image address you just used for your Twitch profile picture may stop working if you change your picture. I'm not sure how Twitch manages those.

Credits

@gothicserpent
Copy link

gothicserpent commented Jul 1, 2020

I also used <<< >>> instead of {{}} because I was getting Error 400.

{{ }} must be used. it works for me using the standard discord webhooks. copy the body as seen exactly in the example.

if it still doesn't work, you may need to delete and re-create the connection on ifttt, and then disconnect the twitch account on twitch.tv and reconnect it from ifttt; should work then after a refresh. i had to to this once.

I also noticed that only if i stream for about 5-10 minutes or more does the "Game" tag get populated. so if you are testing, try to leave the test stream on for about 10 minutes and await the discord notify before you chalk it up as a false positive. just some info there.

@JoK1ngg
Copy link

JoK1ngg commented Aug 9, 2020

What are valid inputs for "name": "Started at (streamer timezone)", ?

@smiley
Copy link
Author

smiley commented Aug 9, 2020

@JoK1ngg

That's a field definition, "name" is the name of that field and "value" is, well, its value. (check the screenshot)

@JoK1ngg
Copy link

JoK1ngg commented Aug 9, 2020

Thats not what I meant. What can i put there if I am from Europe. I didnt find anything that works. Im looking for a replacement for "streamer timezone".

@smiley
Copy link
Author

smiley commented Aug 9, 2020

@JoK1ngg

That's not input, it's part of the actual text. I added it because the time shown doesn't adapt to the user's timezone (unlike Discord message timestamps) but is instead controlled by the IFTTT account's set timezone.

@NiftyRascal
Copy link

image

Sadly this solution just doesn't work quickly enough. Does anyone else have a bot which you can use a custom name with that will announce stream go live with a few minutes?

@dhatwalia
Copy link

This definitely worked for me on the first try, even adding the stream preview into the code. So this 100% does work as of Sept 2020. However, I am definitely seeing the same issue that others have noted, which is that the post isnt happening in Discord for 30+ mins. Has anyone found a fix to this? Otherwise, still very much loving it!

30 min delay might be due to IFTTT. Perhaps purchasing Pro will solve it.

@xCrimsonRain66x
Copy link

Mine works wonderfully. Thank you for the tutorial! My only issue is that it only gives me a select few of the pages that I follow to choose from when making the notifications. How do I include those who aren't showing up on the list?

@xCrimsonRain66x
Copy link

This definitely worked for me on the first try, even adding the stream preview into the code. So this 100% does work as of Sept 2020. However, I am definitely seeing the same issue that others have noted, which is that the post isnt happening in Discord for 30+ mins. Has anyone found a fix to this? Otherwise, still very much loving it!

30 min delay might be due to IFTTT. Perhaps purchasing Pro will solve it.

I purchased Pro, and there is still a delay.

@dhatwalia
Copy link

This definitely worked for me on the first try, even adding the stream preview into the code. So this 100% does work as of Sept 2020. However, I am definitely seeing the same issue that others have noted, which is that the post isnt happening in Discord for 30+ mins. Has anyone found a fix to this? Otherwise, still very much loving it!

30 min delay might be due to IFTTT. Perhaps purchasing Pro will solve it.

I purchased Pro, and there is still a delay.

You can expect up to 5 min delay with Pro.

@FakeAardvark199
Copy link

How do you add the title of the stream to the Webhook?

I was wondering that as well I'm trying to copy how mee6 does the alerts but do it myself without having to pay for mee6 premium so I can help advertise my friends in my server

@dhatwalia
Copy link

How do you add the title of the stream to the Webhook?

I was wondering that as well I'm trying to copy how mee6 does the alerts but do it myself without having to pay for mee6 premium so I can help advertise my friends in my server

Screenshot 2020-10-12 113531

These are the list of available ingredients. At the time of writing this comment, it is not possible.

@pokertrojangaming
Copy link

Hi,

I have this working and has been since set up but I am finding that the stream preview is always the same. Is this just a bug or do I need to change something? Do I need to change or add a standardised preview as when I stream different games it is just the same image on all streams.

@DeFlanko
Copy link

DeFlanko commented Jan 4, 2021

Thanks for this repo!

Is the "image": { "url": "{{StreamPreview}}"} currently working? ...I'm still just getting the twitch logo

its 2021 and I too am experiencing this no image preview issue.

@smiley
Copy link
Author

smiley commented Jan 4, 2021

Thanks for this repo!
Is the "image": { "url": "{{StreamPreview}}"} currently working? ...I'm still just getting the twitch logo

its 2021 and I too am experiencing this no image preview issue.

There's nothing we can do about that, it's entirely on Twitch's end. If you scroll up you'll see even the direct URL I tried before is just the basic Twitch logo default preview. If you find a better URL to replace that feel free to suggest it. But generally this entire thing isn't that good anymore since IFTTT introduced applet limits.

Copy link

ghost commented Jan 18, 2021

Hi
I did all the setup but when I'm live I will not get any on my discord channel.
Applet is connected.
But it doesn't work.

@DeFlanko
Copy link

DeFlanko commented Jan 19, 2021 via email

@quilir
Copy link

quilir commented Mar 11, 2021

It works only 2/3 times. It can choke so badly that it does not send notification even after repeated refreshing, archive/restore, creating the whole new snippet. Not recommended

@uKCooki3
Copy link

uKCooki3 commented May 3, 2021

Does this still work?

@svalencia014
Copy link

Is there anyway to ping a role with the Webhook. I have a role in my discord server called @Twitch Notifs where when people get the role, I would ping them so only people who wanted the pings would get them.

@ThePaulAdams
Copy link

Is there anyway to ping a role with the Webhook. I have a role in my discord server called @Twitch Notifs where when people get the role, I would ping them so only people who wanted the pings would get them.

Right click on the role and Copy the ID, then in the message use <#00000000000000> replacing the zero's with the role Id that you coppied.

@DeFlanko
Copy link

DeFlanko commented Jun 25, 2021 via email

@Grizzly1987
Copy link

Hello, thank you very much for this great tutorial;). But I have one more question. Is there a possibility to include a query? The following procedure. On our Discord server there is the role @streamer, everyone who has this role is linked to his or her Twitch channel in our bot. Now the bot should only write in the channel (live status) if this streamer only plays a certain game (from our GTA RP server). If he plays other games, no live notification should be posted. Warm greetings

@wild-eragon
Copy link

Hey there, good job with it! By chance, would you have any code for this using a RSS feed?

@Jankeczek
Copy link

it works really well, thanks... BUT uhh do ya'll know is there an option for it to not be english and not use A.M and P.M stuff?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment