Created
May 4, 2021 12:01
-
-
Save rupython/5d8d7fe02558a0117e953e9141d3bb75 to your computer and use it in GitHub Desktop.
From: Yaroslav
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# импортируем библиотеки | |
import sys | |
from PySide2 import QtWidgets | |
from PySide2.QtCore import (QCoreApplication, QMetaObject, QRect) | |
from PySide2.QtWidgets import * | |
from telethon import TelegramClient, events | |
from pars_conf import account, list_all, key_words # импортируем данные из файл конфигурации | |
from multiprocessing import Process | |
client = TelegramClient('my_account', account[0], account[1]) # собираем телеграм клиента | |
client.start() | |
client.disconnect() | |
@client.on(events.NewMessage) # обработчик который запускаеться при получении нового сообщения | |
async def my_event_handler(event): # берем событие | |
print("strated") | |
if event.chat.username in list_all: # проверяем пришло ли событие из канала который входит в наш список | |
if len(key_words[0]) != 0: | |
for i in range(0, len(key_words)): | |
if key_words[i] in event.message.message: | |
await client.forward_messages(account[2], | |
event.message) # пересылаем сообщение в нашу личный канал | |
print("busted for key word") # выводим в консоль оповещение | |
else: | |
await client.forward_messages(account[2], event.message) # пересылаем сообщение в нашу личный канал | |
print("busted") # выводим в консоль оповещение | |
def shaya(): | |
client.start() | |
client.run_until_disconnected() | |
# отрисовавыем интерфейс | |
class Ui_TGParser(object): | |
def setupUi(self, TGParser): | |
if not TGParser.objectName(): | |
TGParser.setObjectName(u"TGParser") | |
TGParser.resize(420, 484) | |
self.centralwidget = QWidget(TGParser) | |
self.centralwidget.setObjectName(u"centralwidget") | |
self.groupBox = QGroupBox(self.centralwidget) | |
self.groupBox.setObjectName(u"groupBox") | |
self.groupBox.setGeometry(QRect(10, 10, 401, 111)) | |
self.lineEdit_2 = QLineEdit(self.groupBox) | |
self.lineEdit_2.setText(str(account[0])) | |
self.lineEdit_2.setObjectName(u"lineEdit_2") | |
self.lineEdit_2.setGeometry(QRect(110, 20, 150, 20)) | |
self.lineEdit_3 = QLineEdit(self.groupBox) | |
self.lineEdit_3.setText(str(account[1])) | |
self.lineEdit_3.setObjectName(u"lineEdit_3") | |
self.lineEdit_3.setGeometry(QRect(110, 50, 150, 20)) | |
self.lineEdit_4 = QLineEdit(self.groupBox) | |
self.lineEdit_4.setText(str(account[2])) | |
self.lineEdit_4.setObjectName(u"lineEdit_4") | |
self.lineEdit_4.setGeometry(QRect(110, 80, 150, 20)) | |
self.label_3 = QLabel(self.groupBox) | |
self.label_3.setObjectName(u"label_3") | |
self.label_3.setGeometry(QRect(20, 20, 47, 13)) | |
self.label_4 = QLabel(self.groupBox) | |
self.label_4.setObjectName(u"label_4") | |
self.label_4.setGeometry(QRect(20, 50, 47, 13)) | |
self.label_5 = QLabel(self.groupBox) | |
self.label_5.setObjectName(u"label_5") | |
self.label_5.setGeometry(QRect(20, 80, 81, 16)) | |
self.pushButton = QPushButton(self.groupBox) | |
self.pushButton.setObjectName(u"pushButton") | |
self.pushButton.setGeometry(QRect(280, 40, 101, 31)) | |
self.groupBox_2 = QGroupBox(self.centralwidget) | |
self.groupBox_2.setObjectName(u"groupBox_2") | |
self.groupBox_2.setGeometry(QRect(10, 130, 401, 281)) | |
self.plainTextEdit = QPlainTextEdit(self.groupBox_2) | |
self.plainTextEdit.setObjectName(u"plainTextEdit") | |
self.plainTextEdit.setPlainText(str(list_all)) | |
self.plainTextEdit.setGeometry(QRect(110, 20, 230, 140)) | |
self.plainTextEdit_2 = QPlainTextEdit(self.groupBox_2) | |
self.plainTextEdit_2.setPlainText(str(key_words).replace("'","")[1:-1]) | |
self.plainTextEdit_2.setObjectName(u"plainTextEdit") | |
self.plainTextEdit_2.setGeometry(QRect(110, 170, 230, 50)) | |
self.label_9 = QLabel(self.groupBox_2) | |
self.label_9.setObjectName(u"label_9") | |
self.label_9.setGeometry(QRect(10, 20, 71, 16)) | |
self.label_10 = QLabel(self.groupBox_2) | |
self.label_10.setObjectName(u"label_10") | |
self.label_10.setGeometry(QRect(10, 170, 71, 16)) | |
self.pushButton_3 = QPushButton(self.groupBox_2) | |
self.pushButton_3.setObjectName(u"pushButton_3") | |
self.pushButton_3.setGeometry(QRect(10, 240, 70, 31)) | |
self.pushButton_4 = QPushButton(self.groupBox_2) | |
self.pushButton_4.setObjectName(u"pushButton_4") | |
self.pushButton_4.setGeometry(QRect(290, 240, 101, 31)) | |
self.lineEdit_10 = QLineEdit(self.groupBox_2) | |
self.lineEdit_10.setObjectName(u"lineEdit_10") | |
self.lineEdit_10.setGeometry(QRect(85, 240, 191, 20)) | |
self.pushButton_5 = QPushButton(self.centralwidget) | |
self.pushButton_5.setObjectName(u"pushButton_5") | |
self.pushButton_5.setGeometry(QRect(70, 420, 101, 31)) | |
self.pushButton_6 = QPushButton(self.centralwidget) | |
self.pushButton_6.setObjectName(u"pushButton_6") | |
self.pushButton_6.setGeometry(QRect(240, 420, 101, 31)) | |
TGParser.setCentralWidget(self.centralwidget) | |
self.statusbar = QStatusBar(TGParser) | |
self.statusbar.setObjectName(u"statusbar") | |
TGParser.setStatusBar(self.statusbar) | |
self.retranslateUi(TGParser) | |
QMetaObject.connectSlotsByName(TGParser) | |
def retranslateUi(self, TGParser): | |
TGParser.setWindowTitle(QCoreApplication.translate("TGParser", u"TG Parser 3.0", None)) | |
self.groupBox.setTitle(QCoreApplication.translate("TGParser", u"Account Data", None)) | |
self.label_3.setText(QCoreApplication.translate("TGParser", u"API", None)) | |
self.label_4.setText(QCoreApplication.translate("TGParser", u"HASH", None)) | |
self.label_5.setText(QCoreApplication.translate("TGParser", u"Your channel Name", None)) | |
self.pushButton.setText(QCoreApplication.translate("TGParser", u"Apply", None)) | |
self.groupBox_2.setTitle(QCoreApplication.translate("TGParser", u"Groups Data", None)) | |
self.plainTextEdit.setPlaceholderText("") | |
self.plainTextEdit.setReadOnly(True) | |
self.label_9.setText(QCoreApplication.translate("TGParser", u"Channels list:", None)) | |
self.label_10.setText(QCoreApplication.translate("TGParser", u"Key words:", None)) | |
self.pushButton_3.setText(QCoreApplication.translate("TGParser", u"Add chanel", None)) | |
self.pushButton_4.setText(QCoreApplication.translate("TGParser", u"Remove Channel", None)) | |
self.pushButton_5.setText(QCoreApplication.translate("TGParser", u"Start", None)) | |
self.pushButton_6.setText(QCoreApplication.translate("TGParser", u"Stop", None)) | |
self.pushButton_6.setEnabled(False) | |
class TGParser(QtWidgets.QMainWindow, Ui_TGParser): # Собираем класс с нашими основными действиями | |
zoe: None # переменная для хранения номера подпроцесса | |
def __init__(self): | |
super().__init__() | |
self.setupUi(self) # Создание формы и Ui (наш дизайн) | |
self.show() # Показать наше окно | |
# прописывем реакции на кнопки | |
self.pushButton.clicked.connect(self.apply) | |
self.pushButton_3.clicked.connect(self.chanel_list_add) | |
self.pushButton_4.clicked.connect(self.chanel_list_rem) | |
self.pushButton_5.clicked.connect(self.start) | |
self.pushButton_6.clicked.connect(self.stop) | |
def stop(self): # функция которая останавливает парсер | |
# активируем кнопки и поля ввода | |
self.lineEdit_2.setEnabled(True) | |
self.lineEdit_3.setEnabled(True) | |
self.lineEdit_4.setEnabled(True) | |
self.lineEdit_10.setEnabled(True) | |
self.pushButton.setEnabled(True) | |
self.pushButton_3.setEnabled(True) | |
self.pushButton_4.setEnabled(True) | |
self.pushButton_5.setEnabled(True) | |
self.pushButton_6.setEnabled(False) | |
self.prime_thread.terminate() | |
def start(self): # функция которая запускает парсер | |
self.prime_thread = Process(target=shaya) | |
self.prime_thread.start() | |
# деактивируем кнопки и поля ввода | |
self.lineEdit_2.setEnabled(False) | |
self.lineEdit_3.setEnabled(False) | |
self.lineEdit_4.setEnabled(False) | |
self.lineEdit_10.setEnabled(False) | |
self.pushButton.setEnabled(False) | |
self.pushButton_3.setEnabled(False) | |
self.pushButton_4.setEnabled(False) | |
self.pushButton_5.setEnabled(False) | |
self.pushButton_6.setEnabled(True) | |
def apply(self): # функция ввода данных для парсера | |
account[0] = self.lineEdit_2.text() # берем API | |
account[1] = self.lineEdit_3.text() # берем HASH | |
account[2] = self.lineEdit_4.text() # берем название канала в который будем пересылать сообщения | |
key_words = (self.plainTextEdit_2.toPlainText()).split(",") | |
print(key_words) | |
print(len(key_words[0])) | |
output = open("pars_conf.py", 'w') # перезаписываем новые даные в файл конфига | |
print("account =", account, file=output) | |
print("list_all =", list_all, file=output) | |
print("key_words =", key_words, file=output) | |
output.close() # закрываем файл | |
def chanel_list_add(self): # функция которая добавляет канал в список каналов для парсинга | |
if self.lineEdit_10.text() not in list_all: # проверяем нет ли уже такого канала | |
list_all.append(self.lineEdit_10.text()) # добавляем канал в список | |
self.plainTextEdit.setPlainText(str(list_all)) # обновляем поле с введными каналами | |
output = open("pars_conf.py", 'w') # перезаписываем новые даные в файл конфига | |
print("account =", account, file=output) | |
print("list_all =", list_all, file=output) | |
print("key_words =", key_words, file=output) | |
output.close() # закрываем файл | |
def chanel_list_rem(self): # функция которая удаляет канал из списка каналов для парсинга | |
list_all.remove(self.lineEdit_10.text()) # удаляем канал из списка | |
self.plainTextEdit.setPlainText(str(list_all)) # обновляем поле с введными каналами | |
output = open("pars_conf.py", 'w') # перезаписываем новые даные в файл конфига | |
print("account =", account, file=output) | |
print("list_all =", list_all, file=output) | |
print("key_words =", key_words, file=output) | |
output.close() # закрываем файл | |
if __name__ == '__main__': | |
app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication | |
tg_Parser = TGParser() # Сздание инстанса класса Калькулятор, который мы создадим далее | |
sys.exit(app.exec_()) # Запуск |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment