如何让Python接受多个单词作为参数?

时间:2020-04-08 08:36:55

标签: python python-3.x bots discord.py

这是我要开始使用的确切应用程序:我正在尝试允许用户为“ status”参数输入多个单词。

即!setstatus玩英雄联盟

显示“正在播放联赛”而不是整个字符串。我知道为什么,但是如何格式化参数以接受多个单词作为参数?我能做到吗?

@bot.command() 
@commands.has_role('Bot Boss')
async def setstatus(ctx, action, status, url = None): 

    accepted_actions = ['playing', 'streaming', 'listening', 'watching']

    if action.lower() not in accepted_actions:
        await ctx.send("First parameter must be 'playing', 'streaming', 'listening', or 'watching'.")



    if action.lower() == 'playing':
        await bot.change_presence(activity = discord.Game(name = status))

    if action.lower() == 'streaming':
        await bot.change_presence(activity = discord.Streaming(name = status, url = url))

    if action.lower() == 'listening':
        await bot.change_presence(activity = discord.Activity(type=discord.ActivityType.listening, name=status))

    if action.lower() == 'watching':
        await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=status))

2 个答案:

答案 0 :(得分:2)

这与Python无关,仅与不和谐的bot库有关。

因此,检查the documentation for discord.py提供了三种方法:

要使用中间有空格的单词,应将其引用:

有时您希望用户传递数量不确定的参数。该库支持以下操作,类似于在Python中如何完成变量列表参数:

@bot.command()
async def test(ctx, *args):
    await ctx.send('{} arguments: {}'.format(len(args), ', '.join(args)))

这使我们的用户可以随意接受一个或多个参数。此操作与位置参数相似,因此应使用多字参数加引号。

当您想自己处理参数的解析或不想将多单词的用户输入包装在引号中时,可以要求库将其余部分作为一个参数提供给您。我们通过使用仅关键字参数来实现此目的,如下所示:

@bot.command()
async def test(ctx, *, arg):
   await ctx.send(arg)

答案 1 :(得分:-1)

我认为您应该研究ArgParse,这是一个解析参数的标准Python库。

import argparse
if __name__ == "__main__":     
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('command')
    parser.add_argument('multi_word')
    parser.add_argument('something_else')

    args = parser.parse_args()

    print(args.command)
    print(args.multi_word)
    print(args.something_else)

输出:

> python test.py playing "Counterstrike: Global Offensive" another
playing
Counterstrike: Global Offensive
another

您可以调用函数而不是打印。

编辑:对不起,我没有看到您正在尝试使用Discord东西。