discord.py のドキュメントも全てが訳されている訳ではないのでメモです。
個人的なものなので書き方が曖昧かもしれません、えらい人教えてください・・・
discord.Messageは、サーバーやDMに投稿された全てのメッセージに当てはまるクラスです。
あくまでmessageが持つクラスであり、また自分でこれのインスタンスを作成することはありません。
値
全てのメッセージは、以下の値を持ちます。(None
の場合もある)
値は以下のように参照します。
@client.event
async def on_message(message):
print(message.tts)
mes = message.channel.fetch_messages( メッセージのID )
print(mes.content)
tts
メッセージがttsメッセージであるかを表します。
ttsメッセージの時はTrue
、そうでないときはFalse
になります。
ttsって何?という方はDiscordの公式ヘルプを参照してください。
support.discordapp.com
type
これはメッセージのタイプを表します。
個人的には正直使い所がよくわかりません。
MessageTypeクラスの値を返します。ほぼ訳されているのでリンクと補足のみとします。
discordpy.readthedocs.io
ここではchannel_follow_add
のみ訳されていません。
Discordには、パートナー、検証済みサーバー、開発者サーバーにおいてのみ使用できる「Announcement Channel」という特殊なチャンネルが存在するのですが、これらのサーバーは、ユーザーが「Follow」ボタンを押すことでユーザー自らの管理するサーバーにもそのチャンネルの投稿を通知させる機能を持っています。
channel_follow_add
は、その通知への接続時に表示される特殊メッセージを表す値です。
author - 送信者
これは、メッセージの投稿者を表します。
もしそのメッセージが通常のサーバーで投稿されたなら、それはMemberオブジェクトを返します。
もしそのメッセージがDMに投稿されたなら、それはUserオブジェクトを返します。
content - 内容
メッセージの内容です。
文字列型で返します。
nonce
公式ドキュメントによれば、メッセージが正常に送信されたかを確認する値なのですが、どんな値なのかわかりませんでした。
こちらの環境では整数型を返しました。
embeds - 埋め込みの一覧
これはメッセージの埋め込みを表します。
もし埋め込みが存在するならEmbedオブジェクトのリストを、無ければ空のリストを返します。
channel - チャンネル
メッセージが送信されたチャンネルです。
もしテキストチャンネルから送信されたならTextChannelオブジェクト、DMチャンネルならDMChannelオブジェクトあるいはGroupChannelオブジェクトを返します。
mention_everyone - everyoneメンションの有無
これは、@everyone などでサーバーの全員に対するメンションが行われているメッセージかを表します。
これは真偽値を返します。
mentions - メンションのリスト
メッセージに含まれるメンションの対象になっているメンバーのリストを返します。
もし誰にもメンションしていないなら、これは空のリストになります。
channel_mentions - チャンネルメンションのリスト
mentionsと同様に、メンションの対象になっているチャンネルのリストを返します。(#チャンネル名
のように)
もしどのチャンネルにもメンションしていないなら、これは空のリストになります。
role_mentions - 役職メンションのリスト
mentionsと同様に、メンションの対象になっている役職のリストを返します。
もしどの役職にもメンションしていないなら、これは空のリストになります。
id
メッセージのIDを表します。
これは整数型を返します。
webhook_id
もしそのメッセージがwebhookによって送信されたなら、そのWebhookのIDを返します。
整数型になります。
attachment - 添付ファイルリスト
これは添付ファイルを表すAttachmentオブジェクトのリストを返します。
もし1つもメッセージにファイルが添付されていないのなら、これは空のリストになります。
pinned - ピン留めの有無
これはメッセージが取得時点でピン留めされているかを表します。
真偽値が返されます。
reactions - リアクション
もしメッセージにリアクションが付けられているのなら、これはReactionオブジェクトのリストを返します。
guild - サーバー
メッセージが投稿されたサーバー。
Guildオブジェクトを返します。
raw_mentions/raw_channel_mentions/raw_role_mentions
それぞれ<@ID>
(メンバー)、<#ID>
(チャンネル)、<&ID>
(役職)の文字列がメッセージ内容に含まれているとき、そのIDのリストを返します。
clean_content - 整形済みメッセージ
これは、メッセージ内容をユーザーの表示と同じように変換したものを返します。
メンションの<@ID>
は@名前
に変換される、といった具合です
created_at - 投稿時間
メッセージの投稿時間を返します。
datetime.datetimeオブジェクトで表されます。
jump_url - URL
このメッセージのURLを返します。
文字列で表され、リンクを作成するときなどに使えそうです。
is_system() - システムメッセージか
メッセージがシステムメッセージであるかを返します。
message.type
のdefaultか、そうでないか、とだいたい同じだと思います。
system_content
もし、メッセージがシステムメッセージであるなら、その内容の英語版のメッセージを返します。
普通のメッセージなら、そのまま内容を返します。
activity/call/application
把握できませんでした。
もし分かったら追記します。
コルーチン・メソッド
メッセージに対して以下の処理を行うことが可能です。
ただし、manage_messages
(メッセージ管理)権限が必要です。
await delete() - 削除
メッセージを削除します。
@client.event
async def on_message(message):
await message.delete()
引数にはdelay=秒数
を指定できるようです。これはメッセージを削除する前にbotを待機させる秒数です。
await edit() -編集
メッセージを編集します。ただし、他人のメッセージは編集できない仕様です。
@client.event
async def on_message(message):
my_message = await message.channel.send("こんにちは")
await my_message.edit(content="こんばんは、60秒後に削除されます。" , delete_after=60.0 )
- content メッセージの編集後の内容。文字列で指定します。
- embed メッセージの新しい埋め込み。Embedオブジェクトを指定しますが、もしNoneを明示すれば削除されます。
- subpress メッセージの埋め込みの抑制を変更します。Trueにすれば埋め込みを抑制、Falseなら抑制を解除。
- delete_after メッセージを編集後に一定時間経ったら削除させるようにできます。浮動小数点型を指定します。
(await channel.send()
は、送信に成功したmessageを返すので、それを保存しています。)
await pin() / await unpin() - ピン留め変更
それぞれ、メッセージをピン留め、ピン留め解除します。
@client.event
async def on_message(message):
if message.content == "pin_change":
if message.pinned == True:
await message.unpin()
await message.channel.send("メッセージのピン留めを解除しました。")
elif message.pinned == False:
await message.pin()
await message.channel.send("メッセージをピン留めしました。")
await add_reaction()/await remove_reaction()/await clean_reactions() - リアクション変更
リアクションを追加または削除、もしくは全て削除します。
@client.event
async def on_message(message):
if message.content == "Reaction":
await message.add_reaction("😀")
elif message.content == "Remove":
await message.remove_reaction("😀",message.guild.me)
elif message.content.startswith("clear"):
mes_ID = message.content.split(" ")[1]
mes = message.channel.fetch_messages(mes_ID)
await mes.clear_reactions()
await remove_reaction()
の第二引数にはMemberオブジェクト(厳密にはMemberを表すSnowFlake)を指定します。
なお、guild.me
は、サーバーにおけるbot自身のMemberオブジェクトを取得します。
await ack()
把握できませんでした。
もし分かったら追記します。
以上、Messageの値や行える処理をまとめました。