【问题标题】:Are Cogs supposed to be in the same code?Cogs 是否应该使用相同的代码?
【发布时间】:2021-04-10 02:27:02
【问题描述】:

我见过很多关于 cogs 的东西,但我从来不明白 cogs 应该在相同的代码中还是在不同的文件中。如果它在不同的文件中,我如何将它加载到主代码文件中?我问了很多次这个问题,得到了数百万个不同的答案。一个应该有效的答案是bot.load_extension('name'),但我不知道用什么来代替“名字”。我尝试写下 cog 文件的名称和 cog 的名称,但 PyCharm 确实接受了。

【问题讨论】:

    标签: discord.py


    【解决方案1】:

    我也是 discord.py 的新手,但我在这里分享我的小知识! [对不起,如果我的词汇有问题!]

    Cogs 就像子类,可以帮助您组织代码并将代码分发到不同的部分,但仍然只有一个机器人,而不是在一个文件中包含很长的代码和不同类型的命令。 更多信息:Discord.py Documentation For Cogs

    1. 在与您的 bot.py 相同的目录中创建一个名为 cogs 的文件夹

    2. 要使用命令加载和卸载 cog,您可以使用以下代码:

    import discord
    from discord.ext import commands
    import os
    
    @client.command()
    async def load(ctx, extension):
        client.load_extension(f'cogs.{extension}')
    
    @client.command()
    async def unload(ctx, extension):
        client.unload_extension(f'cogs.{extension}')
    
    for filename in os.listdir('./cogs'):
        if filename.endswith('.py'):
            client.load_extension(f'cogs.{filename[:-3]}')
    

    这将在你制作一个齿轮时加载。

    1. cogs 文件夹中创建一个 cog 示例 [example.py]。
    2. 您需要在每个 cog 的开头定义类 cog,并在每个 cog 的末尾定义 cog setup,如下所示:
    import discord
    
    class Example(commands.Cog): #Here Example is name of cog example.py
    
        def __init__(self, client):
            self.client = client
    
    
    #Your code 
    #Your code
    #Your code
    
    
    def setup(client):
        client.add_cog(Example(client)) #Here Example is name of cog example.py
    

    如果一开始没有加载,只需使用一次加载命令。 重新启动机器人后,Cogs 将自动加载 或者您可以使用load [cogname]unload [cogname] 命令简单地卸载和加载它们。

    • @client.event 更改为 @commands.Cog.listener 装饰器
    • @client.commands 更改为 @commands.command 装饰器

    请原谅我的任何错误和误导^^!

    致谢:A Simple Tutorial By Lucas On Youtube!

    【讨论】:

    • 那你是怎么做的。您还可以添加 client 变为 self.client (或您命名的任何名称)
    • 谢谢,这与我的方法不同,但实际上效果更好。
    【解决方案2】:

    我发现您需要将 cog 文件名与 '.所以 cog 应该在不同的代码中并将 cog 文件加载到主文件中,你可以这样做bot.load_extension('<cog-name>')

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多