Помоги написать приложения, проанализируй код который скину ниже и напиши полноценное приложения 
from telethon.sync import TelegramClient, errors
from time import sleep
from telethon.errors.rpcerrorlist import MessageTooLongError, PeerIdInvalidError
import dbm
from colorama import init, Fore, Back, Style 


init(autoreset=True)



def dbm_base():
	file = dbm.open( 'api.dbm' ,'c')
	try:
		file['api_id']
	except:
		file['api_id'] = input('Введите api_id:')
		file['api_hash'] = input('Введите api_hash:')
	file.close()
	return dbm.open( 'api.dbm' ,'r')
file = dbm_base()
api_id = int(file['api_id'].decode())
api_hash = file['api_hash'].decode()
client = TelegramClient('client', api_id, api_hash)


def dialog_sort(dialog):
    return dialog.unread_count
    
    
def spammer(client):
    def create_groups_list(groups=[]):
        for dialog in client.iter_dialogs():
            if dialog.is_group:
                if dialog.unread_count >= 5:
                    groups.append(dialog) 
        return groups

    with client:
        try:
	        timer = int(input('@lazarus_tg - Введите время сна между циклами сообщений(в секундах): '))
        except:
        	print(Fore.RED + '@lazarus_tg - Вводите цифрами, время должно быть в секундах!')
        for m in client.iter_messages('me', 1):
            msg = m
        print(Fore.GREEN + '@lazarus_tg - Сообщение выбрано:\n', msg)
        while True:
            groups = create_groups_list()
            groups.sort(key=dialog_sort, reverse=True)
            for g in groups[:90]:
                try:
                    client.forward_messages(g, msg, 'me')
                    print(Fore.GREEN + g.name + ' сообщение отправлено! - @lazarus_tg')
                    
                except errors.ForbiddenError as o:
                    client.delete_dialog(g)
                    if g.entity.username != None:
                        print(Fore.RED + f'Error: {o.message} Аккаунт покинул @{g.entity.username}')
                    else:
                        print(Fore.RED + f'Error: {o.message} Аккаунт покинул {g.name}')
                except errors.FloodError as e:
                	print(Fore.RED + f'Error: {e.message} Ожидание {e.seconds} секунд')
                	sleep(e.seconds)
                except PeerIdInvalidError:
                    client.delete_dialog(g)
                except MessageTooLongError:
                    print(Fore.RED + f'Message was too long ==> {g.name}')                                     
                except errors.BadRequestError as i:
                	print(Fore.RED + f'Error: {i.message}')
                except errors.RPCError as a:
                	print(Fore.RED + f'Error: {a.message}')
            print(Fore.GREEN + 'Рассылка закончена!')
            print(Fore.GREEN + 'Следущая рассылка через: ' + str(timer) + 'сек.' )
            sleep(timer)
            groups.clear()
if __name__ == '__main__':
	spammer(client)

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox

class TelegramApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # Создание основных компонентов интерфейса
        self.tabs = QTabWidget()
        self.accounts_tab = QWidget()
        self.send_tab = QWidget()
        self.invite_tab = QWidget()
        self.parse_tab = QWidget()

        # Добавление вкладок
        self.tabs.addTab(self.accounts_tab, "Аккаунты")
        self.tabs.addTab(self.send_tab, "Рассылка")
        self.tabs.addTab(self.invite_tab, "Инвайт")
        self.tabs.addTab(self.parse_tab, "Парсинг")

        # Добавление компонентов для вкладки "Аккаунты"
        self.accounts_layout = QVBoxLayout()
        self.add_account_button = QPushButton("Добавить аккаунт")
        self.accounts_layout.addWidget(self.add_account_button)
        self.accounts_tab.setLayout(self.accounts_layout)

        # Добавление компонентов для вкладки "Рассылка"
        self.send_layout = QVBoxLayout()
        self.send_options = QComboBox()
        self.send_options.addItems(["Рассылка по группам", "Рассылка по пользователям"])
        self.send_text = QTextEdit()
        self.send_button = QPushButton("Отправить")
        self.send_layout.addWidget(self.send_options)
        self.send_layout.addWidget(self.send_text)
        self.send_layout.addWidget(self.send_button)
        self.send_tab.setLayout(self.send_layout)

        # Добавление компонентов для вкладки "Инвайт"
        # Аналогично добавлению компонентов для остальных вкладок

        # Добавление компонентов для вкладки "Парсинг"
        # Аналогично добавлению компонентов для остальных вкладок

        # Создание основного макета приложения
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)

        # Связываем кнопки и функции обработчики событий

        self.add_account_button.clicked.connect(self.add_account)

        # ...

        self.setWindowTitle('Telegram App')
        self.show()

    def add_account(self):
        # Реализация добавления аккаунта
        pass

    # Другие функции обработчики событий для реализации функционала

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = TelegramApp()
    sys.exit(app.exec_())
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox, QListWidget
from PyQt5.QtGui import QIcon
from telegram.ext import Updater, CommandHandler, MessageHandler
import logging
import time

class TelegramApp(QWidget):
    def __init__(self):
        super().__init__()
        self.accounts = []  # Список для хранения аккаунтов
        self.initUI()

    def initUI(self):
        # Создание основных компонентов интерфейса
        self.tabs = QTabWidget()
        self.accounts_tab = QWidget()
        self.send_tab = QWidget()
        self.invite_tab = QWidget()
        self.parse_tab = QWidget()

        # Добавление вкладок
        self.tabs.addTab(self.accounts_tab, "Аккаунты")
        self.tabs.addTab(self.send_tab, "Рассылка")
        self.tabs.addTab(self.invite_tab, "Инвайт")
        self.tabs.addTab(self.parse_tab, "Парсинг")

        # Добавление компонентов для вкладки "Аккаунты"
        self.accounts_layout = QVBoxLayout()
        self.add_account_button = QPushButton("Добавить аккаунт")
        self.account_list = QListWidget()
        self.accounts_layout.addWidget(self.add_account_button)
        self.accounts_layout.addWidget(self.account_list)
        self.accounts_tab.setLayout(self.accounts_layout)

        # Добавление компонентов для вкладки "Рассылка"
        self.send_layout = QVBoxLayout()
        self.send_options = QComboBox()
        self.send_options.addItems(["Рассылка по группам", "Рассылка по пользователям", "Рассылка по комментариям в каналах"])
        self.send_text = QTextEdit()
        self.send_button = QPushButton("Отправить")
        self.accounts_list = QListWidget()
        self.groups_edit = QTextEdit()
        self.users_edit = QTextEdit()
        self.channels_edit = QTextEdit()
        self.interval_edit = QLineEdit()
        self.send_layout.addWidget(self.send_options)
        self.send_layout.addWidget(self.send_text)
        self.send_layout.addWidget(self.accounts_list)
        self.send_layout.addWidget(self.groups_edit)
        self.send_layout.addWidget(self.users_edit)
        self.send_layout.addWidget(self.channels_edit)
        self.send_layout.addWidget(self.interval_edit)
        self.send_layout.addWidget(self.send_button)
        self.send_tab.setLayout(self.send_layout)

        # Добавление компонентов для вкладки "Инвайт"
        self.invite_layout = QVBoxLayout()
        self.invite_button = QPushButton("Отправить приглашение")
        self.invite_text = QTextEdit()
        self.invite_layout.addWidget(self.invite_button)
        self.invite_layout.addWidget(self.invite_text)
        self.invite_tab.setLayout(self.invite_layout)

        # Добавление компонентов для вкладки "Парсинг"
        self.parse_layout = QVBoxLayout()
        self.parse_button = QPushButton("Парсить")
        self.parse_text = QTextEdit()
        self.parse_layout.addWidget(self.parse_button)
        self.parse_layout.addWidget(self.parse_text)
        self.parse_tab.setLayout(self.parse_layout)

        # Связываем кнопку добавления аккаунта с функцией add_account
        self.add_account_button.clicked.connect(self.add_account)

        # Связываем кнопку "Отправить" с функцией send_message
        self.send_button.clicked.connect(self.send_message)

        # Связываем кнопку "Отправить приглашение" с функцией send_invite
        self.invite_button.clicked.connect(self.send_invite)

        # Связываем кнопку "Парсить" с функцией parse_text
        self.parse_button.clicked.connect(self.parse_text)

    def add_account(self):
        # Создаем новое окно для ввода данных аккаунта
        dialog = AccountInputDialog(self)
        if dialog.exec_():
            # Получаем данные аккаунта из диалогового окна
            username = dialog.username_edit.text()
            api_id = dialog.api_id_edit.text()
            api_hash = dialog.api_hash_edit.text()

            # Сохраняем данные нового аккаунта в список
            self.accounts.append((username, api_id, api_hash))

            # Отображаем список аккаунтов в интерфейсе
            self.account_list.addItem(username)

    def send_message(self):
        variant = self.send_options.currentText()
        text = self.send_text.toPlainText()
        accounts = self.accounts  # Доступ к списку аккаунтов из первого фрагмента
        interval = int(self.interval_edit.text())

        for account in accounts:
            client = TelegramClient(account, api_id, api_hash)
            client.start()

            if variant == "Рассылка по группам":
                groups = self.groups_edit.toPlainText().split('\n')
                for group in groups:
                    client.send_message(InputPeerChannel(group), text)
                    time.sleep(interval)
            elif variant == "Рассылка по пользователям":
                users = self.users_edit.toPlainText().split('\n')
                for user in users:
                    client.send_message(InputPeerUser(user), text)
                    time.sleep(interval)
            elif variant == "Рассылка по комментариям в каналах":
                channels = self.channels_edit.toPlainText().split('\n')
                for channel in channels:
                    comments = client.get_messages(InputPeerChannel(channel), limit=100)
                    for comment in comments:
                        client.send_message(InputPeerChannel(channel), reply_to=comment.id, text=text)
                        time.sleep(interval)

        # Отображение уведомления
        QMessageBox.information(self, "Рассылка", "Сообщения успешно отправлены!")

    def send_invite(self):
        text = self.invite_text.toPlainText()
        accounts = self.accounts  # Доступ к списку аккаунтов из первого фрагмента

        for account in accounts:
            client = TelegramClient(account, api_id, api_hash)
            client.start()

            client.send_message(InputPeerUser(self.invite_text.toPlainText()), text)

        QMessageBox.information(self, "Приглашение", "Приглашение отправлено!")

    def parse_text(self):
        text = self.parse_text.to