DEV Community

Send automated Discord messages through Webhooks using JavaScript

Oskar Codes on February 09, 2020

I'm sure you've heard of Discord, the all-in-one voice and text chat app, and maybe you're even using it. Well did you know that it is possible to ...
Collapse
 
tr11 profile image
Tiago Rangel • Edited

This is cool! Congrats for the article!!!
Did the second part lunched?

Collapse
 
suther profile image
Samuel Suther

Really nice article.
I've also made one, how to connect your Linux-Server to Discord.
It might be useful as additional information if somebody need to trigger a message from a server-process, instead out of JS.

just-sell-online-en.blogspot.com/2...

Collapse
 
jetfire158 profile image
jetfire158 • Edited

So I can just store the html file on the local machine? What would I need to add in order to tell it to execute every 2 hours? And could I run the webhook off of heroku or somewhere so that I wouldn't have to keep my PC on in order for it to work?

Collapse
 
oskarcodes profile image
Oskar Codes

You could start a Node server and use a node module like this one: npmjs.com/package/discord-webhook-...
Then you could maybe use a window.setInterval to execute it repeatedly with an interval.

Collapse
 
abidtkg profile image
Abid Hasan

Thank you!

Collapse
 
reelock profile image
Alessandro • Edited

Hello, Really cool, thanks a bounch!
it his possible to do something like this inside discord app?
I'm using Telegram and it has the cool option to let you write commands in a text message. Then the user click it and Telegram simply repeat the link content and send it to your bot.
Something like this

'Click /done when you have done.'

when you click (or tap) on /done, telegram send a message like this

/done@YourCoolBot

and your bot grab it as a regular command, like if you wrote /done yourself in the text line.

i would like to replicate the behavior on discord to or, if not possible since it seems not, at least do something like that

Collapse
 
oskarcodes profile image
Oskar Codes

You mean having some programmed logic when pressing links on the message sent by the Webhook?

Collapse
 
htmlconverter22 profile image
HtmlConverter22 • Edited

This is very nice and all, but I have a question:

So I made a simplistic website and I want to add a webhook notifiyer right

Basically they paste their webhook in a textbox, and when they press a button,
a message I made gets sent to the webhook they posted in the text box.

I'd like to know how to do this please, and thank you.

Collapse
 
craigseller1979 profile image
craigseller1979

what html editor do you use because i kinda need one lol

Collapse
 
tr11 profile image
Tiago Rangel

vscode is very good

Collapse
 
oskarcodes profile image
Oskar Codes

I use Visual Studio Code

Collapse
 
lecade09 profile image
a13bfg

for me personally i use repl.it, its online based, fast, and you don't need to download anything it supports multiple languages and it can be used as a website hoster.

Collapse
 
tr11 profile image
Tiago Rangel

Glitch is much better in my personal opinion

Collapse
 
kenzodk profile image
nipundil • Edited

I need to embed telegram post via this method to my discord channel. How to do it.
The embed code looks like this
<script async src="https://telegram.org/js/telegram-widget.js?19" data-telegram-post="codewithdila/2" data-width="100%"></script>

Collapse
 
lecade09 profile image
a13bfg

How do i make it send the content that was in the text box of a html page
like an discord webhook sender

Collapse
 
oskarcodes profile image
Oskar Codes

Set the content field to the value of your input:

content: document.querySelector("input").value // could be "textarea" as well
Enter fullscreen mode Exit fullscreen mode
Collapse
 
konrad_szacha_96d4d2fe379 profile image
Konrad Szacha

i did it like that but this is dont working please help me bro
<br> function sendMessage() {<br> const request = new XMLHttpRequest();<br> request.open(&quot;POST&quot;, &quot;<a href="https://discord.com/api/webhooks/921856294481186857/cJd-f85MqKVdLyFotaxZf7yzWH-ILK3VGPL1H7W2IX7UsQwIs0yDEap7cG4oF18uE4K0%22" rel="nofollow">https://discord.com/api/webhooks/921856294481186857/cJd-f85MqKVdLyFotaxZf7yzWH-ILK3VGPL1H7W2IX7UsQwIs0yDEap7cG4oF18uE4K0&quot;</a>);</p> <div class="highlight"><pre class="highlight plaintext"><code> request.setRequestHeader('Content-type', 'application/json'); const params = { username: "My Webhook Name", avatar_url: "", content: document.querySelector("input").value } request.send(JSON.stringify(params)); } </code></pre></div> <p>


and how i should modify this

Thread Thread
 
oskarcodes profile image
Oskar Codes

Where did you copy that code from? That’s some plain HTML displaying JavaScript code, not executing it.

Collapse
 
saucierpond profile image
SaucierPond • Edited

Hey @oskarcodes ! My code doesn't work. Can you please check why?

function sendMessage() {
    const request = new XMLHttpRequest();
    request.open("POST", "https://discordapp.com/api/webhooks/676118118082281513/ZS5YcWhurzokBrKX9NgexqtxrJA5Pu2Bo4i7_JsIxC-JIbPBVhSZkcVVukGOro52rnQA");

    request.setRequestHeader('Content-type', 'application/json');

    const params = {
        username: "My Webhook Name",
        avatar_url: "",
        content: "The message to send"
    }

    request.send(JSON.stringify(params));
}
Enter fullscreen mode Exit fullscreen mode

Thank you!

Collapse
 
oskarcodes profile image
Oskar Codes

Your code looks fine, it must be the Webhook URL endpoint that is wrong

Collapse
 
bigboielthico69 profile image
BIGBOIELTHICO⁶⁹

How would I make it to where I make a text submit box and get whatever hey typed in sent to the webhook?

Collapse
 
oskarcodes profile image
Oskar Codes • Edited

Make an HTML <input> element, select if from JavaScript, and pass the .value of that element to the payload you send to your Webhook.

Collapse
 
bigboielthico69 profile image
BIGBOIELTHICO⁶⁹

can you make an example of this please im really new to this

Collapse
 
shllshckd profile image
shllshckd

Works flawlessly. <3

Collapse
 
teodorv2 profile image
TEODORv2

Hi! So I wanted to enter the content directly from the html page, so I made a label, but I don't really know how to link the label's entered input to the content value. Anyone got any ideas? I'm really new to html, css and java so I don't really know much.

Collapse
 
oskarcodes profile image
Oskar Codes

Set the content field to the value of your input:

content: document.querySelector("input").value
Enter fullscreen mode Exit fullscreen mode
Collapse
 
enteruserhere22 profile image
EnterUsernameHere

How do you make it like send a message every 24 hours?

Collapse
 
br4dy0 profile image
Bradley Elko • Edited

set a timer for 24 hours that sends a request

Collapse
 
enteruserhere22 profile image
EnterUsernameHere

What would be the code to do that?
Sorry I am not very experienced at this.

Thread Thread
 
oskarcodes profile image
Oskar Codes

In JavaScript, you can use the setInterval method to run some code repeatedly.
Check out the documentation: developer.mozilla.org/en-US/docs/W...

Collapse
 
mmmm2006 profile image
Mmmm2006

Une partie 2, une partie 2, une partie 2

Collapse
 
oskarcodes profile image
Oskar Codes • Edited

Ça arrive bientôt

Collapse
 
kengreg profile image
kengreg

hi, thanks for the help. Can you write also how to get messages from a channel? I am trying but everything and everyone just use discord.js which I cant use in my project

Collapse
 
oskarcodes profile image
Oskar Codes

Webhooks cannot read data from channels, because they're just HTTP endpoints you send requests to, there's no code logic involved in the Webhook on Discord's side.
So yeah, you'll have to use Discord.js to read from channels

Collapse
 
therayjohnson profile image
TheRayJohnson

Is it possible to do multiple webhooks? Like a dropdown menu of channels and selecting X channel from the form dropdown list will use Y webbook?

Collapse
 
oskarcodes profile image
Oskar Codes

Yes that’s totally possible, just check which option is selected in the drop down, and send to a different webhook url based on that

Collapse
 
dejvy profile image
Dejvy

Uhm hello, can i ask, I'm getting error from CORS Policy, how should i fix it?

Collapse
 
oskarcodes profile image
Oskar Codes

Then your webhook endpoint must be wrong, check it again.

Collapse
 
censorrmc profile image
censorr

Is there a way to make it so it sends multiple lined messages? In this it only allows me to send a message that is in all one line.

Collapse
 
oskarcodes profile image
Oskar Codes

Add the character \n to create a newline, like so:

content: "The message\nto send"
Enter fullscreen mode Exit fullscreen mode

Otherwise you could use backsticks instead of quotes, like so:

content: `The message
to send`
Enter fullscreen mode Exit fullscreen mode
Collapse
 
abdus_salam_a81f8fe5dba4c profile image
abdus salam

How do you send the same messages to multiple server ??

Collapse
 
oskarcodes profile image
Oskar Codes

Make requests to multiple webhook endpoints

Collapse
 
misterymissile profile image
misterymissile

How do I make it send a variable in the content: parameter?

Collapse
 
oskarcodes profile image
Oskar Codes

Well you can just put your variable in there instead of the string

content: yourVariableName
Collapse
 
scrap_olive profile image
WikiNope

How would you post an updating game log through discord?

Collapse
 
oskarcodes profile image
Oskar Codes

Same logic as explained in this article, just that the environment is your game framework or engine.

Collapse
 
thinker010 profile image
Punith Reddy V

can we put text box instead of writing the message in code all the time pls help

Collapse
 
oskarcodes profile image
Oskar Codes

Yes you can, just use the value property of the text box and pass it in the object that is sent in the webhook payload.

Collapse
 
notflamee121 profile image
NotflameE121

can you link the enbed vid plz ty

Collapse
 
oskarcodes profile image
Oskar Codes

Which video?

Collapse
 
ianmoon06377246 profile image
Ian Moone

Is there a way to use webhook to send a private message if person is on the server which my app is connected to?

Collapse
 
oskarcodes profile image
Oskar Codes

No, for that you’ll need a Discord bot. A webhook can only send to server channels.

Collapse
 
andykvideo profile image
Andy • Edited

Can you send an image instead of text to the discord server? if so, what's the code?

Collapse
 
idk1232130 profile image
i need name ideas 💀

hey there is a problem for some reason it gives me this error:
(index):1 Uncaught ReferenceError: sendMessage is not defined
at HTMLButtonElement.onclick ((index):1:1)
can you help me fix it?