0

我的意图是使用 pyTelegramBotAPI 开发一个机器人,其中内部状态“状态”允许或禁止访问某些命令。

仅当命令为“计划”且“状态”为 0 时,片段中的预期输出才是消息

我的代码:

import telebot

TOKEN = 'TOKEN'
tb = telebot.TeleBot(TOKEN)
state = 0


@tb.message_handler(commands=['plan'], func=lambda state: state == 0)
def planFunct(m):
    idCon = m.chat.id
    tb.send_message(idCon, 'El comando plan funciona.' + str(idCon))


tb.polling(none_stop=True)

这个片段的结果是没有出路。而且我无法识别问题是否源于过滤器使用不当、变量范围或 lambda 函数的滥用。

感谢您的帮助,这是我在堆栈溢出中的第一个问题。

问候

API:https ://github.com/eternnoir/pyTelegramBotAPI

4

1 回答 1

1

一个可能的解决方案是通过def使用一个通用函数,问题在于在应用过滤器'func'的语法时很难将参数传递给函数。

要使用参数,我们将在函数内部分配它的值,因为它具有获取它的范围。

我的代码:

import telebot

TOKEN = 'TOKEN'
tb = telebot.TeleBot(TOKEN)
satate = 0


def comprobarEstados(m):
    m = state
    if m == 0:
        return True


@tb.message_handler(commands=['plan'], func=comprobarEstados)
def planFunct(m):
    idCon = m.chat.id
    tb.send_message(idCon, "El comando plan funciona.")


tb.polling(none_stop=True)
于 2017-08-19T15:34:21.313 回答