async def remind_me(self, ctx, duration: Duration, *, reminder: ReminderText): """remind_me_help""" if duration.unit is None: parts = reminder.split(" ") duration.unit = parts[0] reminder = " ".join(parts[1:]) duration_seconds = duration.to_seconds(ctx) if duration_seconds <= 0: await MessageUtils.send_to(ctx, "NO", "reminder_time_travel") return if ctx.guild is not None: message = f'{Emoji.get_chat_emoji("QUESTION")} {Translator.translate("remind_question", ctx)}' async def timeout(): if m is not None: await m.edit(content=MessageUtils.assemble( ctx, 'NO', 'command_canceled'), view=None) m = await ctx.send( message, view=ReminderView( guild_id=ctx.guild.id if ctx.guild is not None else "@me", reminder=reminder, channel_id=ctx.channel.id, user_id=ctx.author.id, message_id=ctx.message.id, duration=duration_seconds, timeout_callback=timeout))
async def remind_me(self, ctx, duration: Duration, *, reminder: ReminderText): """remind_me_help""" if duration.unit is None: parts = reminder.split(" ") duration.unit = parts[0] reminder = " ".join(parts[1:]) duration_seconds = duration.to_seconds(ctx) if duration_seconds <= 0: await MessageUtils.send_to(ctx, "NO", "reminder_time_travel") return if ctx.guild is not None: message = f'{Emoji.get_chat_emoji("QUESTION")} {Translator.translate("remind_question", ctx)}' one = Emoji.get_emoji("1") two = Emoji.get_emoji("2") no = Emoji.get_emoji("NO") embed = Embed(description=f""" {Emoji.get_chat_emoji("1")} {Translator.translate("remind_option_here", ctx)} {Emoji.get_chat_emoji("2")} {Translator.translate("remind_option_dm", ctx)} {Emoji.get_chat_emoji("NO")} {Translator.translate("remind_option_cancel", ctx)} """) m = await ctx.send(message, embed=embed) for e in [one, two, no]: await m.add_reaction(e) try: reaction, user = await ctx.bot.wait_for( 'reaction_add', timeout=30, check=lambda reaction, user: user == ctx.message.author and reaction.emoji in [one, two, no]) except asyncio.TimeoutError: await MessageUtils.send_to(ctx, "NO", "confirmation_timeout", timeout=30) return else: if reaction.emoji == no: await MessageUtils.send_to(ctx, "NO", "command_canceled") return else: dm = reaction.emoji == two finally: await m.delete() else: dm = True Reminder.create(user_id=ctx.author.id, channel_id=ctx.channel.id, dm=dm, to_remind=await Utils.clean(reminder, markdown=False), time=time.time() + duration_seconds, status=ReminderStatus.Pending) mode = "dm" if dm else "here" await MessageUtils.send_to(ctx, "YES", f"reminder_confirmation_{mode}", duration=duration.length, duration_identifier=duration.unit)
async def snooze(self, ctx, duration: Duration = DurationHolder(5, 'm')): """remind_snooze_help""" duration_seconds = duration.to_seconds(ctx) if duration_seconds <= 0: await MessageUtils.send_to(ctx, "NO", "reminder_time_travel") return if isinstance(ctx.channel, DMChannel): target_criteria = Q(dm=1, status=ReminderStatus.DeliveredFirst) | Q(dm=0, status=ReminderStatus.DeliveredAlternative) else: target_criteria = Q(channel_id=ctx.channel.id) & (Q(dm=0, status=ReminderStatus.DeliveredFirst) | Q(dm=1, status=ReminderStatus.DeliveredAlternative)) target_reminder = await Reminder.get_or_none(Q(user_id=ctx.author.id) & target_criteria).order_by('-time').limit(1) if target_reminder is None: await MessageUtils.send_to(ctx, "NO", "reminder_not_found") return new_reminder = target_reminder.clone() new_reminder._custom_generated_pk = False new_reminder.status = ReminderStatus.Pending new_reminder.send = datetime.now().timestamp() new_reminder.time = time.time() + duration_seconds await new_reminder.save() if duration_seconds <= 10: self.handling.add(new_reminder.id) self.bot.loop.create_task( self.run_after(duration_seconds, self.deliver(new_reminder))) mode = "dm" if new_reminder.dm else "here" await MessageUtils.send_to(ctx, "YES", f"reminder_confirmation_{mode}", duration=duration.length, duration_identifier=duration.unit)
async def remind_me(self, ctx, duration: Duration, *, reminder: ReminderText): """remind_me_help""" if duration.unit is None: parts = reminder.split(" ") duration.unit = parts[0] reminder = " ".join(parts[1:]) duration_seconds = duration.to_seconds(ctx) if duration_seconds <= 0: await MessageUtils.send_to(ctx, "NO", "reminder_time_travel") return if ctx.guild is not None: message = f'{Emoji.get_chat_emoji("QUESTION")} {Translator.translate("remind_question", ctx)}' one = str(Emoji.get_emoji("1")) two = str(Emoji.get_emoji("2")) no = str(Emoji.get_emoji("NO")) embed = Embed(description=f""" {Emoji.get_chat_emoji("1")} {Translator.translate("remind_option_here", ctx)} {Emoji.get_chat_emoji("2")} {Translator.translate("remind_option_dm", ctx)} {Emoji.get_chat_emoji("NO")} {Translator.translate("remind_option_cancel", ctx)} """) m = await ctx.send(message, embed=embed) for e in [one, two, no]: await m.add_reaction(e) try: reaction = await ctx.bot.wait_for( 'raw_reaction_add', timeout=30, check=lambda reaction: reaction.user_id == ctx.message. author.id and str(reaction.emoji) in [one, two, no] and reaction.message_id == m.id) except asyncio.TimeoutError: await MessageUtils.send_to(ctx, "NO", "confirmation_timeout", timeout=30) return else: if str(reaction.emoji) == no: await MessageUtils.send_to(ctx, "NO", "command_canceled") return else: dm = str(reaction.emoji) == two finally: try: await m.delete() except (NotFound, Forbidden): pass else: dm = True r = await Reminder.create( user_id=ctx.author.id, channel_id=ctx.channel.id, dm=dm, to_remind=await Utils.clean(reminder, markdown=False, links=False, emoji=False), time=time.time() + duration_seconds, send=datetime.now().timestamp(), status=ReminderStatus.Pending, guild_id=ctx.guild.id if ctx.guild is not None else "@me", message_id=ctx.message.id) if duration_seconds <= 10: self.handling[r.id] = self.bot.loop.create_task( self.run_after(duration_seconds, self.deliver(r.id))) mode = "dm" if dm else "here" await MessageUtils.send_to(ctx, "YES", f"reminder_confirmation_{mode}", duration=duration.length, duration_identifier=duration.unit, id=r.id)