コマンド風のやつを再現してみましょう!①
Discordで、BOTを操作する時って、大体プリフィックス部とコマンド部に分かれた文字列を送信しますよね。
例えば、画像にある私のにらBOTのヘルプコマンドであれば、プリフィックスはn!
、コマンドはhelp
、これを合わせてn!help
という文字を送信します。
プリフィックスはBOT毎に固定されていて、プリフィックスによって操作するBOTを選びますよね。
今回はこんな機構を再現していきます。あくまでも再現フェーズです。
というわけで、色々な方法があるので、少し記事を分けてみましょう。
これを通っていけば、にらBOTの初期段階までは作れると思います...
文字列同一判定
さて、前回と前々回でスライス
を紹介したのは、ここに繋がります。
プリフィックスは最初につけるので、スライスを使用して文字列の最初を切り出し、それとプリフィックスが同一かどうかを判定する方法です。
せっかくですので、このクリスマスBOTのプリフィックスはc!
にしましょうか。
プリフィックスはc!
で2文字なので、送られてきたメッセージの先頭2文字がc!
だったらそれがコマンドだとわかります。
なのでそれを判定しましょう。
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")
とりあえずこんな感じでしょうか。
これで一回動かしてみましょう。
すると、c!
から始まるコマンドみたいなメッセージにのみ反応しますよね!
これがコマンドの始まりです。
ちなみにこれは、私がにらBOTを作り始めた初期の時に使っていたコマンド風処理方法です。
ちなみに今のコマンドのも、この処理を一部受け継いでいたりしてすごいめんどくさいことになっています。
なので、これは基本的に使わないようにしましょう。(Q: 紹介した意味)
ですが、一応文字列の判定は色々な分野で使うと思うので、勉強しておいて損はないでしょう!!!!
そして、プログラミングにおいては参照を多くする
というのが大事らしいです。
例えばプリフィックスの文字数が変わった際に、スライス内の数値も変えなければなりません。
ならば、プリフィックスを変えただけで勝手にスライス数値も変わったら嬉しいですよね。
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
...
友人プログラマーが教えてくれたやつです。
色んな言語に存在するやつです。
素直にこれにしておけばよかったです(小声)(震え)
皆さんは私みたいにならないようにしましょう。
というわけで、今日の記事はここまでです。
もしよろしければ記事へのいいねをして、次回記事をお楽しみに!