TransWikia.com

Бот выдаёт неверный ответ

Stack Overflow на русском Asked on February 15, 2021

Когда пишешь Новости, думает, что такой команды нет. Получается она выполняется и сразу же пишет:

"Я не знаю что ответить ?"

Код:

import telebot
import random

from telebot import types

bot = telebot.TeleBot("не скажу")

@bot.message_handler(commands=['start'])
def welcome(message):

    # keyboard
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton("? Игры")
    item2 = types.KeyboardButton("? Новости")
    markup.add(item1, item2)

    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.text == '? Новости':
        bot.send_message(message.chat.id, "Новостей пока нет.")
    if message.text == '? Игры':

        # keyboard
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        item1 = types.KeyboardButton( "? Кубик")
        markup.add(item1)

        bot.send_message(message.chat.id, "Мои игры:".format(message.from_user, bot.get_me()), parse_mode='html', reply_markup= markup)
    elif message.text == '? Кубик':
        key = telebot.types.InlineKeyboardMarkup()
        for el in [1,2,3,4,5,6]:
            but = telebot.types.InlineKeyboardButton(text=el, callback_data=f'Число {el}')
            key.add(but)
        bot.send_message(message.chat.id,  "Выберите число", reply_markup=key,parse_mode="Markdown")
    else:
        bot.send_message(message.chat.id, 'Я не знаю что ответить ?')


@bot.callback_query_handler(func=lambda call:True)
def inlin(call):
    #print(call.data)
    if call.data.split()[0] == 'Число':
        bot.send_message(call.message.chat.id, "Кидаем кубик..." )
        my_random = random.randint(1,6)
        if my_random != int(call.data.split()[1]):
            bot.send_message(call.message.chat.id, "Вы проиграли, выпало число " + str(my_random) + " чтобы вернуться назад напишите /start" )
        else:
            bot.send_message(call.message.chat.id, "Вы выиграли! чтобы вернуться назад напишите /start")
        bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id)


# RUN
bot.polling(none_stop=True)

One Answer

У вас идёт два if подряд: if message.text == '? Новости': и if message.text == '? Игры':.

Соответственно, при сообщении Новости у вас срабатывает первое условие, и вслед за ним срабатывает else второго, потому что бот не находит сообщение Игры.

Чтобы такого не было, нужно:

elif message.text == '? Игры':

Correct answer by Vladislav Tikhomirov on February 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP