もうちょっとBOTらしくしよう
前回記事の状態では、空のBOTが出来ただけでした。
...
bot = commands.Bot()
@bot.slash_command()
async def greet(interaction: nextcord.Interaction):
await interaction.response.send_message('はーいこんにちは。')
if __name__ == '__main__':
...
このようにすることでとりあえずBOTにスラッシュコマンドを作ることができます。
これで一回起動させてみましょう。
このようなスラッシュコマンドが作れます。
で、今の状況だとBOTが正常に起動してるのかどうかがちょっとわかりにくいですよね。
そこで、BOTが起動したら起動メッセージを表示するようにしましょう。
これにはイベントハンドラを使用します。
...
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を返した方が見栄えもいいし、使いやすいです。
...
@bot.slash_command()
async def greet(interaction: nextcord.Interaction):
await interaction.response.send_message(embed=nextcord.Embed(
title="Greet Result",
description="Hello, world!"
))
...
さっきの「はーいこんにちは。」ってのを少し改造してみました。
お、これでよりBOTらしくなってきた。
サブコマンドを作ってみよう
さっきのコマンドは/greet
というコマンドでしたが、これを/greet hello
とか/greet bye
とかにしたいですよね。ね?
このように、コマンドの後ろにさらにコマンドをつけていったものをサブコマンドと言って、上記の例のように、何かのコマンドの後ろにさらにコマンドをつけていくことで、より細かいコマンドを作ることができます。
では、実際にサブコマンドを作ってみましょう。
...
@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!"
))
...
というわけで、基礎はこれでOKですね?
もしわからないことがあったら、公式ドキュメントとか私のアドベンドカレンダーを見てみてください。
これをみておけばDiscordのBOTはある程度作れるようになると思います。
じゃあ、次は中身だね!
というわけで、次回は実際にBOTの中身を作っていきます。