1
1

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.

【17日目】コマンド風のやつを再現しよう①【PythonでDiscordBOTを作ろう!】

Last updated at Posted at 2022-12-16

コマンド風のやつを再現してみましょう!①

Discordで、BOTを操作する時って、大体プリフィックス部とコマンド部に分かれた文字列を送信しますよね。
例えば、画像にある私のにらBOTのヘルプコマンドであれば、プリフィックスはn!、コマンドはhelp、これを合わせてn!helpという文字を送信します。

image.png

プリフィックスはBOT毎に固定されていて、プリフィックスによって操作するBOTを選びますよね。
今回はこんな機構を再現していきます。あくまでも再現フェーズです。

というわけで、色々な方法があるので、少し記事を分けてみましょう。
これを通っていけば、にらBOTの初期段階までは作れると思います...

文字列同一判定

さて、前回と前々回でスライスを紹介したのは、ここに繋がります。
プリフィックスは最初につけるので、スライスを使用して文字列の最初を切り出し、それとプリフィックスが同一かどうかを判定する方法です。

せっかくですので、このクリスマスBOTのプリフィックスはc!にしましょうか。

プリフィックスはc!で2文字なので、送られてきたメッセージの先頭2文字がc!だったらそれがコマンドだとわかります。
なのでそれを判定しましょう。

main.py
import nextcord
from nextcord.ext import commands

intents = nextcord.Intents.all()
intents.typing = False

bot = commands.Bot(intents=intents)

PREFIX = "c!"

@bot.event
async def on_message(message: nextcord.Message):
    if message.content[:2] == PREFIX:
        # コマンド処理
        await message.reply("コマンドだね!")

bot.run("TOKEN")

とりあえずこんな感じでしょうか。
これで一回動かしてみましょう。
image.png

すると、c!から始まるコマンドみたいなメッセージにのみ反応しますよね!

これがコマンドの始まりです。
ちなみにこれは、私がにらBOTを作り始めた初期の時に使っていたコマンド風処理方法です。
ちなみに今のコマンドのも、この処理を一部受け継いでいたりしてすごいめんどくさいことになっています。
なので、これは基本的に使わないようにしましょう。(Q: 紹介した意味)

ですが、一応文字列の判定は色々な分野で使うと思うので、勉強しておいて損はないでしょう!!!!

そして、プログラミングにおいては参照を多くするというのが大事らしいです。
例えばプリフィックスの文字数が変わった際に、スライス内の数値も変えなければなりません。
ならば、プリフィックスを変えただけで勝手にスライス数値も変わったら嬉しいですよね。

main.py
  import nextcord
  from nextcord.ext import commands

  intents = nextcord.Intents.all()
  intents.typing = False

  bot = commands.Bot(intents=intents)

  PREFIX = "c!"

  @bot.event
  async def on_message(message: nextcord.Message):
-     if message.content[:2] == PREFIX:
+     if message.content[:len(PREFIX)] == PREFIX:
          # コマンド処理
          await message.reply("コマンドだね!")

  bot.run("TOKEN")

lenは、文字列に使えば文字数を返してくれる関数です。
これで、プリフィックスを変えるだけで勝手に変わってくれますね!

Next is startswith...

友人プログラマーが教えてくれたやつです。
色んな言語に存在するやつです。
素直にこれにしておけばよかったです(小声)(震え)
皆さんは私みたいにならないようにしましょう。

というわけで、今日の記事はここまでです。

もしよろしければ記事へのいいねをして、次回記事をお楽しみに!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?