İyi geceler hocam.
Dediğiniz üzere bakındım ve foruma da göz gezdirdim sevgili @Cihat_Altiparmak’ın Şu yazısı gerçekten çok açıklayıcı olduğunu gördüm ve uyarladım.
Ve koduma da şöyle düzen getirdim. Sadece scrollun otomatik olarak aşağı inmesini sağlamam gerekiyor Labellerin makyajınıda henüz düzenlemedim default haliyle. Önce kodu daha sonra gif olarak bir görüntüyü paylaşıcam (Hocam “şunlar şunlar gereksiz durmasının bir anlamı yok” dediğiniz parçalar varsa belirtirseniz çok sevinirim.):
from getpass import getuser
from time import sleep
from PyQt5 import QtGui,QtWidgets
from PyQt5.QtCore import (QThread,QObject,pyqtSignal,pyqtSlot)
from PyQt5.QtWidgets import (QApplication,QScrollArea,QWidget,QVBoxLayout,QLabel,QFormLayout,QGroupBox)
from twitchWindow import Ui_MainWindow # Tasarladığım sayfa, İçerisinde Miras olarak alınan QMainWindow bulunuyor
from configparser import ConfigParser
from webbrowser import open_new
import socket
import os
file = f"C:\\Users\\{getuser()}\\Documents\\Twitch{chr(ord(' '))}Assistant"
cfg = ConfigParser()
cfg.read(f"{file}\\streamer.ini",encoding="utf-8")
class Worker(QObject):
finished = pyqtSignal()
def run(self):
oauth = "oauth:TOKEN" # Twitch generatorden elde edilen şifre
user_name = "TWITCH_KULLANICI_ADIM" # twitch kullanıcı adım
channel = cfg['Stream']['streamer'] # .ini dosyasına kaydettiğim yayıncı ismi
addr = "irc.chat.twitch.tv" # twitch chat için yazılan dokümantasyondaki adres
port = 6667 # olması gereken port
sock = socket.socket()
sock.connect((addr,port))
self.send(sock,f"PASS {oauth}") # verilen şifrenin kullanıldığı yer
self.send(sock,f"NICK {user_name}") # Kullanıcı adım
self.send(sock,f"JOIN #{channel}") # Hangi yayıncının chatine katılacaksam channel değeri o
while True:
try:
mesaj = f".tmi.twitch.tv PRIVMSG #{channel} :" # Daha anlamlı bir çıktı almak adına bu iletiyi bir değişkene atıyorum
for i in self.recv(sock,1024).replace(mesaj," ").split(":")[1].split("@"): # daha düzenli gözükmesi için split ve replace kullanıp son halinde i değişkeni ile dolanıyorum
a = i.split(' ')[0].strip() # isimler
b = i.split(' ')[1:] # mesajlar
if not b == []: # normalde ikişer çıktı veriyor. Yaptığım düzenlemeye göre önce boş bir liste ardından kişileri ve ne yazdıkları ekrana düşüyor bunu yakalayıp yalnızca ne yazdıklarını ekrana bastırıyorum
with open("test.txt","a",encoding="utf-8") as f: # dışardan ulaşmanın yolu olarak dosya oluşturup içerisine kaydettirdim
f.write(f"{a.upper()} ----> {b}".replace("[","").replace("'","").replace(",","").replace("\\r\\n]","")+"\n") # düzenli olarak gözüken "Kullanıcı ----> mesaj" çıktısı
sleep(1.2)
self.finished.emit()
except:
pass
def send(self,sock,msg):
sock.send(bytes(msg+"\n","ASCII"))
def recv(self,sock,buff_size):
return sock.recv(buff_size).decode("UTF-8")
class MainWindow(Ui_MainWindow): # Miras olarak Tasarım sayfasının sınıfını alıyor.(onun içerisinde de QMainWindow olduğundan)
def __init__(self):
super().__init__() # Miras özellikleri kullanabilmem için
self.thread = QThread()
self.worker = Worker()
self.streamerNameLabel.setText(f"Streamer-Name: {cfg['Stream']['user_name']}")
self.viewCountLabel.setText(cfg['Stream']['count'])
self.broadcastTitleLabel.setText(cfg["Stream"]["title"])
self.profileImageLabel.setPixmap(QtGui.QPixmap(f"{file}\\{cfg['Stream']['streamer']}.png"))
self.thumbnailLabel.setPixmap(QtGui.QPixmap(f"{file}\\{cfg['Stream']['streamer']}_thumb.png"))
self.typeGameLabel.setText(cfg["Stream"]["game_name"])
self.closePushButton.clicked.connect(lambda: self.closer())
self.goBroadcastPushButton.clicked.connect(lambda: open_new(f"https://www.twitch.tv/{cfg['Stream']['streamer']}"))
self.worker.moveToThread(self.thread)
self.thread.started.connect(self.worker.run)
self.thread.start()
self.formLayout = QFormLayout()
self.groupBox = QGroupBox()
sleep(2)
self.worker.finished.connect(self.deneme)
while True:
sleep(2)
scroll = QScrollArea(self.tab)
scroll.setWidget(self.groupBox)
scroll.setWidgetResizable(True)
scroll.setGeometry(8, 8, 508, 421)
layout = QVBoxLayout()
layout.addWidget(scroll)
self.worker.finished.emit()
break
def closer(self):
self.close()
os.remove("test.txt")
@pyqtSlot()
def deneme(self):
with open("test.txt","r",encoding="utf-8") as g:
rr = g.read()
self.label2 = QLabel(rr)
print(rr)
self.formLayout.addRow(self.label2)
self.groupBox.setLayout(self.formLayout)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())