discord.py v2.0.0を使ってみる

6855 ワード

概要

discord.py v2.0.0 でcommandsフレームワークを使ってみるという記事です。まだv2.0.0は正式リリースされていないため、今後この記事も役に立たなくなる可能性があることを予めご了承ください。また、この記事は執筆中です。スラッシュコマンドなども今後書いていきますのでしばらくお待ちください。

完成品

main.py
import asyncio

import discord
from discord.ext import commands

COGS = [
    'cogs.basic'
]

class MyBot(commands.Bot):
    def __init__(self, prefix: str, intents: discord.Intents):
        super().__init__(command_prefix=prefix, intents=intents)
    
    async def on_ready(self):
        print(f'Logged in as {self.user}#{self.user.id}')

async def main():
    bot = MyBot(intents=discord.Intents.all(), prefix='!')
    for cog in COGS:
        await bot.load_extension(cog)

    await bot.start(token='TOKEN')


if __name__ == '__main__':
    asyncio.run(main())
cogs/basic.py
from discord.ext import commands

class BasicCog(commands.Cog):
    def __init__(self, bot: commands.Bot):
        self.bot: commands.Bot = bot    

async def setup(bot: commands.Bot):
    await bot.add_cog(BasicCog(bot))

何が変わったのか

  1. load_extension, add_cogが非同期になっています
  2. add_cog の非同期化に伴いcog側の setup 関数が非同期になっています
  3. intentsが__init__ で必須になりました。今回は全て許可しています

スラッシュコマンドについて

執筆中です

感想

今までload_extension__init__の中でやっていたためasync def main()を作らなくてよかったので、少しだけ手間が増えたかな?って私は感じました。ただ、非同期に対応したのは良い事だと思います。