Как в телеграм боте различать сообщения от разных людей?
не могу разобраться... пишу бота который отправляет пользователям фото, и потом принимает от пользователей ответ что на этом фото. Проблема в том, что если ботом пользуется несколько человек, то фото отправляется правильно по 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 человека пользуются (и больше), бот берет сообщение кто первый напишет. Как сюда можно вставить проверку? Не нашел решения на этот вопрос
Ответы (1 шт):
Я просто не знаю какой до этого у вас код и что происходит, но должно работать. А вообще судя по тому что делает ваш бот, вам скорее всего нужно использовать состояния
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())