La función de lamda en @ bot.message_handler () no funciona correctamente en Telebot Python

Sep 18 2020

Intenté implementar la siguiente línea de código en el script de Python para la construcción de un bot de telegrama usando telebot.

@bot.message_handler(func=lambda msg:True if msg.text.startswith('/test'))
def test_start(message):
    msg=bot.send_message(message.chat.id,'This is feature is under developement')

El código anterior me da un error de sintaxis.

@bot.message_handler(func=lambda msg:True if msg.text.startswith('/test') else False)
def test_start(message):
    msg=bot.send_message(message.chat.id,'This is feature is under developement')

Este código resuelve el error de sintaxis, pero aún así, no hace lo que quiero que haga. Cuando un usuario envía '/ probar algún texto', quiero identificar esto y realizar algunas acciones después de eso.

Soy relativamente nuevo en Python y esta es la primera vez que uso las funciones telebot y lambda. Así que por favor ayúdame a entrar

  1. identificando por qué el primer código me dio un error de sintaxis.
  2. Cómo implementar esto comienza con ('/ test') correctamente. Muchas gracias de antemano.

Respuestas

2 go2nirvana Sep 18 2020 at 08:05

Debido a que el operador ternario tiene una sintaxis específica, debe seguirse:

<value if True> if <condition> else <value if False>

Lo que hizo en la primera muestra es:

<value if True> if <condition>

Además, no tienes que hacerlo como lo hiciste

True if msg.text.startswith('/test') else False

.startswith()regresa boolpor su cuenta.

No está claro qué hace el decorador, pero ¿por qué no realiza la verificación dentro de la función?

@bot.message_handler
def test_start(message):
    if msg.startswith('/test'):
        msg=bot.send_message(message.chat.id,'This is feature is under developement')