Позволяет быстро заменять tdata, сразу открывать телеграмм Инструкция: Создайте папку в корне диска C:\TelegramAccounts Закиньте туда tdata для работы, в формате аккаунт1\tdata Скопируйте свою текстующую tdata в любое место для того чтобы не потерять import os import shutil import subprocess import sys import psutil import time from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel, QMessageBox, QListWidget, QListWidgetItem) from PyQt5.QtCore import Qt TELEGRAM_PATH = os.path.expanduser(r"~\AppData\Roaming\Telegram Desktop\Telegram.exe") TDATA_WORKING_DIR = os.path.expanduser(r"~\AppData\Roaming\Telegram Desktop") TDATA_STORAGE_CLEAR = os.path.expanduser(r"~\AppData\Roaming\Telegram Desktop\tdata") TDATA_STORAGE = r"C:\TelegramAccounts" class TelegramSwitcher(QMainWindow): def __init__(self): super().__init__() self.init_ui() self.load_accounts() def init_ui(self): self.setWindowTitle("TdataSw") self.setGeometry(100, 100, 400, 300) central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout(central_widget) layout.addWidget(QLabel("Выберите аккаунт:", self)) self.account_list = QListWidget(self) self.account_list.itemClicked.connect(self.switch_account) layout.addWidget(self.account_list) refresh_btn = QPushButton("0бновить", self) refresh_btn.clicked.connect(self.load_accounts) layout.addWidget(refresh_btn) exit_btn = QPushButton("Выйти", self) exit_btn.clicked.connect(self.close) layout.addWidget(exit_btn) def load_accounts(self): self.account_list.clear() if not os.path.exists(TDATA_STORAGE): QMessageBox.critical(self, "Ошибка", f"Директория {TDATA_STORAGE} не найдена!") return accounts = [d for d in os.listdir(TDATA_STORAGE) if os.path.isdir(os.path.join(TDATA_STORAGE, d))] if not accounts: QMessageBox.warning(self, "Предупреждение", "Нет доступных аккаунтов в директории!") return for account in accounts: item = QListWidgetItem(account) item.setTextAlignment(Qt.AlignCenter) self.account_list.addItem(item) def close_telegram(self): for proc in psutil.process_iter(['name']): if proc.info['name'] == "Telegram.exe": proc.kill() def switch_account(self, item): account_name = item.text() source_path = os.path.join(rf"C:\TelegramAccounts\{account_name}\tdata") try: self.close_telegram() time.sleep(1) account_name = item.text() source_path = os.path.join(rf"C:\TelegramAccounts\{account_name}\tdata") if os.path.exists(TDATA_STORAGE_CLEAR): shutil.rmtree(TDATA_STORAGE_CLEAR) shutil.copytree(source_path, TDATA_STORAGE_CLEAR) subprocess.Popen(TELEGRAM_PATH, shell=True) except Exception as e: QMessageBox.critical(self, "Ошибка", f"Не удалось переключить аккаунт:\n{str(e)}") def closeEvent(self, event): reply = QMessageBox.question(self, "Выход", "Также закрыть телеграм?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: self.close_telegram() event.accept() else: event.accept() def main(): if not os.path.exists(TELEGRAM_PATH): print(f"Ошибка: Telegram не найден по пути {TELEGRAM_PATH}") return if not os.path.exists(TDATA_STORAGE): os.makedirs(TDATA_STORAGE) print(f"Создана директория для аккаунтов: {TDATA_STORAGE}") app = QApplication(sys.argv) window = TelegramSwitcher() window.show() sys.exit(app.exec_()) if __name__ == "__main__": main() Python import os import shutil import subprocess import sys import psutil import time from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel, QMessageBox, QListWidget, QListWidgetItem) from PyQt5.QtCore import Qt TELEGRAM_PATH = os.path.expanduser(r"~\AppData\Roaming\Telegram Desktop\Telegram.exe") TDATA_WORKING_DIR = os.path.expanduser(r"~\AppData\Roaming\Telegram Desktop") TDATA_STORAGE_CLEAR = os.path.expanduser(r"~\AppData\Roaming\Telegram Desktop\tdata") TDATA_STORAGE = r"C:\TelegramAccounts" class TelegramSwitcher(QMainWindow): def __init__(self): super().__init__() self.init_ui() self.load_accounts() def init_ui(self): self.setWindowTitle("TdataSw") self.setGeometry(100, 100, 400, 300) central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout(central_widget) layout.addWidget(QLabel("Выберите аккаунт:", self)) self.account_list = QListWidget(self) self.account_list.itemClicked.connect(self.switch_account) layout.addWidget(self.account_list) refresh_btn = QPushButton("0бновить", self) refresh_btn.clicked.connect(self.load_accounts) layout.addWidget(refresh_btn) exit_btn = QPushButton("Выйти", self) exit_btn.clicked.connect(self.close) layout.addWidget(exit_btn) def load_accounts(self): self.account_list.clear() if not os.path.exists(TDATA_STORAGE): QMessageBox.critical(self, "Ошибка", f"Директория {TDATA_STORAGE} не найдена!") return accounts = [d for d in os.listdir(TDATA_STORAGE) if os.path.isdir(os.path.join(TDATA_STORAGE, d))] if not accounts: QMessageBox.warning(self, "Предупреждение", "Нет доступных аккаунтов в директории!") return for account in accounts: item = QListWidgetItem(account) item.setTextAlignment(Qt.AlignCenter) self.account_list.addItem(item) def close_telegram(self): for proc in psutil.process_iter(['name']): if proc.info['name'] == "Telegram.exe": proc.kill() def switch_account(self, item): account_name = item.text() source_path = os.path.join(rf"C:\TelegramAccounts\{account_name}\tdata") try: self.close_telegram() time.sleep(1) account_name = item.text() source_path = os.path.join(rf"C:\TelegramAccounts\{account_name}\tdata") if os.path.exists(TDATA_STORAGE_CLEAR): shutil.rmtree(TDATA_STORAGE_CLEAR) shutil.copytree(source_path, TDATA_STORAGE_CLEAR) subprocess.Popen(TELEGRAM_PATH, shell=True) except Exception as e: QMessageBox.critical(self, "Ошибка", f"Не удалось переключить аккаунт:\n{str(e)}") def closeEvent(self, event): reply = QMessageBox.question(self, "Выход", "Также закрыть телеграм?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: self.close_telegram() event.accept() else: event.accept() def main(): if not os.path.exists(TELEGRAM_PATH): print(f"Ошибка: Telegram не найден по пути {TELEGRAM_PATH}") return if not os.path.exists(TDATA_STORAGE): os.makedirs(TDATA_STORAGE) print(f"Создана директория для аккаунтов: {TDATA_STORAGE}") app = QApplication(sys.argv) window = TelegramSwitcher() window.show() sys.exit(app.exec_()) if __name__ == "__main__": main()