A função lamda em @ bot.message_handler () não está funcionando corretamente no telebot python

Sep 18 2020

Tentei implementar a seguinte linha de código em script python para a construção de um 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')

O código acima me dá um erro de sintaxe.

@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 resolve o erro de sintaxe, mas ainda assim, não faz o que eu quero. Quando um usuário envia '/ test some text', quero identificar isso e fazer algumas ações depois disso.

Sou relativamente novo em python e esta é minha primeira vez usando funções telebot e lambda. Então por favor me ajude em

  1. identificando porque o primeiro código me deu um erro de sintaxe.
  2. Como implementar este startswith ('/ test') corretamente. Muito obrigado antecipadamente.

Respostas

2 go2nirvana Sep 18 2020 at 08:05

Como o operador ternário tem uma sintaxe específica, ela deve ser seguida:

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

O que você fez na primeira amostra é:

<value if True> if <condition>

Além disso, você não tem que fazer como fez

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

.startswith()retorna boolpor conta própria.

Não está claro o que o decorador faz, mas por que você simplesmente não executa a verificação dentro da função?

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