每个齿轮有不同的前缀?

时间:2020-07-26 20:53:08

标签: python discord.py

是否可以为每个嵌齿轮设置前缀?

例如,带有admin命令的Cog的前缀为pa!,而带有一些有趣命令的Cog的前缀为pf!

不使用on_message

编辑: 我想我必须更加详细:

  • 我的serverstats齿轮有一个名为“ stats”的命令,此命令应获取 当我使用pa!
  • 时触发
  • 我的趣味齿轮也有一个“ stats”命令。这应该在我 使用pf!

到目前为止,我唯一的想法就是将默认前缀设置为p!,然后调用命令astats。但我想有一个更好的方法。

3 个答案:

答案 0 :(得分:2)

要扩展Maxsc的答案,您可以定义一个cog_check方法,该方法将在来自齿轮的每个命令之前被调用:

class FunCommands(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self.prefix = "pf!"
    async def cog_check(self, ctx):
        return ctx.prefix == self.prefix

在主代码中,您可以使用可调用对象,该可调用对象使用嵌齿轮中的前缀来确定要注意的前缀。这将作为您的command_prefix

通过
def get_prefixes(bot, message):
    cog_prefixes = (cog.prefix for cog in bot.cogs.values() if hasattr(cog, 'prefix'))
    default_prefixes = ("!")
    return (*cog_prefixes, *default_prefixes)

答案 1 :(得分:1)

您可以使用ctx.prefix检查命令中使用的前缀。因此,您可以运行如下检查:

@commands.command()
async def sample_command(self, ctx):
    if ctx.prefix != "pa!":
        return

并先前启用了这些前缀bot = commands.Bot(command_prefix=("pa!", "pf!"))

答案 2 :(得分:0)

我认为这是一个有趣的问题,因为我已经有一段时间了。我有一个自己实现此想法的想法,尽管它确实使用了on_message函数,但不仅如此。

基本上,我的想法是重写cog类,并为其添加一种表示其应具有的前缀的方法。我以为在@commands.command中使用自定义参数来表示要使用的前缀,但这是用于命令本身的。

然后在on_message函数中,您需要确定在那里要调用什么命令。可能会使用将什么前缀与什么命令相关联的全局命令。

这只是我个人的头脑风暴,如果您允许每个服务器设置自己的前缀以及如何允许这样做以及允许他们为每个命令设置自定义前缀,则需要牢记。祝你好运,希望对你有帮助

相关问题