Как в телеграм боте различать сообщения от разных людей?

Рейтинг: 0Ответов: 1Опубликовано: 21.01.2023

не могу разобраться... пишу бота который отправляет пользователям фото, и потом принимает от пользователей ответ что на этом фото. Проблема в том, что если ботом пользуется несколько человек, то фото отправляется правильно по id, но ответ пользователя бот принимает "кто первый напишет", его ответ и проверяется у всех.

photo = open('eng/nature/solar/' + random.choice(os.listdir('eng/nature/solar/')), 'rb')
ph = os.path.basename(photo.name)
index = ph.index('.')
Photo = ph[:index]
bot.send_photo(callback.from_user.id, photo)  # отправляем фото


@bot.message_handler(content_types=['text'])
def answer(message):
    if message.text.casefold() == Photo:
        kl = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
        kn = types.KeyboardButton(text='Следующее слово')
        kn2 = types.KeyboardButton(text='🎵 Произнести')
        kl.add(kn2, kn)
        bot.send_message(message.chat.id, 'Верно', reply_markup=kl)

Получается что Photo отправилось в правильный callback.from_user.id, но if message.text.casefold() == Photo: не проверяет чье сообщение, и если 2 человека пользуются (и больше), бот берет сообщение кто первый напишет. Как сюда можно вставить проверку? Не нашел решения на этот вопрос

Ответы

▲ 0

Я просто не знаю какой до этого у вас код и что происходит, но должно работать. А вообще судя по тому что делает ваш бот, вам скорее всего нужно использовать состояния

def get_kb() -> ReplyKeyboardMarkup:
    kb = ReplyKeyboardMarkup(resize_keyboard=True, )
    kn = types.KeyboardButton(text='Следующее слово')
    kn2 = types.KeyboardButton(text='🎵 Произнести')
    kb.add(kn2, kn)
    return kb

@dp.message_handler()
async def answer(message: types.Message) -> None:
     if message.text.casefold() == Photo:
          await message.answer('Верно', reply_markup=get_kb())