Compare commits

...

2 commits

Author SHA1 Message Date
ca886b1c71
add shuffle play 2024-07-18 07:44:41 -04:00
0042deb1f3
add more error checking 2024-07-18 07:27:56 -04:00

29
bot.py
View file

@ -4,6 +4,7 @@ from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from time import sleep from time import sleep
import disnake import disnake
import random
from urllib.parse import urlparse from urllib.parse import urlparse
from disnake.ext import commands from disnake.ext import commands
from disnake import TextInputStyle from disnake import TextInputStyle
@ -19,6 +20,7 @@ handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(me
logger.addHandler(handler) logger.addHandler(handler)
queue = [] queue = []
shuffle = False
load_dotenv() load_dotenv()
options = Options() options = Options()
options.profile = webdriver.FirefoxProfile(os.getenv("PROFILE_PATH")) options.profile = webdriver.FirefoxProfile(os.getenv("PROFILE_PATH"))
@ -35,8 +37,11 @@ async def on_ready():
def play_video(videourl): def play_video(videourl):
driver.get(videourl) driver.get(videourl)
sleep(4) sleep(4)
try:
elem = driver.find_element(By.CLASS_NAME, "ytp-fullscreen-button") elem = driver.find_element(By.CLASS_NAME, "ytp-fullscreen-button")
elem.send_keys(Keys.RETURN) elem.send_keys(Keys.RETURN)
except Exception:
return #if this errors there is no fullscreen options, such as playlists, so skip the link
#guess I don't need this #guess I don't need this
#sleep(1.5) #sleep(1.5)
#elem = driver.find_element(By.XPATH, '//button[@aria-keyshortcuts="k"]') #elem = driver.find_element(By.XPATH, '//button[@aria-keyshortcuts="k"]')
@ -52,7 +57,10 @@ def play_video(videourl):
elem.send_keys(Keys.RETURN) elem.send_keys(Keys.RETURN)
except Exception: except Exception:
pass pass
try:
endscreen = driver.find_element(By.CLASS_NAME, "html5-endscreen") endscreen = driver.find_element(By.CLASS_NAME, "html5-endscreen")
except Exception:
return #same as above
while str(endscreen.get_attribute('style')) == "display: none;": while str(endscreen.get_attribute('style')) == "display: none;":
pass pass
sleep(2) sleep(2)
@ -75,6 +83,23 @@ async def play(inter: disnake.AppCmdInter, link: str):
await inter.edit_original_response(f"This bot only accepts youtube links") await inter.edit_original_response(f"This bot only accepts youtube links")
return return
@bot.slash_command(
name="shuffle",
description="toggles shuffle on or off, the queue cannot be unshuffled once it is shuffled",
)
async def shuffleplay(inter: disnake.AppCmdInter, toggle: str = commands.Param(choices=["on", "off"])):
await inter.response.defer(ephemeral=True)
if toggle == "on":
global shuffle
shuffle = True
await inter.edit_original_response(f"shuffle enabled")
return
else:
global shuffle
shuffle = False
await inter.edit_original_response(f"shuffle disabled")
return
@bot.slash_command( @bot.slash_command(
name="queue", name="queue",
description="list the videos in queue", description="list the videos in queue",
@ -138,7 +163,11 @@ async def remove(inter: disnake.AppCmdInter, toremove: int):
async def queuehandler(): async def queuehandler():
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
global queue
while queue: while queue:
if shuffle:
random.shuffle(queue)
print(queue)
driver.maximize_window() driver.maximize_window()
await loop.run_in_executor(None, play_video, queue[0]) await loop.run_in_executor(None, play_video, queue[0])
queue.pop(0) queue.pop(0)