파이썬에서 Discord webhook에 메시지를 게시하는 비망록
같은 것을 초콜릿 초코 만들고 있는데 매번 매번 망설인다.
고민하고 싶은 것은 거기가 아니다.
공식 제대로 읽을 수 있어 이야기입니다만, 샘플 거의 실려 있지 않으므로 비망록.
참고
Discord에 Webhook에 다양한 게시
Webhook Resource
파일
Visualizer and validator for Discord embeds.
Videos in Rich Embeds
소재
python3:3.7.3
json: 2.0.9
requests: 2.21.0
첨부 파일 샘플로 : 브랜드 가이드라인
메시지만
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload = {
"username" : "メッセージ",
"content" : "だけだよ。",
"avatar_url" : "https://github.com/qiita.png",
}
### メッセージだけ
res = requests.post( WEBHOOK_URL, json=payload )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
application/json
, json
지정하기만 하면 됩니다.
webohook URL 에 ?wait=true 을 붙여 주면 content
돌려준다. 붙이지 않으면 status_code
가 204, content
돌아오지 않는다.
채널 아래의 스레드에 투하하고 싶다면 thread_id도 붙여 준다. 아카이브 된 스레드는 자동으로 아카이브 해제 해주는 것 같다.
스레드 ID를 얻으려면 "사용자 설정"→ "앱 설정"→ "고급 설정"에서 "개발자 모드"를 켜면 표시되는 "ID 복사"메뉴에서 복사하는 것이 빠릅니다. .
각각 WebhookURL에 연결하면 이런 느낌.https://discord.com/api/webhooks/{webhookID}/{webhookトークン}?wait=true&thread_id={スレッドID}
첨부파일만
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
### 画像添付
with open("favicon.png", 'rb') as f:
file_bin = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin),
}
res = requests.post( WEBHOOK_URL, files = files_qiita )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
multipart/form-data
, 바이너리 read하고 files
에 지정할 뿐.wait
붙지 않아도 content
돌아온다.
메시지 + embed + 첨부 파일
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload2 = {
"payload_json" : {
"username" :"メッセージと、",
"content" :"添付ファイルと、",
"avatar_url" : "https://github.com/qiita.png",
"embeds": [
{
"title" : "payload_json",
"description" : "embedsそのまま使うと怒られる。代わりにpayload_jsonに全部ぶち込んで文字列にdumpしたら良さげ。ensure_ascii=False 無くても多分大丈夫。",
"url" : "https://birdie0.github.io/discord-webhooks-guide/structure/file.html",
"timestamp" : "2020-08-22T15:18:00+0900",
"color" : 5620992,
"footer": {
"icon_url" : "attachment://favicon.png",
"text" : "Qiita",
},
"thumbnail": {
"url" : "attachment://logo-background-color.png"
},
"image": {
"url" : "attachment://logo-effect-background-color.png"
},
"author": {
"name" : "embedと。",
"url" : "https://qiita.com/",
"icon_url" : "attachment://favicon.png",
},
"video": {
"url" : "https://www.youtube.com/embed/q05aeEf17Kc"
},
"fields": [
{
"name" : "添付画像を",
"value" : "embedsで使うと別表示しなくなるっぽい。",
"inline": True,
},
{
"name" : "attachment:",
"value" : "embedの中でしか添付使えないっぽい。",
"inline": True,
},
{
"name" : "Visualizer and validator for Discord embeds.",
"value" : "日本語入れたら怒らたけど、color pickerが地味に便利。",
},
{
"name" : "Youtubeの",
"value" : "[埋め込みは無理っぽい](https://support.discord.com/hc/en-us/community/posts/360037387352-Videos-in-Rich-Embeds)\nvideo URL 指定しても無視される。",
},
],
}
]
}
}
### embed付き
with open("favicon.png", 'rb') as f:
file_bin_favicon = f.read()
with open("logo-background-color.png", 'rb') as f:
file_bin_logobg = f.read()
with open("logo-effect-background-color.png", 'rb') as f:
file_bin_logoeffect = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin_favicon ),
"logo_bg" : ( "logo-background-color.png", file_bin_logobg ),
"logo_effect" : ( "logo-effect-background-color.png", file_bin_logoeffect ),
}
payload2['payload_json'] = json.dumps( payload2['payload_json'], ensure_ascii=False )
res = requests.post(WEBHOOK_URL, files = files_qiita , data = payload2 )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
multipart/form-data
첨부 파일은 전항과 같이 files
로 지정. 메시지 내용은 공식 읽어도 푹신하고 분명 모른다.
첨부 파일을 붙일 경우 embed라든지 그대로 사용하면 화난다 . 대신 payload_json
에 모두 넣고 dump하여 문자열화, data
로 지정. 이것으로 어떻게든 되었다.
첨부한 이미지 파일은 embeds
안에서는 사용할 수 있었지만, avatar_url
에는 사용할 수 없었다.
Embed Object 에 video
가 있었기 때문에 youtube URL 을 시도해 보겠지만, 현재 webhook에는 사용할 수 없을 것 같다.wait
붙지 않아도 content
돌아온다.
실제로 투고하면 이런 느낌.
Reference
이 문제에 관하여(파이썬에서 Discord webhook에 메시지를 게시하는 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ABBBB/items/e6bdf7fc94b8f6f72a01
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
python3:3.7.3
json: 2.0.9
requests: 2.21.0
첨부 파일 샘플로 : 브랜드 가이드라인
메시지만
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload = {
"username" : "メッセージ",
"content" : "だけだよ。",
"avatar_url" : "https://github.com/qiita.png",
}
### メッセージだけ
res = requests.post( WEBHOOK_URL, json=payload )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
application/json
, json
지정하기만 하면 됩니다.
webohook URL 에 ?wait=true 을 붙여 주면 content
돌려준다. 붙이지 않으면 status_code
가 204, content
돌아오지 않는다.
채널 아래의 스레드에 투하하고 싶다면 thread_id도 붙여 준다. 아카이브 된 스레드는 자동으로 아카이브 해제 해주는 것 같다.
스레드 ID를 얻으려면 "사용자 설정"→ "앱 설정"→ "고급 설정"에서 "개발자 모드"를 켜면 표시되는 "ID 복사"메뉴에서 복사하는 것이 빠릅니다. .
각각 WebhookURL에 연결하면 이런 느낌.https://discord.com/api/webhooks/{webhookID}/{webhookトークン}?wait=true&thread_id={スレッドID}
첨부파일만
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
### 画像添付
with open("favicon.png", 'rb') as f:
file_bin = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin),
}
res = requests.post( WEBHOOK_URL, files = files_qiita )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
multipart/form-data
, 바이너리 read하고 files
에 지정할 뿐.wait
붙지 않아도 content
돌아온다.
메시지 + embed + 첨부 파일
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload2 = {
"payload_json" : {
"username" :"メッセージと、",
"content" :"添付ファイルと、",
"avatar_url" : "https://github.com/qiita.png",
"embeds": [
{
"title" : "payload_json",
"description" : "embedsそのまま使うと怒られる。代わりにpayload_jsonに全部ぶち込んで文字列にdumpしたら良さげ。ensure_ascii=False 無くても多分大丈夫。",
"url" : "https://birdie0.github.io/discord-webhooks-guide/structure/file.html",
"timestamp" : "2020-08-22T15:18:00+0900",
"color" : 5620992,
"footer": {
"icon_url" : "attachment://favicon.png",
"text" : "Qiita",
},
"thumbnail": {
"url" : "attachment://logo-background-color.png"
},
"image": {
"url" : "attachment://logo-effect-background-color.png"
},
"author": {
"name" : "embedと。",
"url" : "https://qiita.com/",
"icon_url" : "attachment://favicon.png",
},
"video": {
"url" : "https://www.youtube.com/embed/q05aeEf17Kc"
},
"fields": [
{
"name" : "添付画像を",
"value" : "embedsで使うと別表示しなくなるっぽい。",
"inline": True,
},
{
"name" : "attachment:",
"value" : "embedの中でしか添付使えないっぽい。",
"inline": True,
},
{
"name" : "Visualizer and validator for Discord embeds.",
"value" : "日本語入れたら怒らたけど、color pickerが地味に便利。",
},
{
"name" : "Youtubeの",
"value" : "[埋め込みは無理っぽい](https://support.discord.com/hc/en-us/community/posts/360037387352-Videos-in-Rich-Embeds)\nvideo URL 指定しても無視される。",
},
],
}
]
}
}
### embed付き
with open("favicon.png", 'rb') as f:
file_bin_favicon = f.read()
with open("logo-background-color.png", 'rb') as f:
file_bin_logobg = f.read()
with open("logo-effect-background-color.png", 'rb') as f:
file_bin_logoeffect = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin_favicon ),
"logo_bg" : ( "logo-background-color.png", file_bin_logobg ),
"logo_effect" : ( "logo-effect-background-color.png", file_bin_logoeffect ),
}
payload2['payload_json'] = json.dumps( payload2['payload_json'], ensure_ascii=False )
res = requests.post(WEBHOOK_URL, files = files_qiita , data = payload2 )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
multipart/form-data
첨부 파일은 전항과 같이 files
로 지정. 메시지 내용은 공식 읽어도 푹신하고 분명 모른다.
첨부 파일을 붙일 경우 embed라든지 그대로 사용하면 화난다 . 대신 payload_json
에 모두 넣고 dump하여 문자열화, data
로 지정. 이것으로 어떻게든 되었다.
첨부한 이미지 파일은 embeds
안에서는 사용할 수 있었지만, avatar_url
에는 사용할 수 없었다.
Embed Object 에 video
가 있었기 때문에 youtube URL 을 시도해 보겠지만, 현재 webhook에는 사용할 수 없을 것 같다.wait
붙지 않아도 content
돌아온다.
실제로 투고하면 이런 느낌.
Reference
이 문제에 관하여(파이썬에서 Discord webhook에 메시지를 게시하는 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ABBBB/items/e6bdf7fc94b8f6f72a01
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload = {
"username" : "メッセージ",
"content" : "だけだよ。",
"avatar_url" : "https://github.com/qiita.png",
}
### メッセージだけ
res = requests.post( WEBHOOK_URL, json=payload )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
### 画像添付
with open("favicon.png", 'rb') as f:
file_bin = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin),
}
res = requests.post( WEBHOOK_URL, files = files_qiita )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
multipart/form-data
, 바이너리 read하고 files
에 지정할 뿐.wait
붙지 않아도 content
돌아온다.메시지 + embed + 첨부 파일
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload2 = {
"payload_json" : {
"username" :"メッセージと、",
"content" :"添付ファイルと、",
"avatar_url" : "https://github.com/qiita.png",
"embeds": [
{
"title" : "payload_json",
"description" : "embedsそのまま使うと怒られる。代わりにpayload_jsonに全部ぶち込んで文字列にdumpしたら良さげ。ensure_ascii=False 無くても多分大丈夫。",
"url" : "https://birdie0.github.io/discord-webhooks-guide/structure/file.html",
"timestamp" : "2020-08-22T15:18:00+0900",
"color" : 5620992,
"footer": {
"icon_url" : "attachment://favicon.png",
"text" : "Qiita",
},
"thumbnail": {
"url" : "attachment://logo-background-color.png"
},
"image": {
"url" : "attachment://logo-effect-background-color.png"
},
"author": {
"name" : "embedと。",
"url" : "https://qiita.com/",
"icon_url" : "attachment://favicon.png",
},
"video": {
"url" : "https://www.youtube.com/embed/q05aeEf17Kc"
},
"fields": [
{
"name" : "添付画像を",
"value" : "embedsで使うと別表示しなくなるっぽい。",
"inline": True,
},
{
"name" : "attachment:",
"value" : "embedの中でしか添付使えないっぽい。",
"inline": True,
},
{
"name" : "Visualizer and validator for Discord embeds.",
"value" : "日本語入れたら怒らたけど、color pickerが地味に便利。",
},
{
"name" : "Youtubeの",
"value" : "[埋め込みは無理っぽい](https://support.discord.com/hc/en-us/community/posts/360037387352-Videos-in-Rich-Embeds)\nvideo URL 指定しても無視される。",
},
],
}
]
}
}
### embed付き
with open("favicon.png", 'rb') as f:
file_bin_favicon = f.read()
with open("logo-background-color.png", 'rb') as f:
file_bin_logobg = f.read()
with open("logo-effect-background-color.png", 'rb') as f:
file_bin_logoeffect = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin_favicon ),
"logo_bg" : ( "logo-background-color.png", file_bin_logobg ),
"logo_effect" : ( "logo-effect-background-color.png", file_bin_logoeffect ),
}
payload2['payload_json'] = json.dumps( payload2['payload_json'], ensure_ascii=False )
res = requests.post(WEBHOOK_URL, files = files_qiita , data = payload2 )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
multipart/form-data
첨부 파일은 전항과 같이 files
로 지정. 메시지 내용은 공식 읽어도 푹신하고 분명 모른다.
첨부 파일을 붙일 경우 embed라든지 그대로 사용하면 화난다 . 대신 payload_json
에 모두 넣고 dump하여 문자열화, data
로 지정. 이것으로 어떻게든 되었다.
첨부한 이미지 파일은 embeds
안에서는 사용할 수 있었지만, avatar_url
에는 사용할 수 없었다.
Embed Object 에 video
가 있었기 때문에 youtube URL 을 시도해 보겠지만, 현재 webhook에는 사용할 수 없을 것 같다.wait
붙지 않아도 content
돌아온다.
실제로 투고하면 이런 느낌.
Reference
이 문제에 관하여(파이썬에서 Discord webhook에 메시지를 게시하는 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ABBBB/items/e6bdf7fc94b8f6f72a01
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import json
import requests
WEBHOOK_URL = "うえぶふっくURL?wait=true"
payload2 = {
"payload_json" : {
"username" :"メッセージと、",
"content" :"添付ファイルと、",
"avatar_url" : "https://github.com/qiita.png",
"embeds": [
{
"title" : "payload_json",
"description" : "embedsそのまま使うと怒られる。代わりにpayload_jsonに全部ぶち込んで文字列にdumpしたら良さげ。ensure_ascii=False 無くても多分大丈夫。",
"url" : "https://birdie0.github.io/discord-webhooks-guide/structure/file.html",
"timestamp" : "2020-08-22T15:18:00+0900",
"color" : 5620992,
"footer": {
"icon_url" : "attachment://favicon.png",
"text" : "Qiita",
},
"thumbnail": {
"url" : "attachment://logo-background-color.png"
},
"image": {
"url" : "attachment://logo-effect-background-color.png"
},
"author": {
"name" : "embedと。",
"url" : "https://qiita.com/",
"icon_url" : "attachment://favicon.png",
},
"video": {
"url" : "https://www.youtube.com/embed/q05aeEf17Kc"
},
"fields": [
{
"name" : "添付画像を",
"value" : "embedsで使うと別表示しなくなるっぽい。",
"inline": True,
},
{
"name" : "attachment:",
"value" : "embedの中でしか添付使えないっぽい。",
"inline": True,
},
{
"name" : "Visualizer and validator for Discord embeds.",
"value" : "日本語入れたら怒らたけど、color pickerが地味に便利。",
},
{
"name" : "Youtubeの",
"value" : "[埋め込みは無理っぽい](https://support.discord.com/hc/en-us/community/posts/360037387352-Videos-in-Rich-Embeds)\nvideo URL 指定しても無視される。",
},
],
}
]
}
}
### embed付き
with open("favicon.png", 'rb') as f:
file_bin_favicon = f.read()
with open("logo-background-color.png", 'rb') as f:
file_bin_logobg = f.read()
with open("logo-effect-background-color.png", 'rb') as f:
file_bin_logoeffect = f.read()
files_qiita = {
"favicon" : ( "favicon.png", file_bin_favicon ),
"logo_bg" : ( "logo-background-color.png", file_bin_logobg ),
"logo_effect" : ( "logo-effect-background-color.png", file_bin_logoeffect ),
}
payload2['payload_json'] = json.dumps( payload2['payload_json'], ensure_ascii=False )
res = requests.post(WEBHOOK_URL, files = files_qiita , data = payload2 )
print( res.status_code )
print( json.dumps( json.loads(res.content), indent=4, ensure_ascii=False ) )
Reference
이 문제에 관하여(파이썬에서 Discord webhook에 메시지를 게시하는 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ABBBB/items/e6bdf7fc94b8f6f72a01텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)