Skip to content

MyHoldFast/icq_client

Repository files navigation

ICQ Client

Десктопный ICQ-клиент с открытым исходным кодом, реализующий протокол OSCAR/FLAP поверх TCP. Написан на Python с графическим интерфейсом на Tkinter.


Возможности

  • Авторизация и подключение — вход по UIN/паролю на серверы ICQ через OSCAR (FLAP/SNAC). Автоматическое переподключение при обрыве связи.
  • Мульти-аккаунт — хранение нескольких аккаунтов в ~/.icq_accounts.json с выбором из списка при входе.
  • Контакт-лист — отображение групп и контактов с цветовой индикацией статуса (Online / Away / DND / NA / Free / Offline).
  • Чат — отправка и получение сообщений (до 2000 символов), поддержка кодировок UTF-8 и CP1251, история переписки.
  • Смайлики — встроенный набор GIF-смайликов с автозаменой текстовых кодов.
  • Индикатор набора текста — отображение «собеседник печатает…» в реальном времени.
  • X-статусы — расширенные статусы (шопинг, вечеринка, кофе и др.) с иконкой и описанием.
  • Авторизационные запросы — отправка, получение и обработка запросов на добавление в список контактов.
  • Профиль пользователя — просмотр и редактирование своих данных (имя, email, дата рождения, страна, требование авторизации).
  • Поиск пользователей — поиск по UIN или нику через SNAC family 0x15.
  • Регистрация нового UIN — встроенный диалог регистрации через SNAC 0x17/0x04.
  • Офлайн-сообщения — автоматическое получение сообщений, полученных в отсутствие.
  • Звуковые уведомления — WAV-звуки для входящего сообщения, запроса авторизации и других событий.
  • Всплывающие уведомления — нативные popup-уведомления о новых сообщениях.
  • Системный трей — сворачивание в трей с иконкой и контекстным меню.

Структура проекта

icq_client/
├── icq_client.py      # Точка входа, инициализация и запуск MainWindow
├── icq_core.py        # Ядро протокола OSCAR: FLAP/SNAC, парсинг TLV, ICQClient
├── main_window.py     # Главное окно: контакт-лист, трей, цикл событий asyncio
├── chat_window.py     # Окно чата с историей сообщений
├── chat_pane.py       # Виджет панели сообщений (рендеринг, смайлики)
├── dialogs.py         # Все диалоги: вход, профиль, статус, поиск, авторизация
├── reg.py             # Регистрация нового UIN (SNAC 0x17)
├── notifications.py   # Всплывающие desktop-уведомления
├── config.py          # Чтение/запись конфига и списка аккаунтов
├── theme.py           # Цветовая палитра и маппинги статусов
├── resources.py       # Загрузка иконок, звуков, спрайтов статусов
├── smileys.py         # Таблица смайликов и логика замены
├── icons/             # Иконки приложения (app.ico, app.png, спрайты)
├── smiles/            # GIF-анимации смайликов
├── sounds/            # WAV-звуки событий
└── dist/
    └── ICQ Client.exe # Готовый исполняемый файл (Windows)

Требования

  • Python 3.8+
  • Библиотеки:
    pip install pillow pystray
    
  • Tkinter (входит в стандартную поставку Python для Windows; на Linux: sudo apt install python3-tk)

Запуск

python icq_client.py

Или используйте готовый бинарник для Windows из папки dist/.


Сборка (Windows)

py -3.8 -m PyInstaller --onefile --name "ICQ Client" --windowed \
  --add-data "icq_core.py;." \
  --add-data "chat_pane.py;." \
  --add-data "chat_window.py;." \
  --add-data "config.py;." \
  --add-data "dialogs.py;." \
  --add-data "icq_client.py;." \
  --add-data "main_window.py;." \
  --add-data "notifications.py;." \
  --add-data "reg.py;." \
  --add-data "resources.py;." \
  --add-data "smileys.py;." \
  --add-data "theme.py;." \
  --add-data "smiles;smiles" \
  --add-data "sounds;sounds" \
  --add-data "icons;icons" \
  --hidden-import=pystray \
  --hidden-import=PIL \
  --hidden-import=asyncio \
  icq_client.py

Конфигурация

  • ~/.icq_client.cfg — настройки приложения (JSON)
  • ~/.icq_accounts.json — список сохранённых аккаунтов

Файлы создаются автоматически при первом входе.


Протокол

Клиент реализует протокол OSCAR (Open System for Communication in Realtime):

  • Транспорт: FLAP (Flap Layer) поверх TCP, порт 5190
  • Основные SNAC-семейства: 0x01 (Generic), 0x02 (Location), 0x03 (Buddy), 0x04 (ICBM/Messages), 0x09 (Privacy), 0x13 (SSI/Roster), 0x15 (ICQ Extensions), 0x17 (Registration)
  • Capabilities: UTF-8, RTF, Server Relay, Typing Notification, Xtraz

Сервер по умолчанию: 195.66.114.37:5190


Лицензия

Проект предоставляется «как есть», без каких-либо гарантий. ICQ является товарным знаком соответствующих правообладателей.

About

Python client for the classic ICQ protocol (OSCAR)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages