Python Discord.py - 检测消息是否调用任何命令
Python Discord.py - Detect if a message invokes any commands
我想知道一条消息是否可以在不执行命令的情况下调用任何命令。
我的意思是,我有一条消息,我想知道这条消息是否触发了任何命令。文档中有什么我没有注意到的吗?像 ctx.command
这样的东西告诉我消息可以执行什么命令,没有 运行 它。
如果机器人没有发送权限,这是为了进行权限检查并向用户发送 DM。谢谢!
更简单的方法是实际编写一个 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!
我想知道一条消息是否可以在不执行命令的情况下调用任何命令。
我的意思是,我有一条消息,我想知道这条消息是否触发了任何命令。文档中有什么我没有注意到的吗?像 ctx.command
这样的东西告诉我消息可以执行什么命令,没有 运行 它。
如果机器人没有发送权限,这是为了进行权限检查并向用户发送 DM。谢谢!
更简单的方法是实际编写一个 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!