1

Свой мессенджер на python: аккаунты, сообщения, файлы

Привет! Хочу поделиться своим проектом, который решил возродить пару недель назад — мессенджер на Python. Не сомневаюсь, что такие штуки уже есть на просторах интернета и могут быть лучше того, что делаю я, но меня это не интересует. Мне нравится делать что-то самому, разбираться и по возможности «не зависеть» от чего-то.

Что это вообще такое

Это чат с клиентской и серверной частью, который работает через сокеты. На данный момент всё происходит в консоли, но в планах GUI на PyQt5. Сервер поднимается локально, клиенты подключаются к нему и начинают взаимодействовать с помощью различных команд. Клиент должен иметь аккаунт на сервере для ряда функций, поэтому первым делом он регистрируется либо входит в аккаунт. Показываю команды пользователя ниже.

Команды пользователя

🔐 Авторизация и регистрация

/reg <юзернейм> <пароль> <пароль> — зарегистрироваться на сервере

/auth <юзернейм> <пароль> — аутентифицироваться на сервере

👤 Профиль и общение

/set_nick <никнейм> — установить отображаемый никнейм

/msg <никнейм> <сообщение> — отправить личное сообщение

/offline_sms — получить сообщения, пришедшие в ваше отсутствие

/get_users — посмотреть список пользователей

📂 Файлы

/all_files [количество] — показать последние файлы (все, если число не указано)

/send_file <никнейм> <имя_файла> [текст] — отправить файл из папки data/files

/load_file <имя_файла> — скачать файл, присланный вам

🛠️ Системные

/help — показать эту справку

/exit — выход из программы

Сервер

На сервере я сделал CLI-команды для админа:

/users_dict — посмотреть словарь с пользователями

/close_server — безопасное закрытие сервера

/help — эта справка

Что было сложного

Если честно, всё было в меру сложно. Конечно, чем больше папок и файлов, тем больше нужно помнить в голове и сложнее организовывать что-либо. Но всё же трудненько было сделать систему для обмена файлами, потому что пришлось параллельно думать об очереди сообщений, и в моменте я вообще ничё не понимал. Я ожидал, что придётся дебажить, но на удивление пришлось этим заниматься не очень-то и долго — всего день.

Про технологии и логику

Хочу также затронуть некоторые технологии, которые я применял. Одна из них — хэширование (hashlib + secrets). Я применял его для регистрации и аутентификации пользователей, чтобы по сети не гуляли пароли. Однако всё равно можно перехватить запрос на авторизацию:

request = self.encode({

'type': 'auth',

'username': parts[0],

'hash': hash_b64

})

И по сути войти в чужой аккаунт, скопировав этот запрос и отправив на сервер от себя. Типа да, пароль никто не узнает, но хэш-то стырить можно. В общем, не всё идеально.

Ещё я использую потоки (threading) для параллельных задач. Например, приём и отправка запросов идут в разных потоках на клиенте. А на сервере вообще под каждого клиента свой поток запускается.

Также недавно узнал про классную штуку в Python — декораторы. Очень хорошо очищают код и местами упрощают логику. Ещё датаклассы — аналогично упрощают жизнь, особенно при перекрёстных передачах параметров в экземпляры классов, коих у меня немало.

Планы на будущее

Как уже говорил, буду делать GUI, ещё хочу уведомления о сообщениях, локальную историю переписок и шифрование. Шифрование буду делать симметричное — самый незапарный вариант, для чата с друзьями за глаза.

Кстати, я не просто так это всё делаю: хочу в будущем купить Raspberry Pi и поднять свой сервер для этого мессенджера. Ну и по мелочи: группы (может и не добавлю, так как на 10 человек незачем), мобильная версия, если прям будет желание, ну и оптимизация, безопасность и так далее.

GitHub и Telegram

Кто хочет посмотреть — велкам, можно даже пулл-реквесты делать)

GitHub: https://github.com/FRIMIDOVO/Perepiska2.0-Releases.git

И подписывайтесь на мой Telegram-канал, где рассказываю и про другие проекты. Находится в профиле.

2
Автор поста оценил этот комментарий

Здрасьте.

Я собираю коллекцию, у нас тут эпидемия по написанию мессенджеров.


Как написать собственный мессенджер и сохранить рассудок


Продолжаем пет проект корп мессенджера


Пишу приложение для людей: система синхронизации данных


Выложил мессенджер "Как дела?"


Мессенджер не приоритет Сервис


Как я свой локальный мессенджер в Python писал


Начинаем начинять. Сервис ХХХХ


Как я в одиночку пишу мессенджер AegisTalk: техническая боль, Double Ratchet


Я написал мессенджер, который не забанят


SendCore - новый мессенджер для общения и ведения своих каналов


Как запустить свой семейный мессенджер


Это не совсем мессенджер, но можно использовать и так


Почему я не хочу пользоваться Max и как я сделал приватную альтернативу


Messendzher: опенсорс-мессенджер с групповыми видеозвонками, историями и каналами на Next.js + NestJS + WebRTC


Архитектурный разрыв с индустрией: как устроен P2P -мессенджер DimBell без серверного хранения данных


Свой мессенджер на python: аккаунты, сообщения, файлы

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ааххаха нифига себе!) Ну, что ж, время такое...

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества