discord.pyでいろいろなオブジェクトを取得する

discord.pyでいろいろなオブジェクトを取得する方法。
執筆中です。なんかあればコメントで。

チャンネル

全部共通(カテゴリ、テキスト、ボイス、DM)

ID指定

Client.get_channelメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Client.get_channel
ready後ではない or BOTがチャンネルを見れない場合はNoneを返すのでそこは注意。

async def on_ready():
    # IDは、該当するチャンネルのIDに置き換えること。
    ch = client.get_channel(ID)
    await ch.send("BOTが起動しました!")

Messageableなチャンネル(テキスト、DM)

Message などのchannel属性

多分一番使う方法。

async def on_message(message):
    ch = message.channel
    print(f"{ch.name}からメッセージが来ました!")

ギルド(サーバー)

ID指定

Client.get_guildメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Client.get_guild
ready後ではない or BOTがギルドにいない場合はNoneを返すのでそこは注意。

async def on_ready():
    # IDは、該当するギルドのIDに置き換えること。
    guild = client.get_guild(ID)
    print(f"{guild.name}のメンバー数は{guild.member_count}です!")

Message などのguild属性

よく使う気がする。

async def on_message():
    guild = message.guild
    print(f"{guild.name}からメッセージが来ました!")

User またはMember

違い

Userはギルドとは関係ない情報のみ。(役職の情報等なし)
Memberはギルドに関係があり、同じユーザーでも所属しているギルドごとにMemberオブジェクトが存在する。
(もちろん、役職の情報などもある)

ちなみにUserとMemberでの比較は可能。
元が同じなら(たとえギルドが別であろうと)同じとして判定される。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Member

User

ID指定

Client.get_userメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Client.get_user
ready後ではない or BOTがチャンネルを見れない場合はNoneを返すのでそこは注意。

async def on_ready():
    # IDは、該当するユーザーのIDに置き換えること。
    user = client.get_user(ID)
    # DMを送る
    await user.send("BOTが起動したよ!")

Member

ID指定

Guild.get_memberメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Guild
ギルドに関係しているので、必ずギルドの情報が必要になる。ID1つだけでできるわけでないので注意。
Guildオブジェクトの取得は前述の通り。

async def on_ready():
    # IDは、該当するギルドのIDに置き換えること。
    guild = client.get_guild(guild_ID)
    # IDは、該当するメンバーのIDに置き換えること。
    member = guild.get_member(member_ID)
    # DMを送る
    await member.send(f"君の表示名は{member.display_name}だね!")