2
2

More than 1 year has passed since last update.

Discord Botを作ってみよう #03 - イベントを使ってみよう

Posted at

まえがき

ひとりアドベントカレンダーという狂気の企画、4日目記事です。

はじめに

この記事(群)は、PythonとPycordを利用してDiscord Botを開発しようとする方に向けたものです。

本記事群では、以下の流れでPycordの機能を紹介していきます。

  1. #01 - Hello, Pycord!
  2. #02 - スラッシュコマンドを使ってみよう
  3. #03 - イベントリスナを使ってみよう(本記事)
  4. #04 - インタラクティブなGUIを作ってみよう
  5. #05 - Cogを導入しよう
  6. #06 - (番外編)デプロイ環境のはなし

この記事は、対象読者をPythonの記法に関する基礎知識はあるが、公式ドキュメントだけで実装できるほど慣れても居ない方としています。

もしこの記事を読んでもコードの意味がわからない場合は、基礎知識が不足している可能性があります。Paizaなどの入門サイトや技術書を参照しながら、足りない知識を補完していくことを推奨します。

  • 動作確認日: 2022/12/3
  • 各種バージョン
    • Python: 3.10.7
    • Pycord: 2.3.1

discordにおけるイベント

今回は、前回までで作ったBotを使って、イベントについて説明します。

イベントとは?

これまで作ってきたBotのコードの中に、以下のような記述がありました。

# 起動時に自動的に動くメソッド
# #03で詳しく説明します
@bot.event
async def on_ready():
    # 起動すると、実行したターミナルに"Hello!"と表示される
    print("Hello!")


# Botが見える場所でメッセージが投稿された時に動くメソッド
@bot.event
async def on_message(message: discord.Message):
    # メッセージ送信者がBot(自分を含む)だった場合は無視する
    if message.author.bot:
        return

    # メッセージが"hello"だった場合、"Hello!"と返信する
    if message.content == 'hello':
        await message.reply("Hello!")

この2つは、「イベント」を利用して動作するメソッドです。

「イベント」とは、Botが見える範囲内で特定の動作や変更が行われた時に、任意の処理を実行するためのしくみのことです。

上の例で言えば、on_readyメソッドとon_messageメソッドがそれにあたります。

on_readyメソッドは、on_ready、すなわちBotが起動して、コマンドなどを実行する準備ができたときに実行されます。

同様に、on_messageメソッドは、on_message、すなわちBotが見える範囲で何らかのメッセージが投稿されたときに実行されます。

他にも、様々なイベントが存在します。
詳しくは、以下の公式リファレンスを参照してください。

Intentsについて

このリファレンスにも記載のとおりですが、#01でさらっと触れた「Intents」は、このイベントに関わる要素です。

Intentsは、「必要なイベントだけを受け取る」ための機能です。
たとえば、Botインスタンスを生成する時に

bot = discord.Bot(intents=discord.Intents(messages=True, reactions=True))

とすると、このBotは、メッセージとリアクションに関するイベントのみを受け取ります。

今回は説明の簡略化のために特権インテントを含むすべてのIntentsを有効にしていますが、今後あなたが何らかのBotを開発する際は、余裕があればここも気にしてみると良いと思います。


今日はここまで!

このシリーズの他の記事

2
2
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
2
2