はじめに
こちらを参照するとより正確です
インストール
discord.pyのインストール
以下のどちらかでインストールします。
pip install -U discord.py
python -m pip install -U discord.py
詳しくは以下を参照
https://discordpy.readthedocs.io/ja/latest/intro.html
discord-ext-botのインストール
以下のどちらかでインストールします。pip install discord-ext-bot
python -m pip install discord-ext-bot
botの登録
以下からdiscord側でbotの作成を行います。
登録できたら右にある次のような欄からbotを選択
そしてaddbotを押してください
私の場合testで作成すると他のplayerがこの名前を使いすぎているので作成できません
と出たのでなるべくオリジナルの名前にしておくとよいでしょう。
準備
まずはメインファイルにインポート
from discord.ext import commands
import discord
import traceback
※tracebackはなくてもよいですが、あると細かいエラーを表示してくれます。
メインクラスの作成
class main(commands.Bot):
def __init__(self, command_prefix):
# スーパークラスのコンストラクタに値を渡して実行。
super().__init__(command_prefix)
super().__init__
で親クラスcommands.Bot
にcommand_prefix
を渡し実行します。
一番下botが起動するように設定しよう。
if "__main__" == __name__:
bot = main(command_prefix=commands.when_mentioned_or('任意の文字'))
bot.run("TOKEN")
任意の文字は先頭に記入する文字
TOKEN
には先ほど手に入れたTOKENをいれる。
if "__main__" == __name__
このファイルが呼ばれたときのみ実行(おまじない)bot = main(command_prefix=commands.when_mentioned_or('任意の文字'))
botにメインクラスを代入し、 mainクラスにcommand_prefixの値を代入して実行する。commands.when_mentioned_or('任意の文字')
このbotの実行方法である。
メンションもしくは 任意の文字
が打たれた時実行される。
commands.when_mentioned_or('任意の文字')
のところを丸ごと "任意の文字"
に変えても実行できる。
bot.run("TOKEN")
mainクラスの実行。これでbotが起動する。Botが起動したときコンソールにメッセージを送る
先ほど作成したメインクラスに次を書き足すasync def on_ready(self):
print('-----')
print(self.user.name)
print(self.user.id)
print('-----')
await bot.change_presence(status=discord.Status.online,activity=discord.Game(f"任意の文字"))
async def on_ready(self)
で実行完了時に起動されます。
await bot.change_presence(status=discord.Status.online,activity=discord.Game(f"任意の文字"))
status
にdiscord.Status.online
やdiscord.Status.idle
を代入することでbotを退席中などに編集できる。
activity=discord.Game(f"任意の文字")
でbotのアクティビティを編集できる。建設中をプレイ中
cogsを作成しよう
このままメインクラスにつらつらと書くのでもよいがcogsを作成してコマンドごとにファイルを分けよう。まず初めにmain.pyと同じ階層にcogsフォルダーを作成するその中にcmd.py(好きな名前にしよう)ファイルを作成する。
次にcogsファイルのcmd.pyを読み込むようにmain.pyを書き換える
まずは読み込むファイルリストをインポートの下に書く。cogslist=[
'cogs.cmd'
]
次にメインクラスにてcogslistを読み込むようにする。
for cog in cogslist:
try:
self.load_extension(cog)
except Exception:
traceback.print_exc()
注意
準備でtracebackを入れてない方はtraceback.print_exc()
をpass
に書き換えよう。
try
コマンドでエラーをはじき出しbotの実行を優先します。
self.load_extension(cog)
for ~ in ~
でcogに代入されたcogslistにあるファイルを一つずつ読み込みます。
cmd.pyをかこう
cmdにもクラスを作成、インポートもする。from discord.ext import commands
import discord
class TestCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
def setup(bot):
bot.add_cog(TestCog(bot))
def __init__(self, bot): self.bot = bot
main.pyからもらったbot変数をself.botに代入してインスタンス変数(class内で使える変数)にする。def setup(bot): bot.add_cog(TestCog(bot))
main.pyはsetup関数を覗きに来るのでここにclassを読み込むように指定する。@commands.command()
async def test(self, ctx):
await ctx.send("テスト成功!")
注意
毎回@commands.command()
で関数はデコレータしてください。
async def test(self,ctx)
この関数でコマンドを指定しています。 main.pyで指定したcommand_prefixの後にtestと入力するとこの関数が実行されます。 またこの関数の引数を増やすことでtestの後ろに半角スペース開けて入力された値を利用することもできます。終わりに
今回はcogについての話を重点的に話しました。 コマンドの作成以外にもたくさんの機能があるのでdiscord.pyについては良く調べねば、、、 私もよくわからないことが多いのでこれから研究ですね。参考