Как стать автором
Обновить

История одного соседа ч.2

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.2K

Это был типичный подмосковный ЖК, коих сотни. Именно в таком ЖК произошла история, описанная в этой статье. В конце написал что есть еще некоторые идеи и вот руки дошли и до одной из них.

Все мы знаем что домах 1.5 тыс. домов довольно важно иметь хоть какой-то справочник по квартирам для быстрой связи с собственниками или проживающими. Обычно это exel табличка в виде НОМЕР КВ. - НОМЕР. Но у нас есть бот всеобъемлющий все чаты ЖК, поэтому я решил пойти своим путем.

Для начала я подумал какие данные можно собрать, а какие наверное не стоит. Учитывая что имена и номера - это конфиденциальные данные человека, которые я не имею права хранить, формат хранения такой:

дом-секция-этаж-квартира-имя-id-авто

где:

Имя - ник или при его отсутствии имя в телеграмме. Благо python любезно может реализовывать такие логические выражения очень просто. Также нужно учесть что многие пользователи телеграмма не заполняют поле last_name и просто оставляют его пустым. в таком случае будет передаваться None. Учитывая все вышеперечисленные проблемы я рекомендую использовать вот такой формат:

call.message.reply_to_message.from_user.username or (str(call.message.reply_to_message.from_user.first_name) + " " + str(call.message.reply_to_message.from_user.last_name or ""))

Авто - номер автомобиля. Он должен быть на последнем месте потому что его может быть просто не быть. Почему это должно быть так я расскажу позже и постараюсь объяснить почему я реализовал это именно так. Но скорее всего получу гору осуждения по поводу. Проверку правильности ввода номера я делаю при помощи обычной регулярки, которую написал сам, т.к. на просторах интернета мне не очень зашли варианты:

"^[а-яА-ЯёЁ][0-9]{3}[а-яА-ЯёЁ]{2}[0-9]+$"

А теперь к решению вопроса о хранении всего этого добра. Я решил не использовать реляционные БД просто потому что она мне в целом не нужна + мне довольно сложно не имея соответствующего опыта разворачивать сервер БД без графического интерфейса. Поэтому я сделал просто txt файл и храню данные именно в таком формате как я указал выше. данные разделяю по порядку через "-". Работает быстро, записывает быстро. Но есть момент. приходится при изменении данных удалять предыдущую строку, двигать весь список вверх на -1 от текущей позиции курсора в файле и записывать снова всё что было ниже + строку, измененную пользователем.

def edit_user(self, call):
        for i in self.coincidences:
            self.lines.pop(i[1])
        with open("chess_neighbors.txt", "w") as file:
            for text_str in self.lines:
                file.write(text_str)
        self.add_user(call)

не сложно, но не красиво. Однако работает.

Формат взаимодействия пользователя с шахматкой такой:

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

Интерфейс поиска имеет несколько вариантов:

Поиск по этажу. если бы было указано например /найти 4 8  - мы бы получили всю секцию. Формат вывода неверный, прошу прощения.
Поиск по этажу. если бы было указано например /найти 4 8 - мы бы получили всю секцию. Формат вывода неверный, прошу прощения.
Поиск по контакту. Просто отвечаем командой поиск на сообщение нужного человека. В таком режиме поиска можно удалить найденную квартиру, если человека неверно отметили в шахматке
Поиск по контакту. Просто отвечаем командой поиск на сообщение нужного человека. В таком режиме поиска можно удалить найденную квартиру, если человека неверно отметили в шахматке

а также по номеру авто соответственно /найти м000мм000 например.

К сожалению люди неохотно отмечаются в своих квартирах. Но админы потихоньку заполняют данные. И более неохотнее отмечают номер своих авто. Возможно в будущем мы соберем достаточно данных чтоб закрыть чаты домов для неотмеченных пользователей... но это уже совсем другая история.

Теги:
Хабы:
+2
Комментарии13

Публикации

Истории

Работа

Python разработчик
142 вакансии
Data Scientist
63 вакансии

Ближайшие события