discord.py异步def协同程序不在cogs中运行

2024-05-14 05:34:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用cogs对命令进行分类,并且不必重新启动整个机器人来更新某些命令

因此,我添加了cogs并添加了我的第一个命令,一切都正常:命令运行了,我可以更新并重新加载它,而无需重新启动我的bot,但我注意到async def coroutine无论如何都没有运行

我尝试使用asyncio.run()而不是wait,但没有帮助。我将协同程序和命令添加回主文件,一切正常。我没有收到任何错误消息,它只是拒绝运行。我想知道我做错了什么,因为我对cogs很陌生

Cogs文件:

class MembersCog(commands.Cog):
    def __init__(self, client):
        self.client = client


    async def printfunc(self):
        print("coroutine just ran") #This never runs.

    @commands.command()
    async def test(self, ctx):
        print("command just ran")
        await printfunc()

def setup(client):
    client.add_cog(MembersCog(client))

Tags: 文件命令selfclientasyncdefcommandcommands
1条回答
网友
1楼 · 发布于 2024-05-14 05:34:23

在类中定义方法时,您需要通过self关键字访问它,这样程序就知道它在引用自己类中的方法

class MembersCog(commands.Cog):

    def __init__(self, client):
        self.client = client


    async def printfunc(self):
        print("coroutine just ran")

    @commands.command()
    async def test(self, ctx):
        print("command just ran")
        await self.printfunc()

def setup(client):
    client.add_cog(MembersCog(client))

(有点过分/不必要的方法,但它解释了概念)类内调用方法的示例:

class Car:

    def __init__(self, mileage):
        self.mileage = mileage

    def add_miles(self, x):
        self.mileage += x

    def drive(self, x):
        self.add_miles(x)

然后使用这个类:

>>> c = Car(50)
>>> c.mileage
50
>>> c.drive(20)
>>> c.mileage
70

如果您将self.add_miles(x)更改为add_miles(x)并运行c.drive()方法,它将抛出一个NameError异常,因为它不知道add_miles()是什么

相关问题 更多 >