メッセージオブジェクトの関数
メッセージオブジェクト(nextcord.Message
)には、データと関数が含まれています。
他にも、多くのオブジェクトにはデータと関数の両方が含まれています。
今回は関数についてご紹介しましょう。
関数
APIリファレンス内でMethods
と書かれているところにあるものです。
nextcordであれば以下の通りです。
と、関数名の左にasync
とdef
の2種類があるのにお気づきでしょうか。
このasync
とdef
は非同期関数か否かを示しています。
async
と付いているものは非同期なのでawait
をつける必要があります。
def
は同期関数なのでawait
はつけません。
よく使われるものを紹介します。
await reply()
Message.reply()
として実行できる、非同期関数です。
これは結構使われる関数です。
リプライ、つまり返信を行います。
送られてきたメッセージに対して返信します。
第一引数が送りたいメッセージの本文です。
すこし遊んでみましょう。
@bot.event
async def on_message(message: nextcord.Message):
if not message.author.bot:
await message.reply("なんか用かい?")
これを実行するとこうなります。
ついにBOTが喋りましたね!!!!
態度悪そうだけど!
なにこのif
さて、今回if
文を使いました。
ifは条件分岐で、条件式が正しければ下の関数を実行するというものです。
if 条件式:
正しければ実行される
message.author.bot
は、送信ユーザーがBOTであればTrue
、そうでなければFalse
となります。
ifの後につけたnot
でそれが否定されて、送信ユーザーがBOTでなければメッセージの返信が実行されます。
さて、なんでこんなことをしたのでしょうか。
勘のいい人は気づいてると思います。
冒険家の方は、このifを外してやってみてください。
...
自分がメッセージを送信すると、それをトリガーにBOTがメッセージを返信します。さらに、BOT自身の返信メッセージをトリガーにBOTがメッセージを返信して、さらにBOTがそれをトリガーに返信して...(ry
無限ループッッッ!!!
というわけで、初めてBOTを開発していた頃、このif
文を忘れていた影響で「猫」が無限に増殖するような状態になってしまった私も、今となっては流石にそんなミスはしな...い...はずですので、皆さんも気をつけましょう。
await add_reaction()
Message.add_reaction()
として実行できる、非同期関数です。
これは、メッセージに対してリアクション(絵文字のやつ)をつける関数です。
第一引数は絵文字なんですが、これの指定方法が少しめんどくさいっちゃめんどくさいです。
絵文字は「Unicode Character Name」か「Unicode」か「Discord絵文字」か「絵文字」で指定します。
Unicode Character Name
ここら辺のサイトから絵文字の名前を取得できます。
例として「Fire」(🔥)にしましょう。
そしたら"\N{FIRE}"
と書きます。
つまり、await message.add_reaction("\N{FIRE}")
と書くことになります。
もしかしたら新しすぎる絵文字には対応してないかもしれません。
その場合、Unknownなんちゃらーって出るので、気長に次の方法をお試しの上お待ちください。
Unicode
さっきのに似てますが、こっちは本当にコードです。
例えば「Smiling Face」(☺️)にしましょう。
そしたら、絵文字のコードを調べます。
すると、U+263A
と出ました。
そしたら、"\u263A"
と書きます。
もし、コードが4桁より小さかったら0埋めをします。(U+1
→"\u0001"
)
中には、コードが4桁より多いものもあります。
例として「Heart Hands」(🫶)にしましょう。
絵文字のコードはU+1FAF6
と表示されました。
4桁同様に今度は8
桁になるように0埋めをします。
そしたら"\U0001FAF6"
となります。
先ほどはU
が小文字でしたが、8桁の場合は大文字になります。気をつけましょう。
Discord絵文字
Discordの各サーバーではカスタム絵文字を設定できます。
それも、ちゃんとリアクションとして使えます。(スタンプは別なので注意!)
<:絵文字名:絵文字ID:>
です。
まぁ、絵文字IDってなんぞやって方が大半だと思うので、そういう方には下の記事が参考になると思われます。
一応補足しておくと、そのBOTが参加しているサーバーでの絵文字しか利用できませんのでご注意ください。
絵文字
私的にはあんまり推奨されません。
理由としては、一部のエディタ環境によっては崩れて見えてしまったりするからです。
もちろん、ぱっと見でわかりやすくもありますが...(VSCodeでは一部の絵文字は絵文字じゃなくてUnicodeで表示される)
やり方はこんな感じです。
await message.add_reaction("🐱")
つまり、コード内に直接絵文字を埋め込むということです。
@bot.event
async def on_message(message: nextcord.Message):
await message.add_reaction("\N{FIRE}")
await message.add_reaction("\u263A")
await message.add_reaction("\U0001FAF6")
await message.add_reaction("🐱")
すると...
すごいですね。どこからともなくリアクションが現れました。
1人と1BOTしかいないサーバーでも賑わってる感ありますよね。
これだけでもぼっち回避にいいですね。
Teamsの1人チャットより寂しくないです。
(勝手に引用)
次回予告
このままこのアドベントカレンダーシリーズを読み進めていけば、自作バーチャル(彼女|彼氏)
も夢じゃないです。
次回はmessage.content
と正規表現について少しだけ踏み込んで進めたらなと思っております。
ちなみにどうでもいいですが、私絶賛体調不良ですが、Qiitaの記事を書くだけの体力はあります()
というわけで、今日の記事はここまでです。 もしよろしければ記事へのいいねをして、次回記事をお楽しみに!