Чат-бот Telegram: не ищет значение в файле

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

Есть код для обработки нажатия на кнопку, при котором срабатывает открытие файла, поиск id юзера и его запись, если его id нет в файле.

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

Вопрос: помогите понять, почему Python не хочет искать id?

elif message.text == "📝Заявка":
        
        with open('usersID.txt','a+') as f:
            
            if str(message.chat.id) in f.read():
                await bot.send_message(message.chat.id, "Вы уже оставляли заявку. Ожидайте!")
                f.close()

            else:
                f.write(str(message.chat.id)+"\n")
                await bot.send_message(message.from_user.id, 
                    f'*Ваша заявка принята!*\n\n'
                    f'Менеджер свяжется с Вами в течении *30 минут.*\n\n', reply_markup=nav.mainMenu)
                await bot.send_message(leed_chat_id,
                    f'Заявка от @{message.from_user.username}')

Ответы

▲ 0Принят

У меня нет 100% уверенности, т.к. я особо не работал с режимом открытия файла "a+". Но, насколько я понимаю, в этом режиме при открытий файла позиция выставляется в конец, и чтение будет осуществяться с этой позиции. А т.к. после конца файла уже ничего нет, то f.read() всегда будет возвращать пустую строку.

Можно попробовать перед чтением выставить позицию в начало файла вот так:

f.seek(0)

но тогда вообще не было смысла открывать его с конца.

Кажется, в вашем случае имеет смысл открывать его в режиме r+. Насколько я помню, f.read() всё равно после чтения установит позицию в конец файла, и туда и запишется новый айдишник.