1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クリスマスまでにPythonを使ってDiscordのBOTを作るAdvent Calendar 2022

Day 11

【11日目】メッセージオブジェクトのデータ【PythonでDiscordBOTを作ろう!】

Last updated at Posted at 2022-12-10

メッセージオブジェクトのデータ

メッセージオブジェクト(nextcord.Message)には、データと関数が含まれています。
他にも、多くのオブジェクトにはデータと関数の両方が含まれています。
今回はデータについてご紹介しましょう。

データ

APIリファレンス内でAttributesと書かれているところにあるものです。
nextcordであれば以下の通りです。

Attributes
activity
application
attachments
author
channel
channel_mentions
clean_content
components
content
created_at
edited_at
embeds
flags
guild
id
interaction
jump_url
mention_everyone
mentions
nonce
pinned
raw_channel_mentions
raw_mentions
raw_role_mentions
reactions
reference
role_mentions
stickers
system_content
thread
tts
type
webhook_id

一個一個全部説明していると、多分日が暮れ...いやクリスマスまで時間あるからいいのか...いやでも疲れてしまうので、全部は書きません。
代表的なものを説明します。

content

Message.contentとして読める、strのデータです。
中には、メッセージ本文が含まれています。

さて、strについても説明が必要ですね。
strとは、Pythonのデフォルト型の一つで、文字列型です。
型とかに関する詳しい情報は下記のページがわかりやすいと思うのでご覧ください!

これを使って、メッセージ文をprintするコードを書いてみましょう。

main.py - async def on_message
@bot.event
async def on_message(message):
    print(message.content)

これで実行してみると...

$ python main.py
ChristmasBOT
おーいみてるー?

と、こんな風に、メッセージ本文が出力されました。
これで、使い方はもうバッチリですよね。

author

Message.authorとして読めるUnion [User | Member]のデータです。

は?Unionってなに?

初見では私も分かりませんでしたわ〜!

Unionとは「結合」という意味の単語。
つまり、Union [A | B]とは、AとBの型の結合となります。

例えば、Aというオブジェクトにはhogeというデータがあり、Bというオブジェクトにはpiyoというデータがあるとします。
そしてCというAとBのUnionのオブジェクトがあるとします。

# Aにはhogeは存在するがpiyoは存在しない
A.hoge # hogehoge
A.piyo # Error

# Bにはpiyoは存在するがhogeは存在しない
B.hoge # Error
B.piyo # piyopiyo

# CはAとBの結合なので両方アクセスできる
C.hoge # hogehoge
C.piyo # piyopiyo

という様な感じで、両方の型に存在するデータや関数にアクセス出来るのが結合、Unionと思ってくれれば大丈夫だと思います。

User...? Member...?

はい。このauthorの中にはさらにオブジェクトがあります。
例えばMemberの中にはnameというデータがあります。
これにアクセスするにはmessage.author.nameと書けばアクセス出来ます。

とりあえず、試してみましょう。

main.py - async def on_message
@bot.event
async def on_message(message):
    print(message.author.name)

これで実行してみると...

$ python main.py
ChristmasBOT
NattyanTV

と、メッセージを送信すると、送信したユーザーの名前が表示されます。

これで、ある程度オブジェクトの基礎については理解していただいたでしょうか...
まぁ習うより慣れろです。何度もトライアンドエラーしてみましょう。(try: and except:)

ついに次回は....!

ついに次回、BOTっぽくなります!
これをすると「BOTっぽいなこれ」と思わず叫びたくなるでしょう。

というわけで、今日の記事はここまでです。
もしよろしければ記事へのいいねをして、次回記事をお楽しみに!

どうでもいい補足

VSCodeとかを使っている人なら、オートコレクトを使用する事で、より便利に、より素早く開発をする事が出来ます。
オートコレクトとは

こんなので、例えばmessageの中にはどんなデータ、どんな関数が格納されてるか忘れちゃっても案外これでなんとかなります。
また、ワンクリックで出せるので人によっては開発スピードがレベチで上がります。

まずは、Pythonなどの必要な拡張機能を入れてください。
そしたらコードを編集します。

main.py - async def on_message
  @bot.event
- async def on_message(message):
+ async def on_message(message: nextcord.Message):
      print(message.author.name)

このように「変数名: 変数の型」とすると、その変数がその型なんだなーとVSCode側が理解してくれて、次に使用できるデータや関数を表示してくれる様になります。
また、スペルミスや、存在しないデータを指定した場合はエラーが表示されるので、ミスを対処しやすいです。

VSCodeには色々とおすすめの拡張機能があります。
下記の方の記事が参考になると思いますので、ぜひ入れてみてください!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?