on_message
これもイベントハンドラの一種です。
翻訳の通りで、「メッセージで」駆動する関数を定義できます。
試しにやってみましょう。
試してみよう
import nextcord
from nextcord.ext import commands
bot = commands.Bot()
@bot.event
async def on_ready():
print(bot.user.name)
print("BOTが起動したよぉ!")
@bot.event
async def on_message(message):
print("なんかどっかからメッセージがきたよ!")
bot.run("TOKEN")
さて、on_message
関数には、送信されたメッセージのデータが格納されています。
今回はちょっとそれは一旦無視しましょう。
さて、これで実行してみましょう。
BOTが起動したら、BOTがいるチャンネルで何かメッセージを送信してみましょう。
$ python main.py
ChristmasBOT
なんかどっかからメッセージがきたよ!
こんな感じで、コンソール画面にメッセージの通知が飛んできたら成功です。
つまり!
このBOTを起動させておけば、Discordにメッセージが飛んできた時にわかりますね!()
メッセージオブジェクト
Pythonがオブジェクト指向なプログラミング言語なので、メッセージやユーザー情報はそれぞれ「メッセージオブジェクト」「ユーザーオブジェクト」として扱う事が出来ます。
これが大変便利ですが、初見では理解できないかもしれないです。
試しに先程のプログラムで、メッセージが飛んできたら関数に渡されるmessage
をprintしてみましょう。
$ python main.py
ChristmasBOT
<Message id=1039831480895029288 channel=<TextChannel id=1039201042916708435 name='一般' position=0 nsfw=False news=False category_id=1039201042916708433> type=<MessageType.default: 0> author=<Member id=669178357371371522 name='NattyanTV' discriminator='6507' bot=False nick=None guild=<Guild id=1039201041520001164 name='アドベントカレンダー!' shard_id=0 chunked=False member_count=2>> flags=<MessageFlags value=0>>
なんか沢山出てきて怖いですね(?)
この<>
に囲まれたものがPythonではオブジェクトとして扱われています。
すこし前の記事でも紹介した様に、Pythonのオブジェクトにはピリオドでアクセスしていきます。
例えば、hoge
オブジェクトのname
にアクセスしたい場合はhoge.name
と書く事で使用出来ます。
そして、今回on_message
のmessage
に渡されたオブジェクトは「メッセージオブジェクト」です。
メッセージオブジェクトに何が格納されているかはー...
APIリファレンスを読みましょう!
APIリファレンス...?
さて、APIリファレンスとはなんでしょうか。
早々に答えを出してしまうと、各ライブラリの説明書みたいなものでしょうか。
今回は、nextcordを使用しているので、読むのであればnextcordのリファレンスを読みましょう。
英語で難しいかもしれませんが...
慣れれば簡単です!
メッセージ本文が欲しいよ!
さて、次回は「メッセージオブジェクト」から、メッセージ本文やユーザー情報を取得してみましょう。
APIリファレンスをちょっとでも読む事を宿題にしますのでやってみてください!
というわけで、今日の記事はここまでです。 もしよろしければ記事へのいいねをして、次回記事をお楽しみに!