Задать вопрос
@tn-ko

Телеграм-бот. Как сохранить второе сообщение от пользователя?

Бот начинает игру в слова и первым отправляет сообщение, но получает в качестве ответа от пользователя название кнопки Play on words. Как можно достать второе сообщение от пользователя? И можно ли не отправлять сообщение при нажатии кнопки пользователем?

@bot.message_handler(commands=['start'])
def welcome(message):
    sti = open('path' , 'rb')
    bot.send_sticker(message.chat.id, sti)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton("Random number")
    item2 = types.KeyboardButton("How it's going?")
    item3= types.InlineKeyboardButton("Play on words", callback_data= "play")

    markup.add(item1, item2, item3)
    bot.send_message(message.chat.id, "Hi there,<i> {0.first_name}!</i>\n I'm <b>{1.first_name}</b>- bot that was created for test."
    .format(message.from_user, bot.get_me()), parse_mode = 'html', reply_markup=markup)


@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    mess = call.text
    my_file = (open('path'))
    text = my_file.read()
    my_file.close()
    words = []
    def get_word():
        for candidant in available_words:
            if mess.lower()[-1] == "ъ" or mess.lower()[-1] == "ь" or mess.lower()[-1] == "ы":
                
                if candidant[0] == mess[-2].lower():
                    available_words.remove(candidant)
                    print("Проверка, что предпоследняя буква от пользователя =  1 букве слова . сообщ пользователя " + mess +  ' ответ бота ' + candidant)
                    break
            elif candidant[0] == mess[-1].lower():
                available_words.remove(candidant)
                print(candidant)
                break
        else:##словарный запас иссяк
            print("GAME OVER")
            return

    for word in text.split():
        
        words.append(word)
        available_words = list (words)
        random.shuffle(available_words)
        anyword = available_words.pop()
        bot.send_message(call.message.chat.id, anyword)
        break
    
    if anyword[-1] == "ъ"  or anyword[-1] ==  "ь" or anyword[-1] == "ы":
        if anyword[-2] == mess.lower()[0]:
            print(anyword)
            available_words.remove(anyword)
            print("Успех")
            get_word()
        else:
            
            print("Неверно, слово должно начинаться с буквы " + anyword[-2])
            return
        
    elif mess.lower()[0] != anyword[-1]:
        print(mess)
        print("Неверно, слово должно начинаться с буквы " + anyword[-1]) 

    else:
        print(anyword)
        words.remove(anyword)
        print("Успех, удалено слово " + anyword)

        for candidant in available_words:
            if mess.lower()[-1] == "ъ" or mess.lower()[-1] == "ь" or mess.lower()[-1] == "ы":
                get_word()
                break
            elif candidant[0] == mess[-1].lower():
                print(candidant)
                available_words.remove(candidant)
                break      
        else:##словарный запас иссяк
            print("GAME OVER")
        return
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
У тебя должен быть отдельный обработчик входящих сообщений, а не часть обработчика нажатия на кнопку..
При этом бот должен помнить, ведёт ли данный пользователь игру в настоящий момент, или нет.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы