Обработка чат сообщений. pytelegrambotapi

Я пытаюсь создать обработчик сообщений. Который будет отвечать на полученное сообщение если оно имеется в списке. Например. я добавляю такую часть кода в этот код.

@bot.message_handler(content_types=['text'])

def lalala(message):
    if message.chat.type == 'private':
        if message.text == 'ПРИВЕТ':
            bot.send_message(message.chat.id, Да я рад тебя видеть)
else:
 bot.send_message(message.chat.id, Прости друг я тебя не понимаю)

Ребята вы можете мне помочь, реализовать такое?


Ответы (4 шт):

Автор решения: KABAN PUNK

Telegram в данном вопросе - лишнее. Вы спрашиваете про то, как проверить есть ли строка списке. Это делается так:

lst = ['a','b','c']
if 'c' in a:
   print(" список lst содержит 'c' ")
else:
   print(" список lst не содержит 'c' ")

А в вашем случае:

data = ['hello', 'hi', 'привет', 'йоу']

@bot.message_handler(content_types=['text'])
def lalala(message):
    if message.chat.type == 'private':
        if message.text.lower() in data: 
            bot.send_message(message.chat.id, 'Да я рад тебя видеть')
else:
    bot.send_message(message.chat.id, 'Прости друг я тебя не понимаю')

Также советую переводить весь текст сообщения в нижний регистр ( str.lower() ), чтобы слова написанные с большой буквы нормально проверялись.

→ Ссылка
Автор решения: correli

Пробую вставить это начиная с 70 строки деплой ругается на 73 строчку. Ни как не пойму какие отступы нужно соблюдать? Иногда даже при редактированни кода, не внося изменения вылетают ерроры на табуляцию. Сервисы поиска табов и пробелов указывают на ошибку, знаю что табы не использу только пробелы, удаляю указанный пробел, и не как не деплоит пишет что есть ошибки в табуляции. как это решить?

    import telebot
import config
import random

from telebot import types

bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(commands=['start'])
def welcome(message):
    sti = open('avatar1459.jpg', 'rb')
    bot.send_sticker(message.chat.id, sti)

    # keyboard
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton("? Рандомное число")
    item2 = types.KeyboardButton("? Как дела?")
    item3 = types.KeyboardButton("?Пополнить?")
    item4 = types.KeyboardButton("23")


    markup.add(item1, item2, item3, item4)

    bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nЯ - <b>{1.first_name}</b>, бот созданный чтобы быть подопытным кроликом.".format(message.from_user, bot.get_me()),
        parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])

def lalala(message):
    if message.chat.type == 'private':
        if message.text == '?Пополнить?':
            bot.send_message(message.chat.id, str(random.randint(0,100)))
            bot.send_message(message.chat.id, str(random.randint(0,100)))   
        elif message.text == '? Рандомное число':
            bot.send_message(message.chat.id, 'Я не пью')
        elif message.text == '23':    
            bot.send_message(message.chat.id, 'Я не знаю что ответить ?')  

        elif message.text == '? Как дела?':

            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
            item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')

            markup.add(item1, item2)

            bot.send_message(message.chat.id, 'Отлично, сам как?', reply_markup=markup)
        else:
            bot.send_message(message.chat.id, 'Я не знаю что ответить ?')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'good':
                bot.send_message(call.message.chat.id, 'Вот и отличненько ?')
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Бывает ?')

            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="? Как дела?",
                reply_markup=None)

            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="ЭТО ТЕСТОВОЕ УВЕДОМЛЕНИЕ!!11")

    except Exception as e:
        print(repr(e))
@bot.message_handler(func=lambda message: True)
def message_handler(message):
    if 'hello' in message.text:
bot.send_message(message.chat.id, 'Я не з')

# RUN
bot.polling(none_stop=True)
→ Ссылка
Автор решения: ih8sn0w

Попробуйте последнюю функцию исправить так

    @bot.message_handler(func=lambda message: True)
    def message_handler(message):
        if 'hello' in message.text:
            bot.send_message(message.chat.id, 'Здравствуй')
        else:
            bot.send_message(message.chat.id, 'Я не з')


    # RUN
    bot.polling(none_stop=True)
→ Ссылка
Автор решения: Zhymabek Roman

Вот 100% рабочии код, по сравнении с другими методами, в моем коде за каждый функционал будет отвечать определнная функция

import telebot
import logging

API_TOKEN = 'BOT TOKEN HERE'

bot = telebot.TeleBot(API_TOKEN)

logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG)

words_list = ['lenin', 'jugashvili', 'tester']

@bot.message_handler(func=lambda message: message.text.lower() in words_list)
def send_welcome(message):
    bot.reply_to(message, "Word detected in list!")

bot.polling()
→ Ссылка