Discordに通知するやつ
Botの動作状況だったり、シグナルとか受け取りたい時ってありますよね。
print文に書くようなことをDiscordに通知できたら。。。
そんな感じで書きました。
Setup
jsonファイルを作成しDiscordのBotのウェブフックアドレスを書いて保存します。
{
"チャンネル名": "ウェブフックのアドレス"
}
次に以下のPythonコードをdiscord.pyとして保存します。
import requests
import json
class Discord:
def __init__(
self,
*,
channel_name="test",
msg="Test post",
token=None,
file_name=None
):
if token is not None:
url = token
else:
with open("discord.json", "r") as f:
urls = json.load(f)
url = urls[channel_name]
self.url = url
if file_name is not None:
data = open(file_name, 'rb')
file = {'file': data}
else:
file = None
self.post(content=msg, file=file)
def post(
self,
*,
content=None,
username=None,
avatar_url=None,
tts=False,
file=None,
embeds=None,
allowed_mentions=None
):
if content is None and file is None and embeds is None:
raise ValueError("required one of content, file, embeds")
data = {}
if content is not None:
data["content"] = content
if username is not None:
data["username"] = username
if avatar_url is not None:
data["avatar_url"] = avatar_url
data["tts"] = tts
if embeds is not None:
data["embeds"] = embeds
if allowed_mentions is not None:
data["allowed_mentions"] = allowed_mentions
if file is not None:
return requests.post(
self.url, {"payload_json": json.dumps(data)}, files=file
)
else:
return requests.post(
self.url,
json.dumps(data),
headers={
"Content-Type": "application/json"
}
)
Botファイルに次の様に書けば動きます。例えばSample.pyに
from discord import Discord
Discord(channel_name='チャンネル名', msg='通知したい内容')
Discord(channel_name='doten', msg='Longします')
Discord(
channel_name='チャンネル名',
msg='something message',
file_name='picture.jpg'
)
と書きます。
sample.pyの内容説明します。まず1行目ですが、前述したモジュール(discord.py)をインポートしています。
3行目ですが、これは例です。こんな風に書きます。
4行目が実際に書いた内容です。チャンネル名と通知メッセージは必須です。
またこのモジュールは画像もアップロードできます。
6行目のように、file_nameにファイル名を指定してあげれば、アップロードされます。
sample.pyを実行する前にpip install requestsをターミナルで実行してください。