Обработка чат сообщений. 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 шт):
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() ), чтобы слова написанные с большой буквы нормально проверялись.
Пробую вставить это начиная с 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)
Попробуйте последнюю функцию исправить так
@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)
Вот 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()