web-dev-qa-db-ja.com

discord.pyの書き換え:TypeError:歯車は歯車から派生する必要があります

ボットが大きくなるにつれて、歯車を実装しようとしていますが、問題が発生しました。コード全体をセットアップして準備ができましたが、奇妙な理由で次のエラーが発生し続けます。

    Traceback (most recent call last):
  File "C:\Users\Lauras\Desktop\Akagi Bot\main.py", line 107, in <module>
    bot.add_cog("cogs.fun")
  File "C:\Users\Lauras\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\ext\commands\bot.py", line 477, in add_cog
    raise TypeError('cogs must derive from Cog')
TypeError: cogs must derive from Cog

Main.pyの私のコードは次のようになります:

   import discord
    import asyncio
    import typing
    import random
    import json
    import oauth
    from discord.ext import commands

bot = commands.Bot(command_prefix='~')

@bot.event
async def on_ready():
    await bot.change_presence(activity=discord.Activity(name='with Kaga :3',type=0))
    print (discord.__version__)
    print(f"{bot.user.name} - {bot.user.id}")
    print ('Akagi is ready to serve the Commander :3 !')

    bot.add_cog("cogs.fun")
    bot.run(oauth.bot_token)

そして、「楽しい」歯車は次のとおりです。

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='~')

class FunCog:
    def __init__(self, bot):
        self.bot = bot

    @commands.command()
    async def hug(self, ctx):
        await ctx.send('has been hugged by', file=discord.File('iloveyou.gif'))
        pass


def setup(bot: commands.Bot):
    bot.add_cog(FunCog(bot))

何が問題なのですか?私もdiscord.pyリライトを使用しています。ありがとう!

3
v i i l k a s

チェックアウトすることをお勧めします https://discordpy.readthedocs.io/en/latest/ext/commands/cogs.html これは、歯車をよりよく理解するのに役立ちます。

まず、bot.add_cog("cogs.fun")bot.load_extension("cogs.fun")に変更する必要があります

これは必須ではありませんが、botを再度定義する必要はありません。 def setup(bot: commands.Bot):def setup(bot):に変更します

また、_class FunCog:_をclass FunCog(commands.Cog):に変更する必要があります。

リライトバージョンの新しいアップデートが出たときは、変更を常に最新の状態に保つことをお勧めします。 作業用歯車ファイル の例を簡単に見てみましょう。これがお役に立てば幸いです。最大.

3
MaxiMax

class FunCog(commands.Cog):コード文字列を手伝ってくれた@Elliseinに感謝します。コードを修正するのに役立ったもう1つのことは、main.pyのbot.add_cog("cogs.fun")bot.load_extension("cogs.fun")に置き換えることでした。

0
v i i l k a s