""" Plugin for providing a command to search for YouTube videos in the room. """ import logging import simplematrixbotlib as botlib from youtube_search import YoutubeSearch async def handle_command(room, message, bot, PREFIX, config): """ Asynchronously handles the command to search for YouTube videos in the room. Args: room (Room): The Matrix room where the command was invoked. message (RoomMessage): The message object containing the command. bot (MatrixBot): The Matrix bot instance. PREFIX (str): The command prefix. config (dict): The bot's configuration. Returns: None """ match = botlib.MessageMatch(room, message, bot, PREFIX) if match.is_not_from_this_bot() and match.prefix() and match.command("yt"): args = match.args() if len(args) < 1: await bot.api.send_text_message(room.room_id, "Usage: !yt ") else: search_terms = " ".join(args) logging.info(f"Performing YouTube search for: {search_terms}") results = YoutubeSearch(search_terms, max_results=10).to_dict() if results: output = generate_output(results) await send_collapsible_message(room, bot, output) else: await bot.api.send_text_message(room.room_id, "No results found.") def generate_output(results): """ Generates HTML output for displaying YouTube search results. Args: results (list): A list of dictionaries containing information about YouTube videos. Returns: str: HTML formatted output containing YouTube search results. """ output = "" for video in results: output += f'' output += f'
' output += f'{video["title"]}
' output += f'Length: {video["duration"]} | Views: {video["views"]}
' if video["long_desc"]: output += f'Description: {video["long_desc"]}
' output += "

" return output async def send_collapsible_message(room, bot, content): """ Sends a collapsible message containing YouTube search results to the room. Args: room (Room): The Matrix room where the message will be sent. bot (MatrixBot): The Matrix bot instance. content (str): HTML content to be included in the collapsible message. Returns: None """ message = f'
🍄Funguy ▶YouTube Search🍄
⤵︎Click Here To See Results⤵︎
{content}
' await bot.api.send_markdown_message(room.room_id, message)