如何在 Discord.py 中的 Cog 中加载扩展?
How can I load an extension inside a Cog in Discord.py?
我有一个文件 ticket.py
,我目前正在使用 client.load_extension(ticket)
.
将命令加载到我的机器人中
ticket.py
看起来像这样:
@commands.command(name='ticket')
async def ticket(ctx,*, args=None):
//do stuff
def setup(bot):
bot.add_command(ticket)
然后我将其加载到主文件中:
client=commands.Bot(command_prefix='!')
client.load_extension("ticket")
工作正常,但目前,ticket
命令未与 Cog 相关联。我想知道如何将它加载到 Cog 中(例如,以便它与 Utilities
Cog 相关联)。
通常,我会简单地在 class:
中定义命令
class Utilities(commands.Cog):
@commands.command(name='ticket')
async def ticket(self, ctx, *, args=None):
//do stuff
但是,我的代码相当冗长乏味,我更愿意在单独的文件中处理它(因此 ticket.py
,它在 main.py
之外)。
如何将 ticket
命令加载到 Utilities
Cog 中? (同时保持 ticket.py
和 main.py
分开)。
您可以将命令的实际代码存储在其他文件中,然后直接从 cog 内部调用它。
假设这叫做 command_ticket.py
并且你有一堆随机参数:
async def _ticket(ctx, number: int, whatever: str, consume_rest: str):
# do things
然后,您只需在 cog 中调用它即可:
import command_ticket
class MyCog(commands.Cog):
@commands.command(name='ticket')
async def ticket(ctx, number: int, whatever: str, *, consume_rest: str = None):
command_ticket._ticket(ctx, number, whatever, consume_rest)
请注意,在这种情况下,无需为内部工单功能添加单独的扩展 - 您只需向 cog 注册该扩展即可。
我有一个文件 ticket.py
,我目前正在使用 client.load_extension(ticket)
.
ticket.py
看起来像这样:
@commands.command(name='ticket')
async def ticket(ctx,*, args=None):
//do stuff
def setup(bot):
bot.add_command(ticket)
然后我将其加载到主文件中:
client=commands.Bot(command_prefix='!')
client.load_extension("ticket")
工作正常,但目前,ticket
命令未与 Cog 相关联。我想知道如何将它加载到 Cog 中(例如,以便它与 Utilities
Cog 相关联)。
通常,我会简单地在 class:
中定义命令class Utilities(commands.Cog):
@commands.command(name='ticket')
async def ticket(self, ctx, *, args=None):
//do stuff
但是,我的代码相当冗长乏味,我更愿意在单独的文件中处理它(因此 ticket.py
,它在 main.py
之外)。
如何将 ticket
命令加载到 Utilities
Cog 中? (同时保持 ticket.py
和 main.py
分开)。
您可以将命令的实际代码存储在其他文件中,然后直接从 cog 内部调用它。
假设这叫做 command_ticket.py
并且你有一堆随机参数:
async def _ticket(ctx, number: int, whatever: str, consume_rest: str):
# do things
然后,您只需在 cog 中调用它即可:
import command_ticket
class MyCog(commands.Cog):
@commands.command(name='ticket')
async def ticket(ctx, number: int, whatever: str, *, consume_rest: str = None):
command_ticket._ticket(ctx, number, whatever, consume_rest)
请注意,在这种情况下,无需为内部工单功能添加单独的扩展 - 您只需向 cog 注册该扩展即可。