【问题标题】:How do I make a modular Discord bot in Python?如何在 Python 中制作模块化 Discord 机器人?
【发布时间】:2021-11-01 00:12:11
【问题描述】:

我正在使用 discord.py,我希望每个函数本身都是一个 python 文件。所以我在main.py 中创建机器人并将其导入我需要它的python 文件并在那里创建命令。然后在main.py 中使用bot.process_commands 处理命令。然而,这不起作用。

有没有办法我什至可以做到这一点,还是所有内容都必须放在一个文件中?

【问题讨论】:

标签: python discord.py


【解决方案1】:

不,您不必在一个文件中完成所有操作。您可以使用名为Cogs 的东西。你可以观看教程,阅读 discord.py 的官方文档或阅读我的解释。

齿轮解释:

实际上,您只是打开了可以加载到机器人的辅助文件,例如,一个包含所有帮助命令的 help_commands.py 文件。

要加载命令,需要将它们分组到一个 Cog 类中,为此,您需要在该文件中定义一个继承自 Cog 类的 Main Class,例如:

class My_Help_Cog(commands.Cog): 现在,My_Help_Cog 是我们将加载到机器人的主要 Cog 类。

之后,我们需要一种方法将这个Cog 添加到机器人中。为此,discord.py 使用一个名为 setup 的函数来获取您的 Cog,当您尝试从主文件加载机器人时,discord.py 调用该 setup 函数。

所以让我们在代码末尾定义一个setup 函数。

def setup(bot):
    bot.add_cog(My_Help_Cog(Bot)

一个完整的例子:

?help_commands.py?

import discord
from discord.ext import commands

class My_Help_Cog(commands.Cog, name="Help Commands"): # Our Main Cog class for writing our code. | name= is optional.
    def __init__(self, bot, *args, **kwargs):
        self.bot = bot # So we can access the bot in the class whenever we like.
    
    # All the codes goes here, if you know OOP i assume you already understood.

def setup(bot): # Defining the setup so cog loader can understand what we want to add to the bot.
    bot.add_cog(My_Help_Cog(Bot) # Adding to the bot part.

但是,Cogs 有一个警告。当您在 Cogs 时,您所做的事情会有所不同。

例如;当我们定义命令时,我们不再使用@client.command()(或@bot.command())装饰器来定义命令。 相反,您使用@commands.command() 作为命令装饰器。

events 也是如此,您现在可以通过@commands.Cog.listener() 而不是@bot.event 注册到events

而且,由于我们在Class 中,您需要将self 作为您的第一个参数传递给Class 中的所有内容。

所以,我们设计了我们的Cog,最后一部分只是将它加载到主文件中。为此,您可以在主文件中使用botload_extension 方法:

bot.load_extension("cog's location.") # In our example, just "help_commands.py" for the location.

与齿轮交互的方法更多,但很少:

【讨论】:

  • cogs 和 extensions 是有区别的,请勿混用。 Explanation
猜你喜欢
  • 2020-12-04
  • 2020-11-02
  • 1970-01-01
  • 2020-10-05
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2020-03-31
相关资源
最近更新 更多