@motoblok1

Нужна помощь с тг ботом, нужно чтобы else не срабатывал на каждое сообщение пользователя, что делаю не так?

import random
import telebot
from telebot import types
import requests
from bs4 import BeautifulSoup
from datetime import datetime

today = datetime.today()
today = today.strftime('%d/%m/%Y')
url = 'http://www.cbr.ru/scripts/XML_daily.asp?'
payload = {'date_req': today}
token = 'токен'
bot = telebot.TeleBot(token)


def get_curse(id):
    response = requests.get(url, params=payload)
    xml = BeautifulSoup(response.content, 'html.parser')
    return xml.find('valute', {'id': id}).value.text.replace(',', '.')


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = types.KeyboardButton('Во что поиграть?')
    button2 = types.KeyboardButton('Рандомное число')
    button3 = types.KeyboardButton('Узнать курс валют')
    button4 = types.KeyboardButton('Викторина')
    markup.add(button1, button2, button3, button4)
    bot.send_message(message.chat.id, 'Привет!', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def bot_tg(message):
    if message.chat.type == 'private':
        if message.text == 'Во что поиграть?':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            button2 = types.KeyboardButton('Стратегия')
            button3 = types.KeyboardButton('Шутер')
            button4 = types.KeyboardButton('Выживание')
            back = types.KeyboardButton('Назад')
            markup.add(button2, button3, button4, back)
            bot.send_message(message.chat.id, 'Во что поиграть?', reply_markup=markup)

    if message.text == 'Стратегия':
        bot.send_message(message.chat.id, 'Dota 2')

    elif message.text == 'Выживание':
        bot.send_message(message.chat.id, 'Dayz')

    elif message.text == 'Шутер':
        bot.send_message(message.chat.id, 'Apex')

    if message.text == 'Назад':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton('Во что поиграть?')
        button2 = types.KeyboardButton('Рандомное число')
        button3 = types.KeyboardButton('Узнать курс валют')
        button4 = types.KeyboardButton('Викторина')
        markup.add(button1, button2, button3, button4)
        bot.send_message(message.chat.id, 'Главное меню', reply_markup=markup)

    if message.text == 'Рандомное число':
        bot.send_message(message.chat.id, 'Ваше число: ' + str(random.randint(0, 100)))

    if message.text == 'Узнать курс валют':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        button1 = types.KeyboardButton('Доллар')
        button2 = types.KeyboardButton('Тенге')
        button3 = types.KeyboardButton('Евро')
        button4 = types.KeyboardButton('Китайский юань')
        back = types.KeyboardButton('Назад')
        markup.add(button1, button2, button3, button4, back)
        bot.send_message(message.chat.id, 'Главное меню', reply_markup=markup)
    elif message.text == 'Доллар':
        bot.send_message(message.chat.id, get_curse('R01235'))
    elif message.text == 'Тенге':
        bot.send_message(message.chat.id, get_curse('R01335'))
    elif message.text == 'Евро':
        bot.send_message(message.chat.id, get_curse('R01239'))
    elif message.text == 'Китайский юань':
        bot.send_message(message.chat.id, get_curse('R01375'))
    if message.text == 'Викторина':
        bot.send_message(message.chat.id, 'Вопрос N1:\nСколько месяцев в году имеют 28 дней?')
    elif message.text.lower() == 'все' or message.text.lower() == '12' or message.text.lower() == '12 месяцев' or message.text.lower() == 'все месяцы':
        bot.send_message(message.from_user.id, 'Верно.')
        bot.send_message(message.from_user.id, 'Вопрос N2:\nСколько лет длилась 100-летняя война?')

    elif message.text.lower() == '116' or message.text.lower() == '116 лет' or message.text.lower() == 'сто шестнадцать':
        bot.send_message(message.from_user.id, 'Верно.')
        bot.send_message(message.from_user.id, 'Вопрос N3:\nЧто изучает уфология?')
    elif message.text.lower() == 'нло' or message.text.lower() == 'летающие тарелки' or message.text.lower() == 'инопланетян':
        bot.send_message(message.from_user.id, 'Верно.')
        bot.send_message(message.from_user.id, 'Это был последний вопрос.')

#тот самый else
    else:
        bot.send_message(message.from_user.id, 'неверно, вы можете попробовать ещё раз :)')
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Zckjy
Этот else привязан к строке
if message.text == 'Викторина'
и к последующим elif. Поэтому если ты введёшь текст "Во что поиграть?", то при проверке вариантов в if и elif после "Викторина", он не найдёт нужный текст и поэтому сработает else
Ответ написан
@FOUREX
Следует вам немного зучить библиотеку и АПИ телеграма. Потому что бот обрабатывает все сообщения что отправляет ему пользователь. В вашем случае сообщения пользователя не всегда совпадает с тем с чем вы его сравниваете.

Решениям для вас будет просто убрать конструкцию `else`.

Так же у вас не правильный подход для создания комманд. Те. не каждую комманду по функции, а не как у вас (одна функция на все комманды), но эт нужно смотреть документацию библиотеки, как в ней это реализуется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы