如何强制用户使用Discord.py中的命令标记位置参数。例如,我有以下功能:
bot = commands.Bot('#')
@bot.command()
async def example_function(ctx, a: int, b: int, c: int):
await ctx.send((a+c)/b)
如何强制用户标记参数?即调用这样的命令:
#example_function -a=7 -b=8 -c=5
我问的原因是 - 我有几个复杂的函数,需要为我创建的Dicord Bot传递多个变量,如果用户标记参数,它会更好,更不容易出错。
答案 0 :(得分:0)
据我所知,discord.py中没有内置提供此功能的内容。您可能想要做的是接收整个消息(通过命令调用的所有内容),然后解析消息以提取参数。
import shlex
bot = commands.Bot('#')
@bot.command(pass_context=True)
async def example(self, context, *, message: str):
''' example command '''
args = shlex.split(message)
opts = {k.strip('-'): True if v.startswith('-') else v
for k,v in zip(args, args[1:]+["--"]) if k.startswith('-')}
a, b, c = (int(x) for x in (opts[y] for y in 'acb'))
self.send((a + c) / b)
用户调用命令:
#example --a 7 --b 8 --c 5
选项变量变为:
{'a': '7', 'c': '5', 'b': '8'}
bot发送:
1.5
您可能希望提供自己对选项字符串的处理,但这是一个很好的起点。
获取的选项解析