示例#1
0
 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'
                              )
示例#2
0
文件: tickets.py 项目: TAG-Epic/bot
 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')
示例#3
0
    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)
示例#4
0
	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()
示例#5
0
 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
示例#6
0
 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