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

时间:2020-06-07 11:29:39

标签: python python-asyncio discord.py discord.py-rewrite

我想使用齿轮对命令进行分类,而不必重新启动整个机器人以更新某些命令。

因此,我添加了齿轮并添加了我的第一个命令,并且一切正常:命令运行了,我可以更新并重新加载它,而不必重启我的机器人,但是我注意到异步def协程无论如何都没有运行。

我尝试使用asyncio.run()代替了await,但这没有帮助。我将协程和命令添加回主文件,一切正常。我没有收到任何错误消息,只是拒绝运行。我想知道自己在做错什么,因为我对齿轮还很陌生。

齿轮文件:

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))

1 个答案:

答案 0 :(得分:0)

在类中定义方法时,您将希望通过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))

(有点矫kill过正/不必要的方法,但是它解释了这个概念)在类中调用方法的示例:

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异常,因为它不知道{{ 1}}是。