はじめに
discord.pyで使った関数とかをここにそっと置いておきます
自分用でもあり、誰かの役に立てばいいな、と思います
重要事項
これから解説するコードたちは
Discord Developer Portalから
intentsの欄をオンにする必要がある場合があります
その上で、
intents = discord.Intents.all()
client = discord.Client(intents=intents)
を記述してください。
これらを行っていないと動かないコードがあるので
AttributeError: 'NoneType' object has no attribute 'status'
などのエラーが出た場合は上記を行ってください。
細かい手順等は以下のサイトを参考にしてみてください
それでは本題へ。
メンバーのステータスを確認
guild = client.get_guild("guild id") #idはint型で
user_status = guild.get_member("user id").status #idはint型で
if user_status == discord.Status.online:
- 一行目について
- サーバー(以下ギルド)を取得しています。
- ギルドを取得するとギルドの情報をたくさん取得できます。
- 二行目について
- メンバーのステータス情報を取得しています。
- Memberを取得するとMemberの情報をたくさん取得できます。
- 三行目について
- メンバーがオンライン状態かどうかを判断するif文となってます
- 比較する際はdiscord.Status.~~という風に書かないとだめみたいです
(if ~~ == "online" という書き方ではだめでした。。)
メンバーにDMを送信
user = await client.fetch_user("user id")
await user.send("Excuse me, sir?")
- 一行目について
- ユーザーを取得しています。
- ユーザーを取得するとユーザーの情報をたくさん取得できます。
- 二行目について
- DMを送信しています。
- Bot起動直後や、指定時間に送信も可能です。
以下例
ex.1 起動直後にDMを送信
@client.event
async def on_ready():
user = await client.fetch_user("user id") #idはint型で
await user.send("Excuse me, sir?")
ex.2 14時になったらDMを送信
@tasks.loop(seconds=1)
async def get_time():
now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
if now.hour == 14 and now.minute == 0 and now.second == 0:
user = await client.fetch_user("user id")
await user.send("Excuse me, sir?")
@client.event
async def on_ready():
get_time.start()
embedの中身(文字等)を取得
今回はembedのdescriptionを取得
@client.event
async def on_message(message):
msg = message.embeds[0].description
-
メッセージにembedの情報も含まれている
- embeds[0]でembedの中身取り出し
- embed[0].descriptionでembedの説明取得
-
APIリファレンスでembedと検索すると色々でてくるので、タイトルや色も取得可能
送られてきた画像URLを取得
今回はembedのdescriptionを取得
@client.event
async def on_message(message):
url = message.attachments[0].url
- 画像のURLが返ってくる
以下例
ex 送られてきた画像を保存
import requests
from PIL import Image
@client.event
async def on_message(message):
url = message.attachments[0].url
filename = "image.png"
response = requests.get(url)
image = response.content
with open(filename, "wb") as f:
f.write(image)
今はとりあえずここまで
また調べてわかりにくかったけどいろいろやってたらできた!
みたいなのがあれば載せます~