#python #if-statement #lambda #telegram #telegram-bot
#python #оператор if #лямбда #telegram #telegram-бот
Вопрос:
Я попытался реализовать следующую строку кода в скрипте python для построения бота telegram с использованием 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 feature is under developement')
Приведенный выше код выдает синтаксическую ошибку.
@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 feature is under developement')
Этот код устраняет синтаксическую ошибку, но, тем не менее, он не выполняет то, что я хочу, чтобы он делал. Когда пользователь отправляет «/ test some text», я хочу определить это и выполнить некоторые действия после этого.
Я относительно новичок в python, и я впервые использую функции telebot и lambda. Поэтому, пожалуйста, помогите мне в
- определение того, почему 1-й код выдал мне синтаксическую ошибку.
- Как правильно реализовать это startswith(‘/ test’) . Заранее большое вам спасибо.
Ответ №1:
Поскольку троичный оператор имеет определенный синтаксис, ему необходимо следовать:
<value if True> if <condition> else <value if False>
То, что вы сделали в первом примере, это:
<value if True> if <condition>
Также вам не нужно делать это так, как вы делали
True if msg.text.startswith('/test') else False
.startswith()
возвращает bool
сам по себе.
Неясно, что делает декоратор, но почему бы вам просто не выполнить проверку внутри функции?
@bot.message_handler
def test_start(message):
if msg.startswith('/test'):
msg=bot.send_message(message.chat.id,'This is feature is under developement')
Ответ №2:
Я думаю, вы ищете что-то подобное:
@bot.message_handler(func=lambda msg: True == msg.text.startswith("/test"))
def starts_with_test(message):
args = message.text.split(' ');
for arg in args:
bot.send_message(message.chat.id, "arg = " arg)
Он будет обрабатывать только команды, которые начинались с «/ test». Затем вы можете использовать split(‘ ‘) для анализа аргументов. Для некоторых типов полей могут быть ограничения. Например, для поля «InlineKeyboardButton» -> «callback_data». Это может быть <= 64 байта. Другие обработчики будут работать так, как задумано.