コード例 #1
0
ファイル: Misc.py プロジェクト: Helloman892/Avicebron
 async def assigncustomrole(self, ctx, member, *, rolename):
     """Connects a role to a member so they can use color(), as so: .customrole @member rolename"""
     member = get_user(ctx.message, member)
     if member:
         if ctx.author.top_role <= member.top_role:
             if ctx.author.id != member.id:
                 return await ctx.send(
                     "You cannot assign a custom role to {}!".format(member)
                 )
         role = discord.utils.get(ctx.guild.roles, name=rolename)
         if role:
             self.role_db.cursor().execute(
                 "CREATE TABLE IF NOT EXISTS roles (userid INT PRIMARY KEY, roleid INT)"
             )
             exists = self.role_db_cursor.execute(
                 "SELECT roleid FROM roles WHERE userid={}".format(
                     member.id)).fetchone()
             if exists:
                 return await ctx.send("Member already has custom role")
             self.role_db.cursor().execute("INSERT INTO roles VALUES(?, ?)",
                                           (member.id, role.id))
             self.role_db.commit()
             await ctx.send("Added role {} to member {}".format(
                 role.name, member.name))
         else:
             await ctx.send("Invalid role name")
     else:
         await ctx.send("Invalid member")
コード例 #2
0
ファイル: Misc.py プロジェクト: Helloman892/Avicebron
 async def removecustomrole(self, ctx, member):
     """Removes custom role from member, if any exists"""
     member = get_user(ctx.message, member)
     if member:
         if ctx.author.top_role <= member.top_role:
             if ctx.author.id != member.id:
                 return await ctx.send(
                     "You cannot remove a custom role from {}!".format(
                         member))
         table = self.role_db_cursor.execute(
             "SELECT name FROM sqlite_master WHERE type='table' AND name = 'roles'"
         ).fetchone()
         if table:
             roleid = self.role_db_cursor.execute(
                 "SELECT roleid FROM roles WHERE userid={}".format(
                     member.id)).fetchone()
             if roleid:
                 self.role_db_cursor.execute(
                     "DELETE from roles WHERE userid={}".format(member.id))
                 self.role_db.commit()
                 role = discord.utils.get(ctx.guild.roles, id=roleid[0])
                 if role:
                     await member.remove_roles(role)
                     await role.delete()
                 else:
                     await ctx.send("Role not found")
                 await ctx.send("Removed custom role")
             else:
                 await ctx.send("Member has no custom roles")
         else:
             await ctx.send("No custom roles have been added yet")
     else:
         await ctx.send("Invalid member")
コード例 #3
0
ファイル: Moderation.py プロジェクト: rsxRi/Avicebron
    async def delwarn(self, ctx, member, warn):
        """
        Revoke a specific warn for a member
        Usage: [p]delwarn <mention, ID, or name> <warn #>
        """
        member = get_user(ctx.message, member)
        if member:
            self.warn_db_cursor.execute(
                "UPDATE _{} SET revoked = 1 WHERE key={}".format(
                    member.id, warn))
            await ctx.send("Warn {} for {} cleared!".format(warn, member))
            if self.log_channel:
                embed = discord.Embed()
                embed.color = discord.Color.teal()
                embed.set_author(name=str(ctx.author) + self.executed,
                                 icon_url=ctx.message.author.avatar_url)
                embed.add_field(name="Action type",
                                value="Delete Warn",
                                inline=False)
                embed.add_field(name="Target",
                                value="{} ({})".format(member.mention, member),
                                inline=False)
                embed.add_field(name="Warn revoked", value=warn, inline=False)
                await self.log_channel.send(embed=embed)

        else:
            await ctx.send("Please enter a valid member!")
コード例 #4
0
ファイル: Moderation.py プロジェクト: rsxRi/Avicebron
    async def clearwarns(self, ctx, member):
        """
        Clear warns for a member permanently
        Usage: [p]clearwarns <member>
        """
        member = get_user(ctx.message, member)
        if member == ctx.author:
            await ctx.send("You can't clear your own warns!")
        elif member.top_role >= ctx.message.author.top_role:
            await ctx.send("You can't clear this member's warns!")
        elif member:
            self.warn_db_cursor.execute("DROP TABLE IF EXISTS _{}".format(
                member.id))
            await ctx.send("Warns for {} cleared!".format(member))
            if self.log_channel:
                embed = discord.Embed()
                embed.color = discord.Color.green()
                embed.set_author(name=str(ctx.author) + self.executed,
                                 icon_url=ctx.message.author.avatar_url)
                embed.add_field(name="Action type",
                                value="Clearwarns",
                                inline=False)
                embed.add_field(name="Target",
                                value="{} ({})".format(member.mention, member),
                                inline=False)
                await self.log_channel.send(embed=embed)

        else:
            await ctx.send("Please mention a valid member!")
コード例 #5
0
ファイル: Moderation.py プロジェクト: rsxRi/Avicebron
 async def listwarns(self, ctx, member):
     """
     List warns for a specified member
     Usage: [p]listwarns <mention, ID, or name>
     """
     member = get_user(ctx.message, member)
     if member:
         exists = self.warn_db_cursor.execute(
             "SELECT name FROM sqlite_master WHERE type='table' AND name='_{}'"
             .format(member.id)).fetchone()
         if exists:
             warns = self.warn_db_cursor.execute("SELECT * FROM _{}".format(
                 str(member.id))).fetchall()
             embed = discord.Embed(title="Warns for {}".format(member))
             for timestamp, invoker, reason, revoked, key in warns:
                 invoker = ctx.guild.get_member(int(invoker))
                 if not revoked:
                     embed.add_field(name="{}: {}".format(key, timestamp),
                                     value="{}\nWarned by: {}".format(
                                         reason, invoker),
                                     inline=False)
                 else:
                     embed.add_field(name="~~{}: {}~~".format(
                         key, timestamp),
                                     value="~~{}\nWarned by: {}~~".format(
                                         reason, invoker),
                                     inline=False)
             await ctx.send(embed=embed)
         else:
             await ctx.send("No warns found!")
     else:
         await ctx.send("Please enter a valid member!")
コード例 #6
0
ファイル: Moderation.py プロジェクト: rsxRi/Avicebron
    async def ban(self, ctx, member, *, reason=""):
        """
        Ban the specified member
        Usage: [p]ban <mention, ID, or name> [reason]
        """
        try:
            member = get_user(ctx.message, member)
            if member:
                if ctx.author.top_role <= member.top_role:
                    return await ctx.send("You cannot ban {}!".format(member))
                try:
                    await member.send(
                        "You have been banned from {}! Reason: {}".format(
                            ctx.guild.name,
                            reason if reason else "No reason provided"))
                except discord.errors.Forbidden:
                    print("DMing user failed.")
                await member.ban(
                    reason=reason +
                    "\nResponsible moderator: {}".format(ctx.author),
                    delete_message_days=0)
                await ctx.send("{} has been banned".format(member))
                if self.log_channel:
                    channel = ctx.channel
                    embed = discord.Embed()
                    embed.color = discord.Color.dark_red()
                    embed.set_author(name=str(ctx.author) + self.executed,
                                     icon_url=ctx.author.avatar_url)
                    embed.add_field(name="Action type",
                                    value="Ban",
                                    inline=False)
                    embed.add_field(name="Target",
                                    value="{} ({})".format(
                                        member.mention, member),
                                    inline=False)
                    embed.add_field(
                        name="Reason",
                        value=reason if reason else "No reason provided",
                        inline=False)
                    embed.add_field(name="In",
                                    value="{} ({})".format(
                                        channel.mention, channel),
                                    inline=False)
                    await self.log_channel.send(embed=embed)

            else:
                await ctx.send("Please enter a valid member!")
        except discord.errors.Forbidden:
            await ctx.send("That member cannot be banned!")
コード例 #7
0
ファイル: Moderation.py プロジェクト: rsxRi/Avicebron
 async def warn(self, ctx, member, *, reason):
     """
     Warn the specific member.
     Usage: [p]warn <mention, ID, or name> <reason>
     """
     member = get_user(ctx.message, member)
     if member:
         if ctx.author.top_role <= member.top_role:
             return await ctx.send("You cannot warn this member!")
         self.warn_db_cursor.execute(
             "CREATE TABLE IF NOT EXISTS _{} (datetime timestamp, invoker text, reason text, revoked integer, key integer PRIMARY KEY)"
             .format(str(member.id)))
         self.warn_db_cursor.execute("SELECT * FROM _{}".format(
             str(member.id)))
         warns = self.warn_db_cursor.fetchall()
         warncount = 0
         for _, _, _, revoked, _ in warns:
             warncount += revoked
         self.warn_db_cursor.execute(
             "INSERT INTO _{} VALUES (?, ?, ?, 0, {})".format(
                 str(member.id),
                 len(warns) + 1),
             (datetime.datetime.now(), str(ctx.message.author.id), reason))
         self.warn_db.commit()
         await ctx.send("Warned member {}!".format(member))
         try:
             await member.send(
                 "You have been warned on {}! Reason: {}".format(
                     ctx.guild.name, reason))
         except discord.errors.Forbidden:
             print("DMing user failed.")
         if self.log_channel:
             channel = ctx.channel
             embed = discord.Embed()
             embed.color = discord.Color.gold()
             embed.set_author(name=str(ctx.author) + self.executed,
                              icon_url=ctx.message.author.avatar_url)
             embed.add_field(name="Action type", value="Warn", inline=False)
             embed.add_field(name="Target",
                             value="{} ({})".format(member.mention, member),
                             inline=False)
             embed.add_field(name="Reason", value=reason, inline=False)
             embed.add_field(name="In",
                             value="{} ({})".format(channel.mention,
                                                    channel),
                             inline=False)
             await self.log_channel.send(embed=embed)
     else:
         await ctx.send("Please enter a valid member!")
コード例 #8
0
ファイル: Misc.py プロジェクト: rsxRi/Avicebron
 async def createcustomrole(self, ctx, member, *, rolename):
     """Creates a custom role for a member, connecting it to them and enabling them to use colour/color as: .createcustomrole member rolename"""
     member = get_user(ctx.message, member)
     if member:
         if ctx.author.top_role <= member.top_role:
             if ctx.author.id != member.id:
                 return await ctx.send("You cannot create a custom role for {}!".format(member))
         self.role_db.cursor().execute("CREATE TABLE IF NOT EXISTS roles (userid INT PRIMARY KEY, roleid INT)")
         exists = self.role_db_cursor.execute("SELECT * FROM roles WHERE userid={}".format(member.id)).fetchone()
         if exists:
             return await ctx.send("Member already has custom role")
         toprole = member.top_role
         newrole = await ctx.guild.create_role(name=rolename)
         newrole.edit(position=toprole.position+1)
         await member.add_roles(newrole)
         self.role_db.cursor().execute("INSERT INTO roles VALUES(?, ?)", (member.id, newrole.id))
         await ctx.send("Created role!")
コード例 #9
0
ファイル: Moderation.py プロジェクト: ZetaDesigns/Avicebron
    async def kick(self, ctx, member, *, reason=""):
        """
        Kick the specified member
        Usage: [p]kick <mention, ID, or name> [reason]
        """
        try:
            member = get_user(ctx.message, member)
            if member:
                if ctx.author.top_role <= member.top_role:
                    return await ctx.send("You cannot kick {}!".format(member))
                try:
                    await member.send(
                        "You have been kicked from SSSv4stro! Reason: {}".
                        format(reason if reason else "No reason provided"))
                except discord.errors.Forbidden:
                    print("DMing user failed.")
                await member.kick(
                    reason=reason +
                    "\nResponsible moderator: {}".format(ctx.author))
                await ctx.send("{} has been kicked".format(member))
                if self.log_channel:
                    embed = discord.Embed()
                    embed.set_author(name=str(ctx.message.author) +
                                     " moderator action",
                                     icon_url=ctx.message.author.avatar_url)
                    embed.add_field(name="Action type",
                                    value="Kick",
                                    inline=False)
                    embed.add_field(name="Target",
                                    value=member.mention +
                                    " ({})".format(member),
                                    inline=False)
                    embed.add_field(
                        name="Reason",
                        value=reason if reason else "No reason provided",
                        inline=False)
                    await self.log_channel.send(embed=embed)

            else:
                await ctx.send("Please enter a valid member!")
        except discord.errors.Forbidden:
            await ctx.send("That member cannot be kicked!")