async def _quote(message, command, silent=False): """Print some quote from quotes database Examples: !quote !quote 1""" if not await Util.check_args_count(message, command, silent, min=1, max=2): return if not bc.config.quotes: return null(await Msg.response(message, "<Quotes database is empty>", silent)) if len(command) == 2: index = await Util.parse_int( message, command[1], f"Second parameter for '{command[0]}' should be an index of quote", silent) if index is None: return else: index = random.choice(list(bc.config.quotes.keys())) if index not in bc.config.quotes.keys(): return null(await Msg.response(message, "Invalid index of quote!", silent)) quote = bc.config.quotes[index] e = DiscordEmbed() e.title("Quote") e.description(quote.message) e.color(random.randint(0x000000, 0xffffff)) e.timestamp(datetime.datetime.strptime(str(quote.timestamp), const.TIMESTAMP_DATETIME_FORMAT)) e.add_field("Index", str(index), True) e.add_field("Author", quote.author if quote.author else "<unknown>", True) e.add_field("Added by", quote.added_by, True) await Msg.response(message, None, silent, embed=e.get())
async def _listreminder(message, command, silent=False): """Print list of reminders Examples: !listreminder !listreminder 5 <- prints only first 5 reminders""" if not await Util.check_args_count( message, command, silent, min=1, max=2): return if len(command) == 2: count = await Util.parse_int( message, command[1], f"Second parameter for '{command[0]}' should be amount of reminders to print", silent) if count is None: return reminders_count = count else: reminders_count = len(bc.config.reminders) reminder_list = [] for index, reminder in bc.config.reminders.items(): rep = f' (repeats every {reminder.repeat_after} {reminder.repeat_interval_measure})' prereminders = f' ({", ".join([str(x) + " min" for x in reminder.prereminders_list])} prereminders enabled)' reminder_list.append(( reminder.time, reminder.message, f"{index} at {reminder.time} " f"{f' in <#{reminder.channel_id}>' if message.channel.id != reminder.channel_id else ''}" f"{rep if reminder.repeat_after else ''}" f"{prereminders if reminder.prereminders_list else ''}")) reminder_list.sort() reminder_list = reminder_list[:reminders_count] embed_color = random.randint(0x000000, 0xffffff) for reminder_chunk in Msg.split_by_chunks( reminder_list, const.DISCORD_MAX_EMBED_FILEDS_COUNT): e = DiscordEmbed() e.title("List of reminders") e.color(embed_color) for rem in reminder_chunk: e.add_field(rem[1], rem[2]) await Msg.response(message, None, silent, embed=e.get())
async def _reminder(message, command, silent=False): """Print information about reminder Example: !reminder 1""" if not await Util.check_args_count( message, command, silent, min=2, max=2): return index = await Util.parse_int( message, command[1], f"Second parameter for '{command[0]}' should be an index of reminder", silent) if index is None: return if index not in bc.config.reminders.keys(): return null(await Msg.response(message, "Invalid index of reminder!", silent)) reminder = bc.config.reminders[index] e = DiscordEmbed() e.title("Reminder info") e.description(reminder.message) e.footer( f"{reminder.author} • {datetime.datetime.strptime(reminder.time, const.REMINDER_DATETIME_FORMAT)}" ) e.add_field("Index", str(index), True) e.add_field("Channel", f"<#{reminder.channel_id}>", True) if reminder.repeat_after: e.add_field( "Repeats every", f"{reminder.repeat_after} {reminder.repeat_interval_measure}", True) e.add_field("Created", reminder.time_created, True) if reminder.prereminders_list: e.add_field( "Pre reminders (in minutes)", ', '.join([str(x) for x in reminder.prereminders_list]), True) if reminder.notes: e.add_field("Notes", reminder.notes, True) await Msg.response(message, None, silent, embed=e.get())