モジュールrequests
でDiscordに画像を投稿する
コマンド
curl
は便利だ。
しかしプログラムで送信するならモジュールを使う方が都合が良く、
Requests(
日本語訳)は便利だ。
メッセージだけを送るなら
import json
import requests
# TOKEN: トークン
# CHANNEL_ID: チャンネルID
uri = 'https://discord.com/api/channels/{}/messages'.format(CHANNEL_ID)
headers = {
'Authorization': 'Bot {}'.format(TOKEN),
'Content-Type': 'application/json',
}
data = {'content': 'メッセージ'}
kwargs = {
'headers': headers,
'data': json.dumps(data),
}
session = requests.Session()
r = session.request('post', uri, **kwargs)
print(r.status_code, r.content)
で送れる。
ファイルを添付するときは少し面倒だ:
import json
import requests
import os
import mimetypes
import magic # pip install python-magic
# TOKEN: トークン
# CHANNEL_ID: チャンネルID
# PATH: 添付するファイルのパス
# アップロードするファイルに関するデータを取得する
def get_file(field_name, path, name=None, mime=None):
def _get_mimetype(path):
try: return magic.from_file(path, mime=True)
except: return mimetypes.guess_type(path)[0]
if name is None: name = os.path.split(path)[1]
if mime is None: mime = _get_mimetype(path)
file_info = (name, open(path, 'rb'), mime)
return (field_name, file_info)
basename = os.path.basename(PATH)
uri = 'https://discord.com/api/channels/{}/messages'.format(CHANNEL_ID)
headers = {
'Authorization': 'Bot {}'.format(TOKEN),
}
data = {
'content': 'メッセージ',
'image': {
'url': 'attachment://{}'.format(basename),
},
'attachments': [
{
'id': 0,
'filename': basename,
},
],
}
files = []
files.append(get_file('files[0]', PATH, basename)) # files[]のインデックスをattachmentsのidの値に合わせる
kwargs = {
'headers': headers,
'data': {'payload_json': (json.dumps(data), 'application/json'),},
'files': files,
}
session = requests.Session()
r = session.request('post', uri, **kwargs)
print(r.status_code, r.content)
さらに
embeds
でメッセージに埋め込むとき、embedsが含む画像を
attachments
に追加する。
2022/08/07 09:27