python:电报机器人命令参数

标签 python parameters arguments telegram-bot

我正在开发电报机器人。 有命令,在我的例子中是 /排行榜

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

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

我想做这样的事情:

/leaderboard {page} {category}

所以我可以这样做:

页面, category = text.split("")

因为两者都是可选的,我的问题是:我如何才能摆脱我不知道第一个 arg 是指页面还是类别的问题(以防未指定页面并将其保留为可选)。因为如果用户不指定页面,类别会排在第一位。

我想让它对用户友好。

我在想:

/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]

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

最佳答案

尝试这样的事情:

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

在 try 部分我检查第一个 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 或其他值的 bool 变量,然后像“if page > -1”一样检查它

关于python:电报机器人命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48088104/

相关文章:

python - call_command 参数是必需的

python - 将literal_eval应用于POS标签列表的字符串会给出ValueError

asp.net - 使用 <asp :HyperLink> that is passing parameters 创建弹出窗口

swift - 我可以强制评估@autoclosure 参数吗?

c# - 从字符串输入中获取参数值

python - 来自 python 本身的 python27.dll 的位置

python - 使用 Conv3D 的 theano 实现的建议

javascript - 使用HTML标签和innerHTML、setAttribute()等传递数据。编辑和更新存储在数据库中的新闻文章

python - 获取函数的可变默认参数

function - systemtap 用户空间函数跟踪