async def tickets_remove(self, ctx, *, user: Member): tchannels = ctx.config.get('tickets.channels') if ctx.channel not in tchannels: return await ctx.error( 'This command can only be ran in ticket channels!') if str(ctx.author.id ) not in ctx.channel.topic and not ctx.author.permissions_in( ctx.channel).manage_channels: return await ctx.error( 'You must own this ticket or have `Manage Channels` permission to remove users' ) if str(user.id) in ctx.channel.topic: return await ctx.error('You cannot remove the ticket author') if not user.permissions_in(ctx.channel).read_messages: return await ctx.error( f'{user} is not here, so how are you gonna remove them? 🤔') if user.permissions_in(ctx.channel).manage_channels: return await ctx.error(f'You cannot remove this user') overwrites = ctx.channel.overwrites overwrites.update({ user: discord.PermissionOverwrite(read_messages=False, send_messages=False) }) await ctx.channel.edit(overwrites=overwrites) return await ctx.success(f'Successfully removed {user} from the ticket' )
async def tickets_remove(self, ctx, *, user: Member): tchannels = self.bot.configs[ctx.guild.id].get('tickets.channels') if ctx.channel not in tchannels: return await ctx.error('This command can only be ran in ticket channels!') if str(ctx.author.id) not in ctx.channel.topic and not ctx.author.permissions_in(ctx.channel).manage_channels: return await ctx.error('You must own this ticket or have `Manage Channels` permission to remove users') if str(user.id) in ctx.channel.topic: return await ctx.error('You cannot remove the ticket author') if not user.permissions_in(ctx.channel).read_messages: return await ctx.error(f'{user} is not here, so how are you gonna remove them? 🤔') if user.permissions_in(ctx.channel).manage_channels: return await ctx.error(f'You cannot remove this user') await ctx.channel.set_permissions(user, read_messages=False, send_messages=False) return await ctx.success(f'Successfully removed {user} from the ticket')
async def specs(self, ctx, user: Member = None, flags: flags.FlagParser(remove=bool) = flags.EmptyFlags): user = user if user else ctx.author uspecs = await self.bot.db.fetch('SELECT * FROM specs WHERE uid=$1;', user.id) if not uspecs: return await ctx.error( f'Specs not found for that user. Tell them to fill in this form\n<https://inv.wtf/sk1spec>' ) else: if isinstance(flags, dict) and flags.get( 'remove', False) and ctx.author.guild_permissions.manage_messages: con = await self.bot.db.acquire() async with con.transaction(): query = 'DELETE FROM specs WHERE uid=$1;' await self.bot.db.execute(query, user.id) await self.bot.db.release(con) await user.remove_roles( self.guild.get_role(595626786549792793), reason=f'Specs removed by {ctx.author}') return await ctx.success( f'Successfully removed specs for {user}') uspecs = uspecs[0] def escape(text: str): text = discord.utils.escape_markdown(text) text = re.sub(r'<a?:[a-zA-Z0-9\_]+:([0-9]+)>', '', text, 0, re.MULTILINE) return text embed = discord.Embed( color=user.color, timestamp=datetime.datetime.now( datetime.timezone.utc)).set_author( name=str(user), icon_url=user.avatar_url_as(static_format='png', size=2048), url=f'https://inv.wtf/sk1spec').add_field( name='» CPU', value=escape(uspecs['cpu'][:1024]), inline=False).add_field( name='» GPU', value=escape(uspecs['gpu'][:1024]), inline=False).add_field( name='» RAM', value=escape(uspecs['ram'][:1024]), inline=False).add_field( name='» Operating System', value=escape(uspecs['os'][:1024]), inline=False) return await ctx.send(embed=embed)
async def warn(self, ctx, user: Member = None, *, reason = None): """PFXwarn <user> <reason>""" await ctx.trigger_typing() await ctx.message.delete() if not user: return await ctx.send("You must specify a user") if not reason: return await ctx.send("You must specify a reason") if user.id == self.bot.user.id: return await ctx.send("<a:fireFailed:603214400748257302> I cannot warn myself, you fool.") try: try: await user.send(f'You were warned in {discord.utils.escape_mentions(discord.utils.escape_markdown(ctx.guild.name))} for "{reason}"') nodm = False await ctx.send(f'<a:fireSuccess:603214443442077708> **{discord.utils.escape_mentions(discord.utils.escape_markdown(str(user)))}** has been warned.') except discord.Forbidden: nodm = True await ctx.send(f'<a:fireWarning:660148304486727730> **{discord.utils.escape_mentions(discord.utils.escape_markdown(str(user)))}** was not warned due to having DMs off. The warning has been logged.') logchannels = self.bot.get_cog("Settings").logchannels logid = logchannels[ctx.guild.id] if ctx.guild.id in logchannels else None if logid: logch = ctx.guild.get_channel(logid['modlogs']) if logch: embed = discord.Embed(color=discord.Color(15105570), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Warn | {user}', icon_url=str(user.avatar_url_as(static_format='png', size=2048))) embed.add_field(name='User', value=f'{user}({user.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.add_field(name='Reason', value=reason, inline=False) if nodm: embed.add_field(name='Error', value='Unable to send DM, user was not warned.', inline=False) embed.set_footer(text=f'User ID: {user.id} | Mod ID: {ctx.author.id}') try: await logch.send(embed=embed) except Exception: pass except Exception: return con = await self.bot.db.acquire() async with con.transaction(): query = 'INSERT INTO modlogs (\"gid\", \"uid\", \"reason\", \"date\", \"type\", \"caseid\") VALUES ($1, $2, $3, $4, $5, $6);' await self.bot.db.execute(query, ctx.guild.id, user.id, reason, datetime.datetime.utcnow().strftime('%d/%m/%Y @ %I:%M:%S %p'), 'warn', datetime.datetime.utcnow().timestamp() + user.id) await self.bot.db.release(con) await self.loadwarns() await self.loadmodlogs()
async def rolepersist(self, ctx, member: Member, *, role: Role): '''PFXrolepersist <member> <role>''' if ctx.guild.id not in self.rolepersists: self.rolepersists[ctx.guild.id] = {} if member.id not in self.rolepersists[ctx.guild.id]: con = await self.bot.db.acquire() async with con.transaction(): query = 'INSERT INTO rolepersist (\"gid\", \"rid\", \"uid\") VALUES ($1, $2, $3);' await self.bot.db.execute(query, ctx.guild.id, role.id, member.id) await self.bot.db.release(con) try: self.rolepersists[ctx.guild.id][member.id] = {"role": role.id} except KeyError: self.rolepersists[ctx.guild.id] = {} self.rolepersists[ctx.guild.id][member.id] = {"role": role.id} if role not in member.roles: try: await member.add_roles(role, reason='Role Persist') except Exception: pass await ctx.send( f'<a:fireSuccess:603214443442077708> **{discord.utils.escape_mentions(discord.utils.escape_markdown(str(member)))}** will keep the role {discord.utils.escape_mentions(discord.utils.escape_markdown(role.name))}' ) logchannels = self.bot.get_cog("Settings").logchannels logid = logchannels[ ctx.guild.id] if ctx.guild.id in logchannels else None if logid: logch = ctx.guild.get_channel(logid['modlogs']) if logch: embed = discord.Embed(color=discord.Color.green(), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Role Persist | {member}', icon_url=str( member.avatar_url_as( static_format='png', size=2048))) embed.add_field(name='User', value=f'{member}({member.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.add_field(name='Role', value=role.mention, inline=False) embed.set_footer( text= f'User ID: {member.id} | Mod ID: {ctx.author.id} | Role ID: {role.id}' ) try: await logch.send(embed=embed) except Exception: pass return else: current = self.rolepersists[ctx.guild.id][member.id]['role'] if role.id != current: con = await self.bot.db.acquire() async with con.transaction(): query = 'UPDATE rolepersist SET rid = $1 WHERE gid = $2 AND uid = $3;' await self.bot.db.execute(query, role.id, ctx.guild.id, member.id) await self.bot.db.release(con) self.rolepersists[ctx.guild.id][member.id] = {"role": role.id} try: crole = discord.utils.get(ctx.guild.roles, id=current) await member.remove_roles(crole, reason='Role Persist') await member.add_roles(role, reason='Role Persist Updated') except Exception: pass await ctx.send( f'<a:fireSuccess:603214443442077708> **{discord.utils.escape_mentions(discord.utils.escape_markdown(str(member)))}** will keep the role {discord.utils.escape_mentions(discord.utils.escape_markdown(role.name))}' ) logchannels = self.bot.get_cog("Settings").logchannels logid = logchannels[ ctx.guild.id] if ctx.guild.id in logchannels else None if logid: logch = ctx.guild.get_channel(logid['modlogs']) if logch: embed = discord.Embed( color=discord.Color.green(), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Role Persist | {member}', icon_url=str( member.avatar_url_as( static_format='png', size=2048))) embed.add_field(name='User', value=f'{member}({member.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.add_field(name='Role', value=role.mention, inline=False) embed.set_footer( text= f'User ID: {member.id} | Mod ID: {ctx.author.id} | Role ID: {role.id}' ) try: await logch.send(embed=embed) except Exception: pass return con = await self.bot.db.acquire() async with con.transaction(): query = 'DELETE FROM rolepersist WHERE gid = $1 AND uid = $2;' await self.bot.db.execute(query, ctx.guild.id, member.id) await self.bot.db.release(con) try: self.rolepersists[ctx.guild.id].pop(member.id, None) await member.remove_roles(role, reason='Role Persist') except Exception: pass await ctx.send( f'<a:fireSuccess:603214443442077708> **{discord.utils.escape_mentions(discord.utils.escape_markdown(str(member)))}** will no longer keep the role {discord.utils.escape_mentions(discord.utils.escape_markdown(role.name))}' ) logchannels = self.bot.get_cog("Settings").logchannels logid = logchannels[ ctx.guild.id] if ctx.guild.id in logchannels else None if logid: logch = ctx.guild.get_channel(logid['modlogs']) if logch: embed = discord.Embed(color=discord.Color.red(), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Role Persist Removed | {member}', icon_url=str( member.avatar_url_as( static_format='png', size=2048))) embed.add_field(name='User', value=f'{member}({member.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.set_footer( text= f'User ID: {member.id} | Mod ID: {ctx.author.id} | Role ID: {role.id}' ) try: await logch.send(embed=embed) except Exception: pass return
async def rolepersist(self, ctx, member: Member, *, role: Role): if ctx.guild.id not in self.rolepersists: self.rolepersists[ctx.guild.id] = {} if role.position >= ctx.guild.me.top_role.position: return await ctx.error( 'That role is higher than my top role, I cannot persist it to anyone' ) if role.managed: return await ctx.error( 'That role is managed by an integration, I cannot persist it to anyone' ) if member.id not in self.rolepersists[ctx.guild.id]: con = await self.bot.db.acquire() async with con.transaction(): query = 'INSERT INTO rolepersist (\"gid\", \"rid\", \"uid\") VALUES ($1, $2, $3);' await self.bot.db.execute(query, ctx.guild.id, role.id, member.id) await self.bot.db.release(con) try: self.rolepersists[ctx.guild.id][member.id] = {"role": role.id} except KeyError: self.rolepersists[ctx.guild.id] = {} self.rolepersists[ctx.guild.id][member.id] = {"role": role.id} if role not in member.roles: try: await member.add_roles(role, reason='Role Persist') except Exception: pass await ctx.success( f'**{discord.utils.escape_mentions(discord.utils.escape_markdown(str(member)))}** will keep the role {discord.utils.escape_mentions(discord.utils.escape_markdown(role.name))}' ) logch = self.bot.configs[ctx.guild.id].get('log.moderation') if logch: embed = discord.Embed(color=discord.Color.green(), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Role Persist | {member}', icon_url=str( member.avatar_url_as(static_format='png', size=2048))) embed.add_field(name='User', value=f'{member}({member.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.add_field(name='Role', value=role.mention, inline=False) embed.set_footer( text= f'User ID: {member.id} | Mod ID: {ctx.author.id} | Role ID: {role.id}' ) try: await logch.send(embed=embed) except Exception: pass return else: current = self.rolepersists[ctx.guild.id][member.id]['role'] if role.id != current: con = await self.bot.db.acquire() async with con.transaction(): query = 'UPDATE rolepersist SET rid = $1 WHERE gid = $2 AND uid = $3;' await self.bot.db.execute(query, role.id, ctx.guild.id, member.id) await self.bot.db.release(con) self.rolepersists[ctx.guild.id][member.id] = {"role": role.id} try: crole = discord.utils.get(ctx.guild.roles, id=current) await member.remove_roles(crole, reason='Role Persist') await member.add_roles(role, reason='Role Persist Updated') except Exception: pass await ctx.success( f'**{discord.utils.escape_mentions(discord.utils.escape_markdown(str(member)))}** will keep the role {discord.utils.escape_mentions(discord.utils.escape_markdown(role.name))}' ) logch = self.bot.configs[ctx.guild.id].get('log.moderation') if logch: embed = discord.Embed(color=discord.Color.green(), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Role Persist | {member}', icon_url=str( member.avatar_url_as( static_format='png', size=2048))) embed.add_field(name='User', value=f'{member}({member.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.add_field(name='Role', value=role.mention, inline=False) embed.set_footer( text= f'User ID: {member.id} | Mod ID: {ctx.author.id} | Role ID: {role.id}' ) try: await logch.send(embed=embed) except Exception: pass return con = await self.bot.db.acquire() async with con.transaction(): query = 'DELETE FROM rolepersist WHERE gid = $1 AND uid = $2;' await self.bot.db.execute(query, ctx.guild.id, member.id) await self.bot.db.release(con) try: self.rolepersists[ctx.guild.id].pop(member.id, None) await member.remove_roles(role, reason='Role Persist') except Exception: pass await ctx.success( f'**{discord.utils.escape_mentions(discord.utils.escape_markdown(str(member)))}** will no longer keep the role {discord.utils.escape_mentions(discord.utils.escape_markdown(role.name))}' ) logch = self.bot.configs[ctx.guild.id].get('log.moderation') if logch: embed = discord.Embed(color=discord.Color.red(), timestamp=datetime.datetime.utcnow()) embed.set_author(name=f'Role Persist Removed | {member}', icon_url=str( member.avatar_url_as(static_format='png', size=2048))) embed.add_field(name='User', value=f'{member}({member.id})', inline=False) embed.add_field(name='Moderator', value=ctx.author.mention, inline=False) embed.set_footer( text= f'User ID: {member.id} | Mod ID: {ctx.author.id} | Role ID: {role.id}' ) try: await logch.send(embed=embed) except Exception: pass return