是否可以为每个嵌齿轮设置前缀?
例如,带有admin命令的Cog的前缀为pa!
,而带有一些有趣命令的Cog的前缀为pf!
。
不使用on_message
。
编辑: 我想我必须更加详细:
pa!
pf!
到目前为止,我唯一的想法就是将默认前缀设置为p!
,然后调用命令astats
。但我想有一个更好的方法。
答案 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
函数中,您需要确定在那里要调用什么命令。可能会使用将什么前缀与什么命令相关联的全局命令。
这只是我个人的头脑风暴,如果您允许每个服务器设置自己的前缀以及如何允许这样做以及允许他们为每个命令设置自定义前缀,则需要牢记。祝你好运,希望对你有帮助