""" This plugin provides a command to get the current date """ # plugins/date.py import datetime import logging import simplematrixbotlib as botlib async def handle_command(room, message, bot, prefix, config): """ Function to handle the !date command. 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) if match.is_not_from_this_bot() and match.prefix() and match.command("date"): logging.info("Fetching current date and time") current_datetime = datetime.datetime.now() # Extract individual date components day_of_week = current_datetime.strftime("%A") date_of_month = current_datetime.strftime("%d") # Day with leading zero month = current_datetime.strftime("%B") year = current_datetime.strftime("%Y") time = current_datetime.strftime("%I:%M:%S %p") # Format date with ordinal suffix date_with_ordinal = f"{date_of_month}{get_ordinal_suffix(date_of_month)}" # Construct the message date_message = f"Date: **{day_of_week}** the {date_with_ordinal}, **{month} {year}**. \nTime: **⏰ {time}**" await bot.api.send_markdown_message(room.room_id, date_message) logging.info("Sent current date and time to the room") def get_ordinal_suffix(day_of_month): """ Helper function to get the ordinal suffix for a day number. Args: day_of_month (str): The day number as a string (e.g., "1", "13") Returns: str: The ordinal suffix (e.g., "st", "th", "nd") """ if day_of_month.endswith("11") or day_of_month.endswith("12") or day_of_month.endswith("13"): return "th" elif day_of_month.endswith("1") or day_of_month.endswith("3"): return "st" elif day_of_month.endswith("2"): return "nd" else: return "th"