1
1

More than 1 year has passed since last update.

discord.pyで使ったものを置いておこう(随時更新)

Last updated at Posted at 2022-08-08

はじめに

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)

今はとりあえずここまで

また調べてわかりにくかったけどいろいろやってたらできた!
みたいなのがあれば載せます~

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1