Untitled

mail@pastecode.io avatar
unknown
python
a year ago
8.1 kB
3
Indexable
Never
import re
import PIL
import time
import requests
import urllib.parse
import urllib.request
from uuid import UUID
import coverpy
import vlc
from PIL import ImageTk, Image
from twitchAPI import CustomRewardRedemptionStatus
from twitchAPI.pubsub import PubSub
from twitchAPI.twitch import Twitch, AuthScope
from tkinter import *
import tkinter as tk
import config
import pafy

coverpy = coverpy.CoverPy()
limit = 1

twitch = Twitch(config.CLIENTID,
                config.CLIENTSECRET,
                target_app_auth_scope=[AuthScope.USER_EDIT])

scope = [AuthScope.CHANNEL_READ_REDEMPTIONS]
scope1 = [AuthScope.CHANNEL_MANAGE_REDEMPTIONS]

twitch.set_user_authentication(
    config.PASS,
    scope + scope1,
    'refresh_token')


app = tk.Tk()
app.title('Album Art')
app.geometry("700x255")
app.resizable(True, False)


def pub():
    global RedempPubsub
    pubsub = PubSub(twitch)
    pubsub.start()
    RedempPubsub = pubsub.listen_channel_points('779823875', callback_whisper)

def callback_whisper(uuid: UUID, data: dict) -> None:

        global media, trackstrip2, redemid, redemprionid, redemuserimput
        
        redemid = data['data']['redemption']['reward']['id']
        redemprionid = data['data']['redemption']['id']
        redemuserimput = data['data']['redemption']['user_input']

        trackstrip = redemuserimput.replace(redemuserimput[redemuserimput.find("("):redemuserimput.find(")") + 1],'').strip()
        trackstrip1 = trackstrip.replace(trackstrip[trackstrip.find("["):trackstrip.find("]") + 1], '').strip()
        trackstrip2 = trackstrip1.replace(trackstrip1[trackstrip1.find('"'):trackstrip1.find('"') + 1], '').strip()

        print(trackstrip2 + ' Recebeu pedido')
        albumart(trackstrip2)


def albumart(trackstrip2):

        try:
            result = coverpy.get_cover(trackstrip2, limit)
            artista = result.artist
            musica = result.name
            albumart = result.artwork(250)
            
            txt3.configure(text=musica + " - " + artista)

            img_data = requests.get(albumart).content
            with open('album.jpg', 'wb') as handler:
                handler.write(img_data)

            time.sleep(3)

            photo = ImageTk.PhotoImage(PIL.Image.open("album.jpg"))
            img = tk.Label(app, image=photo)
            img.configure(image=photo)



            filehtml = open("AlbumArt.html", "w")
            filehtml.write(
                "<html>\n<head>\n<meta http-equiv='refresh' content='30'>\n<title>ALBUM ART</title>\n<link "
                "rel='stylesheet' href='https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css'>\n"
                "<script src='https://code.jquery.com/jquery-3.6.0.slim.min.js'></script>\n</head>\n<body>\n<div "
                "class='row align-items-center' id='scroll-container' style='width: 100%;background:rgba(0, 0, 0, "
                "0.714); height:auto;'>\n<div class='col-xs-6 ' >\n<img src='album.jpg' class='rounded-circle m-5 "
                "img-responsive' style='height:200px; margin-left:-15px;' />\n</div>\n<div class='col-xs-6'>\n<marquee "
                "style='color: white; width:auto;' behavior='scroll' direction='left' scrollamount='10'><h1 "
                "style='font-size: 70px;'>" + musica + "</h1><h2 class='mt-'3' style='font-size: 50px;'>" +
                artista + "</h2></marquee>\n</div>\n</div>\n</body>\n</html>")

            filehtml.close()
            player(redemuserimput)

        except:

            print('Sem Album Art')

            txt3.configure(text=trackstrip2)
            photo2 = ImageTk.PhotoImage(PIL.Image.open("AlbumDisc.jpg"))
            img = tk.Label(app, image=photo2)
            img.configure(image=photo2)

            filehtml = open("AlbumArt.html", "w")
            filehtml.write(
                "<html>\n<head>\n<meta http-equiv='refresh' content='30'>\n<title>ALBUM ART</title>\n<link "
                "rel='stylesheet' href='https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css'>\n"
                "<script src='https://code.jquery.com/jquery-3.6.0.slim.min.js'></script>\n</head>\n<body>\n<div "
                "class='row align-items-center' id='scroll-container' style='width: 100%;background:rgba(0, 0, 0, "
                "0.714); height:auto;'>\n<div class='col-xs-6 ' >\n<img src='AlbumDisc.jpg' class='rounded-circle m-5 "
                "img-responsive' style='height:200px; margin-left:-15px;' />\n</div>\n<div class='col-xs-6'>\n<marquee "
                "style='color: white; width:auto;' behavior='scroll' direction='left' scrollamount='10'><h1 "
                "style='font-size: 70px;'>" + trackstrip2 + "</h1><h2 class='mt-'3' style='font-size: 50px;'>""</h2></marquee>\n</div>\n</div>\n</body>\n</html>")

            filehtml.close()

            player(redemuserimput)

def player(redemuserimput):


    query_string = urllib.parse.urlencode({"search_query": redemuserimput})
    formaturl = urllib.request.urlopen("https://www.youtube.com/results?" + query_string)
    search_results = re.findall(r"watch\?v=(\S{11})", formaturl.read().decode())
    clip2 = "https://www.youtube.com/watch?v=" + "{}".format(search_results[0])

    video = pafy.new(clip2)
    videolink = video.getbestaudio()
    media = vlc.MediaPlayer(videolink.url)

    print(media)
    print('CHECANDO STATUS DO PLAYER')

    if media.get_state == vlc.State.Playing:

            print(media.get_state + ' TOCANDO TRUE')

            file = open('playlist.txt', 'r')
            lines = file.readlines()
            file.close()

            lines.insert(1, clip2 + "\n")

            file = open('playlist.txt', 'w')
            file.writelines(lines)
            file.close()

    else:
        print('NÃO TOCANDO')
        playlist = open('playlist.txt', 'r')
        primeira = playlist.readline()

            
        if primeira != "":
            print('LISTA NÃO VAZIA')
            with open('playlist.txt', 'r') as fr:
                # reading line by line
                lines = fr.readlines()
                
                # pointer for position
                ptr = 1

                # opening in writing mode
                with open('playlist.txt', 'w') as fw:
                    for line in lines:
                        # we want to remove 5th line
                        if ptr != 1:
                            fw.write(line)
                        ptr += 1
                print("APAGOU LINHA")

        else:
             media.play()

    twitch.update_redemption_status(
        broadcaster_id="779823875",
        reward_id=redemid,
        redemption_ids=redemprionid,
        status=CustomRewardRedemptionStatus("FULFILLED"),
    )

    while media.get_state == vlc.State.Ended:
        txt3.configure(text='Sem Musica')
        break

    while media.get_state == vlc.State.Ended:
        txt3.configure(text='Sem Musica')
        break


def stop ():
    media.stop()

def close ():
    app.destroy()
    

app.after(1000, pub())

app.grid_columnconfigure(1, weight=11)
photo = ImageTk.PhotoImage(PIL.Image.open("album.jpg"))

img = tk.Label(app, image=photo)
img.grid(rowspan=4, column=0)

btn = tk.Button(app, text="Skip", bg="#4c4c4c", fg="#fff", font=('Seoge UI', 14),command=stop)
btn.grid(row=2, column=1, padx=5, sticky='W' + "E")

btn2 = tk.Button(app, text="Quit", bg="#4c4c4c", fg="#fff", font=('Seoge UI', 14),command=close)
btn2.grid(row=3, column=1, padx=5, sticky='W' + "E")

txt2 = tk.Label(app, text="Musica", bg="#202020", fg="#fff", font=('Seoge UI', 10))
txt2.grid(row=0, column=1, padx=5, sticky='W' + "E")

txt3 = tk.Label(app, text="", bg="#4c4c4c", fg="#fff", font=('Seoge UI', 14))
txt3.grid(row=1, column=1, padx=5, sticky='W' + "E")


app.configure(background="#202020")

app.mainloop()