Десктопный 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/.
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 является товарным знаком соответствующих правообладателей.