Skip to content

Instantly share code, notes, and snippets.

@rupython
Created May 4, 2021 12:01
Show Gist options
  • Save rupython/5d8d7fe02558a0117e953e9141d3bb75 to your computer and use it in GitHub Desktop.
Save rupython/5d8d7fe02558a0117e953e9141d3bb75 to your computer and use it in GitHub Desktop.
From: Yaroslav
# -*- 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