Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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)