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)
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)
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)
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)
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)
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)
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)
async def send_error_message(self, ctx: Context, error: Exception) -> None: await ctx.send(embed=EmbedHelper.from_exception(error))