Ejemplo n.º 1
0
    async def send_reminder(
        self,
        ctx: Context,
        msg: Message,
        original_time: str,
        time: datetime,
        *,
        content: str,
    ):

        description = textwrap.dedent(f"""
        Your reminder from [{get_str_time_mapping(original_time)['amount']} {get_str_time_mapping(original_time)['unit']}]({msg.jump_url}) ago has arrived:
        ```
        {content}
        ```
        """)

        embed = EmbedHelper(
            title="Your reminder has arrived",
            description=description,
            timestamp=datetime.utcnow(),
        )

        await sleep_until(time)
        return await ctx.reply(embed=embed)
Ejemplo n.º 2
0
    async def _user(self,
                    ctx: Context,
                    user: Union[discord.Member, discord.User] = None):
        """Sends info related to the user."""

        # TODO: Add comments

        user = user or ctx.author

        created = convert_date(user.created_at)
        joined = convert_date(user.joined_at)

        roles = user.roles[1:]

        value = textwrap.dedent(f"""
                    Joined At: {joined}
                    Roles: {', '.join(r.mention for r in reversed(roles))}
                """)

        embed = EmbedHelper(title=f"{str(user).title()}'s Info",
                            description=textwrap.dedent(f"""
                            **User:** {user.mention}
                            **ID:** {user.id}
                            **Created At:** {created}
                        """),
                            thumbnail_url=user.avatar_url,
                            fields=[{
                                "name": "**Member Info**",
                                "value": value
                            }])

        await ctx.send(embed=embed)
Ejemplo n.º 3
0
    async def _log_channel(self, ctx: Context,
                           channel: discord.TextChannel) -> None:
        """Sets the logging channel for your server."""

        await ctx.update_guild_config(log_channel=channel.id)
        embed = EmbedHelper(
            description=
            f"**✅ Logging channel has been set to {channel.mention}.**")
        await ctx.send(embed=embed)
Ejemplo n.º 4
0
    async def tempban(
        self,
        ctx: Context,
        member: discord.Member,
        length: CustomTimeConverter,
        *,
        reason="No Reason Provided",
    ) -> None:
        """Temperarily ban this user for the time provided."""

        curtime = datetime.now()
        expires = curtime + length
        expires = convert_date(expires)

        description = textwrap.dedent(
            f"""
                                    **ID:** {member.id}
                                    **Bot:** {member.bot}
                                    **Reason:** {reason.title()}
                                    **Length:** {length}
                                    **Expires:** {expires}
                                        """
        )

        embed = EmbedHelper(
            title=f"Banning {member}",
            description=description,
            footer_text=f"Banned by {ctx.author}",
            footer_url=ctx.author.avatar_url,
            timestamp=curtime,
            thumbnail_url=member.avatar_url,
        )

        await ctx.send(embed=embed)

        await self.bot.db.execute(
            """INSERT INTO Cases(id, guildid, userid, modid, username, modname, case_type, created_at, expires_at, case_data)
            VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)""",
            next(self.bot.idgen),
            ctx.guild.id,
            member.id,
            ctx.author.id,
            str(member),
            str(ctx.author),
            "tempban",
            curtime,
            expires,
            reason,
        )

        await member.ban(reason=reason)
Ejemplo n.º 5
0
    async def _ban(
        self,
        ctx: Context,
        member: discord.Member,
        *,
        reason: str = "No Reason Provided",
    ) -> None:
        """Permanently ban the member from the server."""

        description = textwrap.dedent(
            f"""
                                    **ID:** {member.id}
                                    **Bot:** {member.bot}
                                    **Reason:** {reason.title()}
                                    **Length:** Permanent
                                    **Expires:** Never
                                        """
        )

        curtime = datetime.now()

        embed = EmbedHelper(
            title=f"Banning {member}",
            description=description,
            footer_text=f"Banned by {ctx.author}",
            footer_url=ctx.author.avatar_url,
            timestamp=curtime,
            thumbnail_url=member.avatar_url,
        )

        await ctx.send(embed=embed)

        await self.bot.db.execute(
            """INSERT INTO Cases(id, guildid, userid, modid, username, modname, case_type, created_at, case_data)
            VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)""",
            next(self.bot.idgen),
            ctx.guild.id,
            member.id,
            ctx.author.id,
            str(member),
            str(ctx.author),
            "ban",
            curtime,
            reason,
        )

        await member.ban(reason=reason)
Ejemplo n.º 6
0
    async def remind(self, ctx: Context, length: str, *, content: str):
        time = await CustomTimeConverter.convert(self, ctx,
                                                 length) + datetime.utcnow()

        description = textwrap.dedent(f"""
                                    Your reminder will arrive in {get_str_time_mapping(length)['amount']} {get_str_time_mapping(length)['unit']}(s) with the following content:
                                    ```
                                    {content}
                                    ```
                                    """)

        embed = EmbedHelper(
            title="Reminder Created",
            description=description,
            timestamp=datetime.utcnow(),
        )

        msg = await ctx.send(embed=embed)

        await self.send_reminder(ctx, msg, length, time, content=content)
Ejemplo n.º 7
0
    async def _guild(self, ctx: Context):
        """Sends information on the guild the command was invoked in."""
        guild = ctx.guild
        owner = guild.owner
        created = convert_date(guild.created_at)

        num_roles = len(guild.roles)
        emojis = len(guild.emojis)
        members = guild.members

        presences = {'online': 0, 'offline': 0, 'idle': 0, 'dnd': 0}

        member_type = {'user': 0, 'staff': 0, 'bot': 0}

        for member in members:
            presences[str(member.status)] += 1
            member_type[('user', 'bot')[member.bot]] += 1
            if (member.guild_permissions.ban_members
                    or member.guild_permissions.kick_members
                    or member.guild_permissions.manage_messages):
                member_type['staff'] += 1

        online, offline, idle, dnd = presences.values()
        users, staff, bots = member_type.values()

        value2 = textwrap.dedent(f"""
            Online: {online}
            Offline: {offline}
            Idle: {idle}
            DnD: {dnd}
            """)

        value1 = textwrap.dedent(f"""
            Members: {len(members)}
            Users: {users}
            Staff: {staff}
            Bots: {bots}
            """)

        value3 = textwrap.dedent(f"""
                                Category Channels: {len(guild.categories)}
                                Voice Channels: {len(guild.voice_channels)}
                                Text Channels: {len(guild.text_channels)}
                                """)

        embed = EmbedHelper(
            title=f"{guild.name.title()}'s Info",
            timestamp=datetime.utcnow(),
            description=textwrap.dedent(f"""
                            **Owner:** {owner.mention}
                            **Created At:** {created}
                            **Emojis:** {emojis}
                            **Roles:** {num_roles}
                                    """),
            thumbnail_url=guild.icon_url,
            footer_text=f"Command Invoked by {ctx.author}",
            footer_url=ctx.author.avatar_url,
            fields=[{
                "name": f"**Member Count:**",
                "value": value1
            }, {
                "name": "**Presences**",
                "value": value2
            }, {
                "name": f"**Total Channel Count:** {len(guild.channels)}",
                "value": value3,
                "inline": False
            }])

        await ctx.send(embed=embed)
Ejemplo n.º 8
0
 async def send_error_message(self, ctx: Context, error: Exception) -> None:
     await ctx.send(embed=EmbedHelper.from_exception(error))