Python Discord.py-检测消息是否调用任何命令

时间:2018-09-28 19:28:32

标签: python discord.py discord.py-rewrite

我想知道一条消息是否可以不执行而调用任何命令。

我的意思是,我有一条消息,并且我想知道该消息是否触发任何命令。我在文档中没有注意到什么吗?像ctx.command之类的东西,告诉我该消息可以在不运行的情况下执行什么命令。

如果机器人没有发送权限,这将对用户进行烫发检查和DM。谢谢!

1 个答案:

答案 0 :(得分:1)

执行此操作的更简单方法是实际编写一个check来查看调用者是否可以调用命令,如果调用者不能调用,则会引发特殊错误。然后,您可以在on_command_error中处理该错误,包括向用户发送警告。像这样:

WHITELIST_IDS = [123, 456]

class NotInWhiteList(commands.CheckFailure):
    pass

def in_whitelist(whitelist):
    async def inner_check(ctx):
        if ctx.author.id not in whitelist:
            raise NotInWhiteList("You're not on the whitelist!")
        return True
    return commands.check(inner_check)

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, NotInWhiteList):
        await ctx.author.send(error)

@bot.command()
@in_whitelist(WHITELIST_IDS)
async def test(ctx):
    await ctx.send("You do have permission")

要真正回答您的问题,您可以直接使用Bot.get_context获取调用上下文。然后,您可以自己检查ctx.command。 (我当前使用的计算机尚未安装discord.py,因此可能无法正常运行)

您可以检查上下文是否使用ctx.valid调用命令。如果为True,则表示它调用命令。否则就没有。

@bot.event
async def on_message(message):
    ctx = await bot.get_context(message)
    if ctx.valid:
        if ctx.command in restricted_commands and message.author.id not in WHITELIST_IDS:
            await message.author.send("You do not have permission")
        else:
            await bot.process_commands(message)
    else:
        pass # This doesn't invoke a command!