Example #1
0
    async def on_member_join(self, member):
        general_channel_id = get_channel_id(member.guild.id, "channel_general")
        channel = self.bot.get_channel(general_channel_id)

        card = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//backgrounds//", f"background_{random.randint(1,14)}.png"))
        av_outline_circle = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//utils//", f"black_circle.png"))
        alpha_plate = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//utils//", f"alpha_plate.png"))
        welcome_text_plate = Image.open(os.path.join(f"{IMAGE_PATH}//welcome//utils//", f"welcome_plate.png"))
        avatar_img = Image.open(requests.get(member.avatar_url_as(size=1024), stream=True).raw).convert("RGBA")
        avatar_img = round_image(avatar_img.resize((363,363)))
        draw = ImageDraw.Draw(card)
    
        card.paste(alpha_plate, (100,100), alpha_plate)
        card.paste(welcome_text_plate, (569,20), welcome_text_plate)
        card.paste(av_outline_circle, (566,114), av_outline_circle)
        card.paste(avatar_img, ((569,117)), avatar_img)

        _text_width, _h = draw.textsize(f"{member.name}#{member.discriminator}", ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70))
        draw.text(((1500-_text_width)/2 ,501), f"{member.name}", font=ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70), fill=(255,255,255))
        _w, _h = draw.textsize(f"{member.name}", ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70))
        draw.text(((1500-_text_width)/2 + _w + 3,501), f"#{member.discriminator}", font=ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 70), fill=(81,81,81))

        _text_width, _h = draw.textsize(f"Member #{member.guild.member_count}", ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 55))
        draw.text(((1500-_text_width)/2 ,574), f"Member #{member.guild.member_count}", font=ImageFont.truetype(os.path.join(f"{IMAGE_PATH}//font//","uni-sans-light.ttf"), 55), fill=(255,255,255))

        card.save(os.path.join(f"{IMAGE_PATH}//temp//","temp_welcome.png"))
        await channel.send(file=discord.File(os.path.join(f"{IMAGE_PATH}//temp//","temp_welcome.png")))
Example #2
0
    async def _ban(self, ctx, member: discord.Member = None, *, reason=None):
        f"""
        {self.bot.command_prefix}{ctx.command.name} <member> <reason>
        """

        if member is None:
            raise MissingArgument("Discord User",
                                  get_command_description(ctx.command.name))

        try:
            await member.ban(reason=reason)
        except:
            raise MissingPermissionOnMember("ban", member)

        await ctx.message.delete()
        await ctx.channel.trigger_typing()
        log_channel = self.bot.get_channel(
            get_channel_id(member.guild.id, "channel_logs"))
        embed = discord.Embed(
            description=f" ", timestamp=datetime.utcnow(),
            color=0xff0000).set_author(
                name=f"{ctx.author} banned member",
                icon_url=f"{ctx.author.avatar_url}").add_field(
                    name="User", value=f"{member.mention}").add_field(
                        name="Punishment",
                        value=f"Banned").add_field(name="Reason",
                                                   value=f"{reason}")

        await log_channel.send(embed=embed)
        await member.send(embed=embed)
        await member.send(
            "https://cdn.discordapp.com/attachments/811885989005492276/812847731461849108/y2mate.com_-_ARSENAL_FAN_TV_ITS_TIME_TO_GO_MEME_360p_1.mp4"
        )
Example #3
0
    async def _kick(self, ctx, member: discord.Member = None, *, reason=None):
        f"""
        {self.bot.command_prefix}{ctx.command.name} <member> <reason>
        """

        if member is None:
            raise MissingArgument("Discord User",
                                  get_command_description(ctx.command.name))

        try:
            await member.kick(reason=reason)
        except:
            raise MissingPermissionOnMember("kick", member)

        await ctx.message.delete()
        await ctx.channel.trigger_typing()
        log_channel = self.bot.get_channel(
            get_channel_id(member.guild.id, "channel_logs"))

        embed = discord.Embed(
            title="",
            description=f" ",
            timestamp=datetime.utcnow(),
            color=0xff0000).set_author(
                name=f"{ctx.author} kicked member",
                icon_url=f"{ctx.author.avatar_url}").add_field(
                    name="User", value=f"{member.mention}").add_field(
                        name="Punishment",
                        value=f"Kicked").add_field(name="Reason",
                                                   value=f"{reason}")
        await log_channel.send(embed=embed)
        await member.send(embed=embed)
Example #4
0
    async def _warn(self, ctx, member: discord.Member, *, reason="None"):
        f"""
        {self.bot.command_prefix}{ctx.command.name} <member> <reason>
        """

        _db = get_cluster(ctx.guild.id, "CLUSTER_WARN")

        new_warn = ({
            "warned_user_name": str(member),
            "warned_user_id": member.id,
            "warn_reason": reason,
            "moderator_name": str(ctx.author),
            "moderator_id": ctx.author.id,
            "time": datetime.utcnow()
        })

        _db.insert(new_warn)

        embed = discord.Embed(
            title="",
            description=f" ",
            timestamp=datetime.utcnow(),
            color=0xff0000).set_author(
                name=f"{ctx.author} warned a user",
                icon_url=f"{ctx.author.avatar_url}").add_field(
                    name="Warned User",
                    value=f"{member.mention}").add_field(name="Reason",
                                                         value=f"{reason}")

        log_channel = self.bot.get_channel(
            get_channel_id(member.guild.id, "channel_logs"))
        await log_channel.send(embed=embed)
        await ctx.channel.send(embed=embed)
Example #5
0
    async def _mute_user(self, ctx, member, time="Indefinite", reason="None"):
        channel = self.bot.get_channel(
            get_channel_id(member.guild.id, "channel_logs"))

        try:
            muted_role = get(ctx.guild.roles, name="Muted")
        except:
            await ctx.message.guild.create_role(name="Muted", colour=0x505050)

        if muted_role in member.roles:
            return

        await member.add_roles(muted_role)

        timestr = ""

        if str(time).endswith("d"):
            timestr += f"{str(time)[:-1]} day" if str(
                time)[:-1] == "1" else f"{str(time)[:-1]} days"
        elif str(time).endswith("h"):
            timestr += f"{str(time)[:-1]} hour" if str(
                time)[:-1] == "1" else f"{str(time)[:-1]} hour"
        elif str(time).endswith("m"):
            timestr += f"{str(time)[:-1]} minute" if str(
                time)[:-1] == "1" else f"{str(time)[:-1]} minutes"
        elif str(time).endswith("s"):
            timestr += f"{str(time)[:-1]} second" if str(
                time)[:-1] == "1" else f"{str(time)[:-1]} seconds"

        embed = discord.Embed(
            description=f" ", timestamp=datetime.utcnow(),
            color=0xff0000).set_author(
                name=f"{ctx.author} muted member",
                icon_url=f"{ctx.author.avatar_url}").add_field(
                    name="Muted User", value=f"{member.mention}").add_field(
                        name="Reason",
                        value=f"{reason}").add_field(name="Time",
                                                     value=f"{timestr}")

        await ctx.send(embed=embed)

        if time != 'Indefinite':
            time_to_seconds = int(re.findall(
                r'\d+', str(time))[0]) * converter(
                    re.sub('[^a-zA-Z]+', '', time))
            end_date = datetime.utcnow() + timedelta(seconds=time_to_seconds)
            _db = get_cluster(ctx.guild.id, "CLUSTER_MUTE")
            greenie = ({"id": member.id, "end_date": end_date})
            _db.insert(greenie)

            await asyncio.sleep(time_to_seconds)

        else:
            await member.add_roles(muted_role)
Example #6
0
    async def _unmute_user(self, member):
        try:
            channel1 = self.bot.get_channel(
                get_channel_id(member.guild.id, "channel_logs"))

            muted_role = get(member.guild.roles, name="Muted")
            await member.remove_roles(muted_role)
            embed = discord.Embed(
                description=f" ", timestamp=datetime.utcnow(),
                color=0xff0000).set_author(
                    name=f"{member} is now unmuted",
                    icon_url=f"{member.avatar_url}").add_field(
                        name="Unmuted User", value=f"{member.mention}")
            await channel1.send(embed=embed)
        except:
            pass
Example #7
0
    async def on_message(self, message):
        if isinstance(message.channel, discord.channel.DMChannel):
            return

        channel = self.bot.get_channel(
            get_channel_id(message.guild.id, "channel_general"))

        if channel != message.channel:
            return

        if not message.author.bot:
            _db = get_cluster(message.guild.id, "CLUSTER_EXPERIENCE")
            stats = _db.find_one({"id": message.author.id})
            if stats is None:
                greenie = ({
                    "id": message.author.id,
                    "xp": 5,
                })

                _db.insert(greenie)

            else:
                xp = stats["xp"] + 5
                lvl = 0
                _db.update_one({"id": message.author.id}, {"$set": {"xp": xp}})

                while True:
                    if xp < ((50 * (lvl**2)) + (50 * (lvl - 1))):
                        break
                    lvl += 1
                xp -= ((50 * ((lvl - 1)**2)) + (50 * (lvl - 1)))

                if xp == 0:
                    embed = discord.Embed(
                        description=
                        f"{message.author.mention} Reached Level {lvl}!"
                    ).set_image(url="https://i.imgur.com/qgpcufH.gif")

                    await message.channel.send(embed=embed)
Example #8
0
    async def on_message_edit(self, before_edit, after_edit):
        log_channel = self.bot.get_channel(get_channel_id(before_edit.guild.id, "channel_logs"))
        if before_edit.content == after_edit.content:
            return

        if any(word in after_edit.content.lower() for word in get_cluster(before_edit.guild.id, "CLUSTER_BLACKLIST_WORDS").find_one({"id": "type_blacklist"})["array"]):
            await before_edit.delete()

        self.temp_message_edit_before = before_edit
        self.temp_message_edit_after = after_edit

        channel_id = before_edit.channel.id
        message_id = before_edit.id
        message_link = "https://discord.com/channels/787823476966162452" + f"/{channel_id}" + f"/{message_id}"
        
        embed=discord.Embed(title="", description=f"Message edited in: {before_edit.channel.mention}\n[Go To Message]({message_link})", timestamp=datetime.utcnow(), color=0x800080
            ).set_author(name=f"{before_edit.author}", icon_url=f"{before_edit.author.avatar_url}"
            ).add_field(name="Before", value=f"{before_edit.content}", inline=False
            ).add_field(name="After", value=f"{after_edit.content}"
        )
        
        await log_channel.send(embed=embed)
Example #9
0
    async def _esnipe(self, ctx):
        f"""
        {self.bot.command_prefix}{ctx.command.name}
        """

        try:
            before_edit = self.temp_message_edit_before
            after_edit = self.temp_message_edit_after
        except:
            await ctx.send("Nothing to snipe!")
            return

        if ctx.message.channel == self.temp_message_edit_before.channel:
            gif_arr = get_cluster(ctx.message.guild.id, "CLUSTER_GIFS").find_one({"id": "type_snipe_gifs"})["array"]

            before_edit_content = self.temp_message_edit_before.content
            after_edit_content = self.temp_message_edit_after.content
            try:
                for word in get_cluster(ctx.message.guild.id, "CLUSTER_BLACKLIST_WORDS").find_one({"id": "type_blacklist"})["array"]:
                    before_edit_content = before_edit_content.lower().replace(word, "[redacted]")
                    after_edit_content = after_edit_content.lower().replace(word, "[redacted]")
            except:
                pass

            message_id = before_edit.id
            channel_id = get_channel_id(ctx.message.guild.id, "channel_general")
            message_link = f"https://discord.com/channels/{ctx.message.guild.id}/{channel_id}" + f"/{message_id}"

            embed=discord.Embed(
                description=f"Message edited in: {before_edit.channel.mention}\n[Go To Message]({message_link})", 
                timestamp=datetime.utcnow(), 
                color=0x800080
                ).set_author(name=f"{before_edit.author} was sniped!", icon_url=f"{before_edit.author.avatar_url}"
                ).add_field(name="Before", value=f"{before_edit_content}", inline=False
                ).add_field(name="After", value=f"{after_edit_content}"
                ).set_image(url=choice(gif_arr)
            )
            await ctx.send(embed=embed)
Example #10
0
    async def on_message_delete(self, message):
        if message.content == "":
            return

        async for entry in message.guild.audit_logs(action=discord.AuditLogAction.message_delete, limit=1):
            now = datetime.utcnow()

            if now - timedelta(seconds=2) <= entry.created_at <= now+timedelta(seconds=2):
                self.deletee = entry.user
            else:
                self.deletee = message.author

        log_channel = self.bot.get_channel(get_channel_id(message.guild.id, "channel_logs"))

        if message.author.bot:
            return
            
        if str(self.author_temp) != str(message.author):
            deleted_messages.clear()
            self.author_temp = message.author

        if not message.content.startswith("?"):
            _db = get_cluster(message.guild.id, "CLUSTER_BLACKLIST_WORDS").find_one({"id": "type_blacklist"})["array"]
            for word in _db:
                message.content = message.content.lower().replace(word, "[redacted]")
            deleted_messages.append(message)

        embed=discord.Embed(
            description=f"Message deleted in: {message.channel.mention} by {self.deletee.mention}" if message.content[0:2] != "?m" else f"**Mirrored** message in: {message.channel.mention}", 
            timestamp=datetime.utcnow(), 
            color=0xff0000
            ).set_author(name=f"{message.author}", icon_url=f"{message.author.avatar_url}"
            ).add_field(name="Content", value=f"{message.content}"
            ).add_field(name="ID", value=f"```ml\nUser = {message.author.id}\nMessage = {message.id}\n```", inline=False
        )
        await log_channel.send(embed=embed)