switched to using pytubefix
This commit is contained in:
parent
542bb5d5cd
commit
803acf514b
@ -6,25 +6,31 @@ This plugin provides a command to fetch YouTube video information from links.
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
from pytube import YouTube
|
from pytubefix import YouTube
|
||||||
import simplematrixbotlib as botlib
|
import simplematrixbotlib as botlib
|
||||||
|
import asyncio
|
||||||
|
|
||||||
def seconds_to_minutes_seconds(seconds):
|
def seconds_to_minutes_seconds(seconds):
|
||||||
minutes = seconds // 60
|
minutes = seconds // 60
|
||||||
seconds %= 60
|
seconds %= 60
|
||||||
return f"{minutes:02d}:{seconds:02d}"
|
return f"{minutes:02d}:{seconds:02d}"
|
||||||
|
|
||||||
|
async def fetch_youtube_info(youtube_url):
|
||||||
|
try:
|
||||||
|
video = YouTube(youtube_url)
|
||||||
|
title = video.title
|
||||||
|
description = video.description
|
||||||
|
length = seconds_to_minutes_seconds(video.length)
|
||||||
|
views = video.views
|
||||||
|
author = video.author
|
||||||
|
description_with_breaks = description.replace('\n', '<br>')
|
||||||
|
info_message = f"""<strong>🎬🎝 Title:</strong> {title} | <strong>Length</strong>: {length} minutes | <strong>Views</strong>: {views}\n<details><summary><strong>⤵︎Click Here For Description⤵︎</strong></summary>{description_with_breaks}</details>"""
|
||||||
|
return info_message
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error fetching YouTube video information: {str(e)}")
|
||||||
|
return None
|
||||||
|
|
||||||
async def handle_command(room, message, bot, prefix, config):
|
async def handle_command(room, message, bot, prefix, config):
|
||||||
"""
|
|
||||||
Function to handle YouTube video information from links.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
room (Room): The Matrix room where the command was invoked.
|
|
||||||
message (RoomMessage): The message object containing the command.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
None
|
|
||||||
"""
|
|
||||||
match = botlib.MessageMatch(room, message, bot, prefix)
|
match = botlib.MessageMatch(room, message, bot, prefix)
|
||||||
if match.is_not_from_this_bot() and re.search(r'youtube\.com/watch\?v=', message.body):
|
if match.is_not_from_this_bot() and re.search(r'youtube\.com/watch\?v=', message.body):
|
||||||
logging.info("YouTube link detected")
|
logging.info("YouTube link detected")
|
||||||
@ -33,16 +39,18 @@ async def handle_command(room, message, bot, prefix, config):
|
|||||||
video_id = video_id_match.group(1)
|
video_id = video_id_match.group(1)
|
||||||
youtube_url = f"https://www.youtube.com/watch?v={video_id}"
|
youtube_url = f"https://www.youtube.com/watch?v={video_id}"
|
||||||
logging.info(f"Fetching information for YouTube video: {youtube_url}")
|
logging.info(f"Fetching information for YouTube video: {youtube_url}")
|
||||||
try:
|
retry_count = 3
|
||||||
video = YouTube(youtube_url)
|
while retry_count > 0:
|
||||||
title = video.title
|
info_message = await fetch_youtube_info(youtube_url)
|
||||||
description = video.description
|
if info_message:
|
||||||
length = seconds_to_minutes_seconds(video.length)
|
await bot.api.send_markdown_message(room.room_id, info_message)
|
||||||
views = video.views
|
logging.info("Sent YouTube video information to the room")
|
||||||
author = video.author
|
break
|
||||||
info_message = f"""**🎬🎝 Title:** {title} | **Length**: {length} minutes| **Views:** {views} | **Description:** {description}"""
|
else:
|
||||||
await bot.api.send_markdown_message(room.room_id, info_message)
|
logging.info("Retrying...")
|
||||||
logging.info("Sent YouTube video information to the room")
|
retry_count -= 1
|
||||||
except Exception as e:
|
await asyncio.sleep(1) # wait for 1 second before retrying
|
||||||
logging.error(f"Error fetching YouTube video information: {str(e)}")
|
else:
|
||||||
# await bot.api.send__message(room.room_id, "Error fetching YouTube video information.")
|
logging.error("Failed to fetch YouTube video information after retries")
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user