feat(ui): массовые операции, вкладки и улучшение UX

This commit is contained in:
Alex
2025-06-28 02:03:50 +03:00
committed by benya
parent 7e2ac63523
commit 6225fb15d4
6 changed files with 585 additions and 469 deletions

4
.gitignore vendored
View File

@@ -1,3 +1,3 @@
/.venv/
/.venv1/
/.venv3/
/setup.py
/build_cx/

18
LICENSE Normal file
View File

@@ -0,0 +1,18 @@
MIT License
Copyright (c) 2025 Aleksandr Denisov
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
USE OR OTHER DEALINGS IN THE SOFTWARE.

94
README.md Normal file
View File

@@ -0,0 +1,94 @@
# Anabasis VK Chat Manager
## Описание проекта
**Anabasis VK Chat Manager** — это десктопное приложение на Python с графическим интерфейсом, разработанное для упрощения управления пользователями в чатах ВКонтакте. Оно позволяет авторизоваться через VK OAuth, просматривать список своих чатов, а также исключать или приглашать пользователей в выбранные чаты.
Приложение спроектировано для минимизации ручных операций и повышения удобства управления групповыми беседами VK.
## Возможности
* **Авторизация через VK OAuth:** Безопасный процесс входа через официальный VK API.
* **Сохранение сессии:** Поддержка сохранения куки-файлов браузера для длительной авторизации в `QWebEngineView`.
* **Управление токенами:** Автоматическое сохранение и загрузка VK Access Token для удобства использования.
* **Список чатов:** Загрузка и отображение списка доступных чатов пользователя.
* **Выбор чатов:** Возможность выбора одного или нескольких чатов для выполнения операций.
* **Автоматическое определение ID пользователя:** Получение ID пользователя VK из различных форматов ссылок (например, `vk.com/id123`, `vk.com/durov`).
* **Исключение пользователей:** Удаление пользователя из выбранных чатов.
* **Приглашение пользователей:** Добавление пользователя в выбранные чаты.
* **Визуальный таймер токена:** Отображение оставшегося времени действия Access Token.
* **Информативные сообщения:** Детальные статусы операций и сообщения об ошибках.
* **Обработка ошибок:** Улучшенная обработка ошибок VK API, включая смену IP-адреса.
## Установка
### Готовый билд
Скачайте последнюю доступную версию из релизов и распакуйте архив
### Ручная установка
Для запуска приложения вам потребуется Python 3 и библиотеки `PySide6` и `vk_api`.
1. **Клонируйте репозиторий**
2. **Создайте и активируйте виртуальное окружение (рекомендуется):**
```bash
python -m venv venv
# Для Windows:
.\venv\Scripts\activate
# Для macOS/Linux:
source venv/bin/activate
```
3. **Установите зависимости:**
```bash
pip install PySide6 vk_api
```
## Использование
1. **Запустите приложение:**
* *Готовый билд:*
* Запустите **AnabasisHRChatManager.exe**
* *Ручная установка:*
* ```bash
python main.py
```
2. **Авторизация:**
* Нажмите кнопку "Авторизоваться через VK".
* В открывшемся окне браузера войдите в свой аккаунт ВКонтакте.
* Разрешите доступ приложению, если потребуется.
* После успешной авторизации окно закроется, и токен доступа будет сохранен.
3. **Выбор чатов:**
* После авторизации приложение автоматически загрузит список ваших чатов.
* Отметьте галочками те чаты, с которыми хотите работать. Используйте кнопки "Выбрать все" / "Снять выбор со всех" для удобства.
* Кнопка "Обновить чаты" позволяет перезагрузить список чатов.
4. **Управление пользователями:**
* В поле "Введите или вставьте ссылку на страницу VK" вставьте ссылку на страницу пользователя ВКонтакте (например, `vk.com/id123` или `vk.com/durov`). Приложение автоматически определит ID пользователя.
* Нажмите кнопку "ИСКЛЮЧИТЬ ПОЛЬЗОВАТЕЛЯ" для удаления пользователя из выбранных чатов.
* Нажмите кнопку "ПРИГЛАСИТЬ ПОЛЬЗОВАТЕЛЯ" для добавления пользователя в выбранные чаты.
* Опция "Показать 250 последних сообщений при добавлении" позволяет управлять видимостью истории сообщений для нового участника (Примечание: VK API может игнорировать этот параметр для `messages.addChatUser`).
## Структура данных и конфигурация
Приложение хранит данные в директории, специфичной для данных приложения, что соответствует рекомендациям операционных систем.
* **`token.json`**: Файл для сохранения VK Access Token. Находится в `[AppDataLocation]/AnabasisVKChatManager/token.json`.
* **`web_engine_cache/`**: Директория для хранения куки-файлов и кэша `QWebEngineProfile`, обеспечивающая сохранение сессии внутри встроенного браузера. Находится в `[AppDataLocation]/AnabasisVKChatManager/web_engine_cache/`.
`[AppDataLocation]` соответствует:
* Windows: `%APPDATA%` (например, `C:\Users\YourUser\AppData\Roaming`)
* macOS: `~/Library/Application Support`
* Linux: `~/.local/share`
## Известные проблемы / Ограничения
* Параметр `visible_messages_count` для `messages.addChatUser` может быть проигнорирован VK API согласно официальной документации. Приложение уведомит вас об этом при попытке использования.
* При смене IP-адреса, токен авторизации VK может стать недействительным, потребуется повторная авторизация. Приложение автоматически предложит её.
## Лицензия
Этот проект распространяется под лицензией MIT.

BIN
icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

862
main.py

File diff suppressed because it is too large Load Diff

76
setup.py Normal file
View File

@@ -0,0 +1,76 @@
# setup.py
import sys
import os
from cx_Freeze import setup, Executable
# Определите имя вашего основного скрипта
main_script = "main.py" # Замените на имя вашего основного Python-файла
# Определите имя исполняемого файла
exe_name = "AnabasisHRChatManager" # Имя вашего .exe файла
# Определите базовый тип приложения:
# - None: Для консольных приложений (консоль будет открываться)
# - "Win32GUI": Для графических приложений на Windows (консоль не будет открываться)
# - "MacOSX": Для графических приложений на macOS
base = None
if sys.platform == "win32":
base = "Win32GUI" # Для оконных приложений на Windows без консоли
elif sys.platform == "darwin": # Для macOS
base = "MacOSX"
# Определите опции сборки.
# Это словарь, который настраивает, какие пакеты включать/исключать,
# какие файлы добавлять и другие параметры.
build_exe_options = {
# 'packages' - список пакетов, которые cx_Freeze должен гарантированно включить.
# Это полезно для пакетов, которые динамически импортируются или не обнаруживаются автоматически.
"packages": ["os", "sys", "requests", "json", "webbrowser"], # Пример: добавьте сюда любые используемые библиотеки
# 'excludes' - список пакетов, которые cx_Freeze должен исключить.
# Это помогает уменьшить размер сборки, исключая ненужные модули.
"excludes": ["tkinter", "unittest", "PyQt5.QtWebEngineWidgets"], # Пример: исключаем tkinter, если не используется
# 'include_files' - список дополнительных файлов или папок, которые нужно включить в сборку.
# Это могут быть изображения, конфигурационные файлы, FXML-файлы (для JavaFX, не Python) и т.д.
# Формат: [('источник', 'назначение_в_сборке')] или просто ['путь/к/файлу_или_папке']
# Например, если у вас есть папка 'resources' с иконками или другими данными:
# "include_files": ["resources/", "config.ini"],
# Если иконка находится в корне:
"include_files": [], # Добавьте сюда любые ресурсы
# 'include_msvcr' - для Windows, включает C++ Runtime Library (CRT)
# Часто необходимо для работы некоторых нативных модулей Python.
"include_msvcr": True,
# 'optimize' - уровень оптимизации (0, 1, 2). 2 - максимальная оптимизация, но может быть медленнее.
# "optimize": 0,
# 'zip_include_packages' - упаковывать ли пакеты в zip-файл внутри исполняемого файла.
# Уменьшает количество файлов, но может увеличить время запуска.
# По умолчанию cx_Freeze упаковывает большинство пакетов.
# "zip_include_packages": ["*"],
# 'build_exe' - папка для выходных файлов
"build_exe": "build_cx",
}
# Определите исполняемые файлы
executables = [
Executable(
script=main_script,
base=base,
target_name=f"{exe_name}.exe", # Имя конечного .exe файла
icon="icon.ico" # Путь к файлу иконки .ico
# Для создания ярлыков в меню "Пуск" можно использовать shortcut_name и shortcut_dir здесь.
# Например:
# shortcut_name=exe_name,
# shortcut_dir="StartMenuFolder" # Создаст ярлык в меню "Пуск" в корневой папке приложения
)
]
# Настройте метаданные вашего приложения
setup(
name=exe_name,
version="0.1",
description="Управление чатами для HR-менеджеров",
options={
"build_exe": build_exe_options
},
executables=executables
)