-
-
Save Bilka2/5dd2ca2b6e9f3573e0c2defe5d3031b2 to your computer and use it in GitHub Desktop.
import requests # dependency | |
url = "<your url>" # webhook url, from here: https://i.imgur.com/f9XnAew.png | |
# for all params, see https://discordapp.com/developers/docs/resources/webhook#execute-webhook | |
data = { | |
"content" : "message content", | |
"username" : "custom username" | |
} | |
# leave this out if you dont want an embed | |
# for all params, see https://discordapp.com/developers/docs/resources/channel#embed-object | |
data["embeds"] = [ | |
{ | |
"description" : "text in embed", | |
"title" : "embed title" | |
} | |
] | |
result = requests.post(url, json = data) | |
try: | |
result.raise_for_status() | |
except requests.exceptions.HTTPError as err: | |
print(err) | |
else: | |
print(f"Payload delivered successfully, code {result.status_code}.") | |
# result: https://i.imgur.com/DRqXQzA.png |
thanks!
tysm
this does multiple things in a weird way that it doesn't need to, like assigning to a dict after creating it and manually dumping JSON instead of letting requests handle it.
I recommend this simpler variant:
import requests
url = "<your webhook url>"
embed = {
"description": "text in embed",
"title": "embed title"
}
data = {
"content": "message content",
"username": "custom username",
"embeds": [
embed
],
}
headers = {
"Content-Type": "application/json"
}
result = requests.post(url, json=data, headers=headers)
if 200 <= result.status_code < 300:
print(f"Webhook sent {result.status_code}")
else:
print(f"Not sent with {result.status_code}, response:\n{result.json()}")
i am new to this and this helped a lot, but i just found out that you don't really need to define the headers or pass them as a parameter if you are passing the data into JSON, like laundmo did just above. the code defined below would just work fine as the one above.
`import requests
url = "put webhook url"
embed = {
"description": "text in embed",
"title": "embed title"
}
data = {
"content": "message content",
"username": "custom username",
"embeds": [
embed
],
}
result = requests.post(url, json=data)
if 200 <= result.status_code < 300:
print(f"Webhook sent {result.status_code}")
else:
print(f"Not sent with {result.status_code}, response:\n{result.json()}")
@z0ned-out you're right of course, requests will set the header automatically
Hey, thank you for the recommendations @laundmo and @z0ned-out. I have integrated them into the code and also updated the linked example images for the newest discord layout.
Note that f-strings are not used in the example to preserve compatibility with versions below Python 3.6. With f-strings the last line could be print(f"Payload delivered successfully, code {result.status_code}.")
.
@Bilka2 Python 3.5 has already reached its End of Life, there is no reason to support it. f-strings are way more performant and readable than .format and as such should ideally be used.
My desire to support pre-3.6 is a good enough reason to keep the code how it is.
Is there a way to attach embed images?
Hey guys, is there a way to send texts that are actually links?
like in html e.g(Text)
I am trying to send shoe sizes as a message to my chanel, and I want to be able to click on those sizes and itll take me to the respective page of each size
@andyias you can use markdown links in the webhook content
[the link](https://example.com)
this is something unique to webhooks, and won't work for normal discord messages.
@Senoel i recommend taking a look at https://leovoel.github.io/embed-visualizer/ (make sure to click on "webhook mode")
you can also take a look at https://birdie0.github.io/discord-webhooks-guide/structure/file.html for sending files without an embed
very useful
very useful, since im a noob with python :D
Neat, thanks!
how would one attach a file?
do we just use .read() for the contents? and where does the file name go?
how would one attach a file? do we just use .read() for the contents? and where does the file name go?
@Hypurrnating I think you can use this:
requests.post("<your webhook url>", json = {"content": "<your message here (you can just set to an empty string)>"}, files = {"myfile": open("<your file path here>", "rb")})
Note that you can change myfile
to anything other, and so, add multiple items into the dictionnary passed to files
by changing the name.
thanks for making, super simple, easy to use. :)