【问题标题】:pyTelegramBotAPI func filter and commands filter message_handlerpyTelegramBotAPI func 过滤器和命令过滤器 message_handler
【发布时间】:2018-01-27 09:34:46
【问题描述】:

我的目的是使用 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

【问题讨论】:

    标签: python-3.x lambda telegram telegram-bot py-telegram-bot-api


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2019-08-10
      • 2015-08-17
      相关资源
      最近更新 更多