FRIMID

FRIMID

Рассказываю про развитие своего проекта! Мой Telegram-канал: t.me/chumarno
На Пикабу
в топе авторов на 482 месте
100 рейтинг 1 подписчик 1 подписка 4 поста 0 в горячем
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-канал, где рассказываю и про другие проекты. Находится в профиле.

Показать полностью
5

Новая плата, прошивка, настройки!

Изменения в плате

За прошедшее время я переделал трассировку платы под новую конфигурацию с той крестовиной и потенциометром.

Новая трассировка

Новая трассировка

Останется получить нужные новые компоненты и сделать плату, а затем и 3D-модель корпуса. Кстати, пришлось жертвовать светодиодом, остался 1. Зато теперь добавилось 4 кнопки и энкодер.

Начал переписывать код на ардуинке

Решил также переписать код: появилась идея добавить MIDI-команды как отдельный профиль для использования контроллера в программах, которые такие команды поддерживают.

Сдвижки в настройках

Добавил ещё окна настроек, но осталось ещё много... Сейчас не очень удобно делать настройки биндов, так как не имею на руках сейчас ту модель, которую я буду настраивать, и дебажить не получится.

Новые окна настроек

Новые окна настроек

Идеи

Думаю добавить автообновления до релизной версии, но пока нет хоть какой-то контрольной точки в коде для релиза, сделаю чуть позже.

🎛️Следите за проектом в Telegram (ссылка в профиле).

Пишите свои мнения и идеи!

Показать полностью 2

Новый профиль: OBS

Разговор с тестером

В общем, я недавно созвонился с моим тестером!
Послушал, что да как, какие были проблемы и пожелания...

И он сказал, что было бы круто добавить управление OBS (популярная программа для записи и стримов).

Я ответил — не проблема. Так и оказалось: у OBS, как у любой уважающей себя программы, есть свой API. Накидал класс под неё, и по сути получился новый "профиль" управления. Косяки, думаю, есть, но доработать — не вопрос.

Идеи для улучшений

Плюс: потихоньку появляется приложение для настроек. Пока не до конца — многое надо продумать.

Окна настроек

Окна настроек

А ещё: пришёл к выводу, что физический интерфейс контроллера надо расширять. Добавлю туда крестовину как в джойстике. Это очень удобно и компактно: целых 5 кнопок в нескольких квадратных сантиметрах. Можно будет одну из кнопок заменить на эту деталь.

Следите за обновлениями здесь и в моём тг-канале: t.me/chumarno

Крестовина

Крестовина

Показать полностью 2
0

Первый пост про мой проект. Введение

Я разрабатываю собственный контроллер — устройство, которое упрощает управление звуком на ПК: системной громкостью, отдельными приложениями и специализированными программами вроде OBS.

Проект полностью самостоятельный: я сам проектирую плату, моделирую корпус, пишу софт(python) и прошивку(C++ arduino) — то есть полностью "варюсь" в этом процессе.

Контроллер в собранном состоянии. Версия на данный момент.

Контроллер в собранном состоянии. Версия на данный момент.

А главное — я открыт к вашему мнению. Если будут идеи, как улучшить или дополнить функционал, буду рад услышать и постараюсь внедрить.

Где следить за развитием проекта?

Какие идеи у вас есть?
Пишите в комментариях — я всё прочитаю! 👇

Разнесённое изображение 3д модели.

Разнесённое изображение 3д модели.

Показать полностью 2
Отличная работа, все прочитано!

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества