feat: добавлена функция назначения администраторов чатов
- Добавлено верхнее меню "Инструменты". - Реализован метод set_user_admin с вызовом API messages.setMemberRole. - Добавлена конвертация локального chat_id в peer_id (2000000000+id) для корректной работы метода. - Добавлены диалоги подтверждения и отчет о результатах выполнения.
This commit is contained in:
82
main.py
82
main.py
@@ -8,7 +8,7 @@ from PySide6.QtWidgets import (QApplication, QMainWindow, QLabel, QLineEdit,
|
||||
QTextBrowser, QScrollArea, QCheckBox, QHBoxLayout,
|
||||
QSizePolicy, QDialog, QTextEdit, QTabWidget, QDialogButtonBox)
|
||||
from PySide6.QtCore import Qt, QUrl, QDateTime, Signal, QTimer
|
||||
from PySide6.QtGui import QIcon
|
||||
from PySide6.QtGui import QIcon, QAction
|
||||
from PySide6.QtWebEngineWidgets import QWebEngineView
|
||||
from PySide6.QtWebEngineCore import QWebEnginePage, QWebEngineProfile
|
||||
from urllib.parse import urlparse, parse_qs, unquote
|
||||
@@ -351,6 +351,8 @@ class VkChatManager(QMainWindow):
|
||||
|
||||
layout.addStretch(1)
|
||||
|
||||
self.create_menu()
|
||||
|
||||
self.set_ui_state(False)
|
||||
|
||||
def on_vk_url_input_changed(self, text):
|
||||
@@ -420,6 +422,19 @@ class VkChatManager(QMainWindow):
|
||||
self.status_label.setText(status_message)
|
||||
self.set_ui_state(self.token is not None)
|
||||
|
||||
def create_menu(self):
|
||||
"""Создает верхнее меню."""
|
||||
menu_bar = self.menuBar()
|
||||
|
||||
# Меню "Инструменты"
|
||||
tools_menu = menu_bar.addMenu("Инструменты")
|
||||
|
||||
# Действие "Назначить администратором"
|
||||
make_admin_action = QAction("Назначить администратором", self)
|
||||
make_admin_action.setStatusTip("Назначить выбранных пользователей администраторами в выбранных чатах")
|
||||
make_admin_action.triggered.connect(self.set_user_admin)
|
||||
tools_menu.addAction(make_admin_action)
|
||||
|
||||
def create_chat_tab(self):
|
||||
# This implementation correctly creates a scrollable area for chat lists.
|
||||
tab_content_widget = QWidget()
|
||||
@@ -705,6 +720,71 @@ class VkChatManager(QMainWindow):
|
||||
def add_user_to_chat(self):
|
||||
self._execute_user_action("add")
|
||||
|
||||
def set_user_admin(self):
|
||||
"""Назначает пользователя администратором чата."""
|
||||
# 1. Проверки на наличие выбранных пользователей и чатов
|
||||
if not self.user_ids_to_process:
|
||||
QMessageBox.warning(self, "Ошибка", "Нет ID пользователей для операции.")
|
||||
return
|
||||
|
||||
selected_chats = self._get_selected_chats()
|
||||
if not selected_chats:
|
||||
QMessageBox.warning(self, "Ошибка", "Выберите хотя бы один чат.")
|
||||
return
|
||||
|
||||
# 2. Подготовка данных для подтверждения
|
||||
user_infos = {uid: self.get_user_info_by_id(uid) for uid in self.user_ids_to_process}
|
||||
user_names_str = "\n".join([f"• {name}" for name in user_infos.values()])
|
||||
|
||||
msg = (
|
||||
f"Вы уверены, что хотите назначить АДМИНИСТРАТОРАМИ следующих пользователей:\n\n"
|
||||
f"{user_names_str}\n\n"
|
||||
f"в {len(selected_chats)} выбранных чатах?"
|
||||
)
|
||||
|
||||
# 3. Диалог подтверждения
|
||||
confirm_dialog = QMessageBox(self)
|
||||
confirm_dialog.setWindowTitle("Подтверждение прав")
|
||||
confirm_dialog.setText(msg)
|
||||
confirm_dialog.setIcon(QMessageBox.Question)
|
||||
yes_button = confirm_dialog.addButton("Да", QMessageBox.YesRole)
|
||||
no_button = confirm_dialog.addButton("Нет", QMessageBox.NoRole)
|
||||
confirm_dialog.setDefaultButton(no_button)
|
||||
|
||||
confirm_dialog.exec()
|
||||
|
||||
if confirm_dialog.clickedButton() != yes_button:
|
||||
return
|
||||
|
||||
# 4. Выполнение API запросов
|
||||
results = []
|
||||
for chat in selected_chats:
|
||||
# VK API требует peer_id. Для чатов это 2000000000 + local_id
|
||||
try:
|
||||
peer_id = 2000000000 + int(chat['id'])
|
||||
except ValueError:
|
||||
results.append(f"✗ Ошибка ID чата: {chat['id']}")
|
||||
continue
|
||||
|
||||
for user_id, user_info in user_infos.items():
|
||||
try:
|
||||
self.vk.messages.setMemberRole(
|
||||
peer_id=peer_id,
|
||||
member_id=user_id,
|
||||
role="admin"
|
||||
)
|
||||
results.append(f"✓ '{user_info}' назначен админом в '{chat['title']}'.")
|
||||
except VkApiError as e:
|
||||
results.append(f"✗ Ошибка для '{user_info}' в '{chat['title']}': {e}")
|
||||
|
||||
# 5. Вывод результата
|
||||
QMessageBox.information(self, "Результаты назначения", "\n".join(results))
|
||||
|
||||
# Очистка полей (по желанию, можно убрать эти две строки, если хотите оставить ввод)
|
||||
self.vk_url_input.clear()
|
||||
self.user_ids_to_process.clear()
|
||||
self.set_ui_state(self.token is not None)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
Reference in New Issue
Block a user