使用Discord.py标记位置参数

时间:2018-06-05 19:40:20

标签: python discord discord.py

如何强制用户使用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传递多个变量,如果用户标记参数,它会更好,更不容易出错。

1 个答案:

答案 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

您可能希望提供自己对选项字符串的处理,但这是一个很好的起点。

https://stackoverflow.com/a/12013711/5946921

获取的选项解析