async def update_event(self, ctx, msg, event: TimedEvent, seconds=10): event = self.get_event(event) while seconds > 0: event.update_without_api() embed = await self.get_event_embed(ctx, event) await msg.edit(embed=embed) seconds -= 1 await asyncio.sleep(1)
async def convert(self, ctx: commands.Context, argument): for url in TimedEvent.urls: if argument.lower() in url: return TimedEvent(url) raise commands.BadArgument( "Event not found. Events: " + ", ".join([event.event_name for event in ctx.bot.events]))
async def fetch_event_data(self): if self.bot.events and len(self.bot.events) == len(TimedEvent.urls): for event in self.bot.events: await event.set_data() else: for event in TimedEvent.urls: event = TimedEvent(event) await event.set_data() if event not in self.bot.events: self.bot.events.append(event)
async def event(self, ctx, arg: EventConverter = None): if arg is None: events = [] for event_url in TimedEvent.urls: events.append(self.get_event(TimedEvent(event_url))) embed = await self.get_events_embed(ctx, events) msg = await ctx.send(embed=embed) await self.update_events(ctx, msg, events) return embed = await self.get_event_embed(ctx, arg) msg = await ctx.send(embed=embed) await self.update_event(ctx, msg, arg)
async def reminder_loop(self): docs = self.reminders.find({}) async for doc in docs: event = self.get_event(TimedEvent(doc["event"])) if not event.event_on: return estimate = event.estimate - 300 #minutes before if estimate < time.time(): user = self.bot.get_user(doc["id"]) if user: await user.send(f"This is a reminder for {event.event_name}. The event will be in 5 minutes, so get yourself ready. The reminder has been removed.") await self.reminders.delete_one(doc)
async def list_reminder(self, ctx, user: discord.abc.User=None): if not user: user = ctx.author embed = Embed(self.bot, ctx.author, title=f"{str(user)} reminders") await embed.set_made_with_love_footer() docs = self.reminders.find({"id" : user.id}) async for doc in docs: event = self.get_event(TimedEvent(doc["event"])) event_in = str(event.event_in - timedelta(minutes=5))[:-7] if event.event_in.microseconds else event.event_in embed.add_field(name=f"Reminder for {event.event_name}", value=f"Will be reminded in {event_in}") if len(embed.fields) > 0: await ctx.send(embed=embed) else: await ctx.send(f"{str(user)} has no reminders set.")