discord.py - 异步 def 协程不 运行 in cogs
discord.py - Async def coroutine doesn't run in cogs
我想使用 cogs 对命令进行分类,而不必重新启动我的整个机器人来更新某些命令。
所以我添加了 cogs 并添加了我的第一个命令并且一切正常:命令 运行 我可以更新并重新加载它而无需重新启动我的机器人,但我注意到 async 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))
在 class 中定义方法时,您需要通过 self
关键字访问它,这样程序就知道它引用了自己 [=] 中的方法29=].
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))
(有点overkill/unnecessary方法,但它解释了概念)在class中调用方法的示例:
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)
然后使用这个 class:
>>> c = Car(50)
>>> c.mileage
50
>>> c.drive(20)
>>> c.mileage
70
如果您将 self.add_miles(x)
更改为 add_miles(x)
和 运行 c.drive()
方法,它会抛出一个 NameError
异常,因为它不会不知道 add_miles()
是什么。
我想使用 cogs 对命令进行分类,而不必重新启动我的整个机器人来更新某些命令。
所以我添加了 cogs 并添加了我的第一个命令并且一切正常:命令 运行 我可以更新并重新加载它而无需重新启动我的机器人,但我注意到 async 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))
在 class 中定义方法时,您需要通过 self
关键字访问它,这样程序就知道它引用了自己 [=] 中的方法29=].
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))
(有点overkill/unnecessary方法,但它解释了概念)在class中调用方法的示例:
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)
然后使用这个 class:
>>> c = Car(50)
>>> c.mileage
50
>>> c.drive(20)
>>> c.mileage
70
如果您将 self.add_miles(x)
更改为 add_miles(x)
和 运行 c.drive()
方法,它会抛出一个 NameError
异常,因为它不会不知道 add_miles()
是什么。