【问题标题】:python: telegram bots command parameterspython:电报机器人命令参数
【发布时间】:2018-06-13 18:15:38
【问题描述】:

我正在开发一个电报机器人。 有命令,在我的情况下是 /leaderboard

命令可以有参数(基本上是命令后面的任何东西)。

我想为页面添加一个参数 int,为类别添加一个 int 参数。它们都是可选的。

我想这样做:

/leaderboard {page} {category}

所以我可以这样做:

page, category = text.split(" ")

因为两者都是可选的,所以我的问题是:我怎样才能摆脱我不知道第一个参数是指页面还是类别的问题(如果页面未指定并保留为可选)。因为如果用户不指定页面,则类别排在首位。

我想让它变得用户友好。

我在想这样的事情:

/leaderboard page={int} categ={int}

然后

for arg in text.split(" "):
    if arg.startswith("page"):
        page = arg.split("=")[1]
    elif arg.startswith("categ"):
        categ = arg.split("=")[1]

我只是在这里写了代码,所以它可能是错误的,但我更担心要使用的概念,而不是代码中的 if。 所以我问你是否有比这些更好的解决方案。提前致谢。

【问题讨论】:

    标签: python parameters arguments telegram-bot


    【解决方案1】:

    试试这样的:

    在我的例子中,我添加了两个变量和 boolean category_only

    在尝试部分我检查第一个 arg 中是否有 int (count = int(args[0]))

    如果不是,在“除了 ValueError”中,我将 category_only 设置为 true 并处理这种情况。 我认为您应该尝试解析第二个参数,如果只有一个参数,请使用附加变量。

    @run_async
        def cats_command(self, bot, update, args):
            logging.info(str(update.message.from_user) + ' /cats')
            count, category = 3, ''
            category_only = False
            try:
                if int(args[0]) > 20:
                    raise TooMuchCountError('too much')
                if int(args[0]) < 1:
                    raise TooSmallCountError('too small')
                count = int(args[0])
    
            except TooMuchCountError:
                update.message.reply_text(
                    TextMessages.too_much_count_error_message.format(count))
            except TooSmallCountError:
                update.message.reply_text(
                    TextMessages.too_small_count_error_message.format(args[0]))
            except IndexError:
                update.message.reply_text(
                    TextMessages.index_error_message.format(count))
            except ValueError:
                category_only = True
    
            try:
                if category_only:
                    category = str(args[0])
                else:
                    category = str(args[1])
    
                l = map(lambda x: x.name, self.categories)
                if category not in l:
                    raise WrongCategoryError('not in list')
    
            except WrongCategoryError:
                update.message.reply_text(
                    TextMessages.worng_category_error_message)
                category = ''
            except IndexError:
                pass
    
            logging.info(' catting for user {}'.format(update.message.from_user.first_name))
            images = Parser.get_images('xml', count, category)
    

    所以,你的代码:

    args = text.split(" ")
    category_only = False;
    page, category = 0,0
    try:
        category = int(args[0])
    except ValueError:
        print('there is no good params at all!')
        /* catch this and return*/
    try:
        page = int(args[1])
    except ValueError:
        category_only = True
    

    您也可以使用 page=-1 或其他值来避免布尔变量,然后像“if page > -1”一样检查它

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 1970-01-01
      • 2023-03-12
      • 2020-10-28
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多