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}だね!")