LoginSignup
1
1

More than 1 year has passed since last update.

【9日目】イベントハンドラについて知ろう【PythonでDiscordBOTを作ろう!】

Last updated at Posted at 2022-12-08

What is イベントハンドラ...?

ここ、DiscordBOT界隈では、何かDiscord側でイベントが発生した場合に実行される関数と思ってください。

デコレーター?

みなさん、Pythonの関数ってこんな感じに定義しますよね

def main():
    print("main dayo")

実は、関数には「デコレーター」というものをつける事ができます。
デコレーターは@から始まるものを関数の前の行に書くことで、その関数にデコレーターを適応させることができます。

@hogehoge
def main():
    print("main dayo")

こんな感じです。

さて、デコレーターとはなんだと思いますか?
実は中身は「関数」なんです。

コード
def deco07(func):
    def wrapper(*args, **kwargs):
        print('LETS FUNCTION')
        func(*args, **kwargs)
        print('END FUNCTION')
    return wrapper

@deco07
def main():
    print('Hello!!!!')

main()
結果
LETS FUNCTION
Hello!!!!
END FUNCTION

という感じになります。

デコレーターをつけると、その関数を上書きすることが出来ます。
まぁ、難しいことがあんまり理解しなくてもいいんです。
とりあえず、「関数に拡張機能をつける」ものとでも覚えておいてくれたら嬉しいです。

デコレーターについて知りたい方はこちら...

@bot.event

さぁ、早速デコレーターです。
このデコレーターをつけた関数は、BOTのイベントが発生した際に実行されます。

main.py
import nextcord
from nextcord.ext import commands

bot = commands.Bot()

@bot.event
async def on_ready():
    print(bot.user.name)

bot.run("TOKEN")

どのイベントが発生した際にどの関数が実行されるかは、関数名で指定します。
今回のon_readyは、「BOTが起動した際に実行される」イベントです。

そして、bot.user.nameについてです。
bot.user.nameは、botの中のuserというデータです。
この中には、BOT自身のユーザー情報が表示されます。

さらに、そのuserの中にはnameというデータがあります。
nameには、そのユーザーの名前が入っています。

つまり、bot.user.nameは「BOT自身のユーザーの名前」ということになります。
それをon_ready時にprintしているので、BOT起動時に自身の名前を画面に表示するというコードになっています。
それでは実行してみましょう。

$ python main.py
ChristmasBOT

こんな風に、BOTが起動したと同時にユーザー名が表示されたと思います。

これがイベントハンドラについてのおおまかな説明です。

さて、まだまだBOTではないですよね

イベントハンドラについて大雑把に理解してくれたと思います。
次回からはもうちょっとイベントハンドラについて紹介しながら、メッセージに反応するものを作ってみましょう。

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

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