0
0

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.

○○作ってみない?Advent Calendar 2023

Day 10

去年もやったけど「DiscordBOTでも作ってみない?」2日目

Last updated at Posted at 2023-12-09

もうちょっとBOTらしくしよう

前回記事の状態では、空のBOTが出来ただけでした。

main.py
...

bot = commands.Bot()

@bot.slash_command()
async def greet(interaction: nextcord.Interaction):
    await interaction.response.send_message('はーいこんにちは。')

if __name__ == '__main__':
    ...

このようにすることでとりあえずBOTにスラッシュコマンドを作ることができます。

これで一回起動させてみましょう。

スクリーンショット 2023-12-02 223728.png

このようなスラッシュコマンドが作れます。

で、今の状況だとBOTが正常に起動してるのかどうかがちょっとわかりにくいですよね。
そこで、BOTが起動したら起動メッセージを表示するようにしましょう。

これにはイベントハンドラを使用します。

main.py
...

bot = commands.Bot()

@bot.slash_command()
async def greet(interaction: nextcord.Interaction):
    await interaction.response.send_message('はーいこんにちは。')

@bot.event
async def on_ready():
    print('起動しました。')

if __name__ == '__main__':
    ...

これで起動時に起動しました。と表示されるようになりました。

テキストで返さないでほしいな...

BOTだけが送れるEmbedというものがあります。
なんかBOTを使ってるとよく見るやつですね。

基本的にBOTはテキストを返すよりEmbedを返した方が見栄えもいいし、使いやすいです。

main.py
...

@bot.slash_command()
async def greet(interaction: nextcord.Interaction):
    await interaction.response.send_message(embed=nextcord.Embed(
        title="Greet Result",
        description="Hello, world!"
    ))

...

さっきの「はーいこんにちは。」ってのを少し改造してみました。

スクリーンショット 2023-12-02 224651.png

お、これでよりBOTらしくなってきた。

サブコマンドを作ってみよう

さっきのコマンドは/greetというコマンドでしたが、これを/greet helloとか/greet byeとかにしたいですよね。ね?

このように、コマンドの後ろにさらにコマンドをつけていったものをサブコマンドと言って、上記の例のように、何かのコマンドの後ろにさらにコマンドをつけていくことで、より細かいコマンドを作ることができます。

では、実際にサブコマンドを作ってみましょう。

main.py
...

@bot.slash_command()
async def greet(interaction: nextcord.Interaction):
    pass

@greet.subcommand()
async def hello(interaction: nextcord.Interaction):
    await interaction.response.send_message(embed=nextcord.Embed(
        title="Greet Hello Result",
        description="Hello!"
    ))

@greet.subcommand()
async def bye(interaction: nextcord.Interaction):
    await interaction.response.send_message(embed=nextcord.Embed(
        title="Greet Bye Result",
        description="Bye!"
    ))

...

スクリーンショット 2023-12-02 225223.png

というわけで、基礎はこれでOKですね?

もしわからないことがあったら、公式ドキュメントとか私のアドベンドカレンダーを見てみてください。
これをみておけばDiscordのBOTはある程度作れるようになると思います。

じゃあ、次は中身だね!

というわけで、次回は実際にBOTの中身を作っていきます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?