import datetime from edmond.plugin import Plugin class PlaylistOfTheDayPlugin(Plugin): """Collect music links from other platforms. Plugins that want to feed the playlist must do so by calling the add_link method of the plugin. Later this plugin may feed its playlist using links unhandled by other, more specialized plugins (bandcamp, soundcloud, …). The current behaviour for the playlist is that links are added for a same day, so the date at which the latest link was added is also stored. If a link is the first to be added on a new day (by using this date as reference), the previous list is emptied. But if the list is requested even if no links have been posted today and the playlist is therefore outdated, it is still posted by the bot, along with a message explaining that it's not the current day's playlist. Note that the playlist itself is just of bunch of lines, which should of course contain links, but can also contain titles and other metadata. """ REQUIRED_CONFIGS = ["commands"] DATE_KEY = "date_of_latest_link" PLAYLIST_KEY = "current_playlist" def __init__(self, bot): super().__init__(bot) def on_pubmsg(self, event): if not self.should_handle_command(event.arguments[0], no_content=True): return False # self.post_playlist(event.target) return True def add_line(self, line: str) -> None: """Add this line to the current playlist.""" today = datetime.date.today() last_update_str = self.get_storage_value(self.DATE_KEY) if last_update_str: last_update_date = datetime.date.fromisoformat(last_update_str) else: last_update_date = today if last_update_date == today: current_playlist: list[str] = self.get_storage_value( self.PLAYLIST_KEY, default=[], ) current_playlist.append(line) else: current_playlist = [line] self.set_storage_value( self.PLAYLIST_KEY, current_playlist, skip_save=True, # save one write ) self.set_storage_value( self.DATE_KEY, today.isoformat(), ) # def post_playlist(self): # pass