Example #1
0
    async def enableModule(self, ctx, module: str = None):
        if module is None:
            await ctx.send(
                "Please include a module name to enable. https://Greenfoot5.github.io/Endeavour-wiki/Bot_Settings"
            )
            return

        module = module.lower()

        if module not in self.modules:
            await ctx.send(
                "Please include a valid module name to enable. https://Greenfoot5.github.io/Endeavour-wiki/Bot_Settings"
            )

        servers = data_handler.load("servers")

        try:
            server = servers[str(ctx.guild.id)]
        except KeyError:
            servers[str(ctx.guild.id)] = {
                "modules": {
                    "bounty": False,
                    "achievements": False
                },
                "prefix": "&&"
            }
            data_handler.dump(servers, "servers")
            server = servers[str(ctx.guild.id)]

        server["modules"][module] = True
        print(servers)
        servers[str(ctx.guild.id)] = server
        data_handler.dump(servers, "servers")

        await ctx.send(f"`{module}` has been enabled.`")
Example #2
0
 async def set_prefix(self, ctx, newPrefix=None):
     prefixData = data_handler.load("servers")
     try:
         prefix = prefixData[f'{ctx.guild.id}']['prefix']
     except KeyError:
         prefix = '&&'
     if newPrefix == None:
         await ctx.send(f"Your current prefix is `{prefix}`.")
         return
     prefixData[f'{ctx.guild.id}']['prefix'] = newPrefix
     await ctx.send(f"Your new prefix is `{newPrefix}`")
     data_handler.dump(prefixData, "servers")
Example #3
0
    async def server(self, ctx):
        if ctx.invoked_subcommand is not None:
            return

        servers = data_handler.load("servers")

        try:
            server = servers[str(ctx.guild.id)]
        except KeyError:
            servers[str(ctx.guild.id)] = {
                "modules": {
                    "bounty": False,
                    "achievements": False
                },
                "prefix": "&&"
            }
            data_handler.dump(servers, "servers")
            server = servers[str(ctx.guild.id)]

        embed = discord.Embed(
            title=ctx.guild.name,
            description=f"Server Prefix: `{server['prefix']}`",
            colour=ctx.guild.owner.colour)

        module_settings = ""
        # Achievements
        if server["modules"]["achievements"] == True:
            module_settings = "<:Yes:749999875130654750> Achievements"
        elif server["modules"]["achievements"] == False:
            module_settings = "<:No:749999875013345362> Achievements"
        else:
            module_settings = "<:Maybe:749999875147432066> Achievements"
        # Bounty
        if server["modules"]["bounty"] == True:
            module_settings += "\n<:Yes:749999875130654750> Bounty"
        elif server["modules"]["bounty"] == False:
            module_settings += "\n<:No:749999875013345362> Bounty"
        else:
            module_settings += "\n<:Maybe:749999875147432066> Bounty"

        embed.add_field(name="Modules", value=module_settings)

        embed.set_thumbnail(url=ctx.guild.icon_url_as(static_format="png"))

        await ctx.send(embed=embed)
Example #4
0
    async def on_message(self, ctx):

        try:
            servers = data_handler.load('servers')
            if servers[str(ctx.guild.id)]["modules"]["bounty"] == False:
                return
        except KeyError:
            return

        XPList = data_handler.load("wanted")

        try:
            ServerXP = XPList[str(ctx.guild.id)]
        except KeyError:
            XPList[str(ctx.guild.id)] = {
                "min": 20,
                "max": 30,
                "blacklist": [],
                "suffix": 3,
                "members": {}
            }
            ServerXP = XPList[str(ctx.guild.id)]

        if ctx.author.bot == True:
            return
        if str(ctx.channel.id) in ServerXP["blacklist"]:
            return

        try:
            MemberXP = ServerXP["members"][str(ctx.author.id)]
            if MemberXP["timeOfNextEarn"] > time.time():
                return
        except KeyError:
            MemberXP = {"xp": 0, "timeOfNextEarn": 0}

        addedXP = random.randint(ServerXP["min"], ServerXP["max"])
        MemberXP["xp"] += addedXP
        MemberXP["timeOfNextEarn"] = time.time() + 60

        ServerXP["members"][str(ctx.author.id)] = MemberXP
        XPList[str(ctx.guild.id)] = ServerXP
        data_handler.dump(XPList, "wanted")
Example #5
0
 async def bReset(self, ctx):
     # TODO - Add confirmation menu
     XPList = data_handler.load("wanted")
     XPList[str(ctx.guild.id)]["members"] = {}
     data_handler.dump(XPList, "wanted")
     await ctx.send("Bounties have been reset")
Example #6
0
    def processing(avatar_bytes: bytes, colour: tuple, ctx, member,
                   xp) -> BytesIO:

        #we must use BytesIO to load the image here as PIL expects a stream instead of just raw bytes.
        with Image.open(BytesIO(avatar_bytes)) as im:

            #this creates a new image the same size as the user's avatar, with the background colour being the user's colour.
            with Image.open('media/OnePieceWantedPosters.png') as background:

                #this ensures that the user's avatar lacks an alpha channel as we're going to be submitting our own here
                rgb_avatar = im.convert("RGB")

                #Resizes the avatar
                rgb_avatar = rgb_avatar.resize(size=(339, 258))

                #this is the mask image we will be using to create the circle cutout effect on the avatar
                with Image.new("L", rgb_avatar.size, 0) as mask:

                    #ImageDraw lets us draw on the image. In this instance we will be using it to draw a white circle on the mask image.
                    mask_draw = ImageDraw.Draw(mask)

                    #draw the white circle from 0, 0 to the bottom right corner of the image.
                    mask_draw.rectangle([(0, 0), 500, 300], fill=255)

                    #paste the alpha-less avatar on the background using the new circle mask we just created.
                    background.paste(rgb_avatar, (35, 125), mask=mask)

                if xp is None:

                    #this is the mask image we will be using to create the text
                    with Image.new("L", rgb_avatar.size, 0) as mask:

                        #ImageDraw lets us draw on the image. In this instance we will be using it to draw text on the image
                        fontDraw = ImageDraw.Draw(mask)

                        #we get the font.
                        nameFont = ImageFont.truetype(font='media/Vanib.ttf',
                                                      size=35)

                        #Make sure only 15 chars of the member's nickname is selected. If there aren't 15 chars then all are displayed without errors
                        if len(member.display_name) < 15:
                            maxLen = len(member.display_name)
                        else:
                            maxLen = 15

                        #we draw it on
                        fontDraw.multiline_text(
                            xy=(0, 0),
                            text=f"{member.display_name[0:maxLen]}",
                            fill=0x008800,
                            font=nameFont,
                            align="center",
                            spacing=2)

                        background.paste((56, 46, 46), (45, 440), mask=mask)

                    with Image.new("L", rgb_avatar.size, 0) as mask:

                        #ImageDraw lets us draw on the image. In this instance we will be using it to draw text on the image
                        fontDraw = ImageDraw.Draw(mask)

                        #we get the font.
                        numberFont = ImageFont.truetype(
                            font='media/verdanab.ttf', size=32)

                        #Obtain the user's wanted score.
                        scores = data_handler.load("wanted")
                        try:
                            score = scores["wanted"][str(member.id)]
                        except KeyError:
                            score = random.randint(1, 9) * (10**random.randint(
                                0, 10))
                            scores["wanted"][str(member.id)] = score
                            data_handler.dump(scores, "wanted")

                        #we draw it on
                        fontDraw.multiline_text(xy=(0, 0),
                                                text='{:,}'.format(score),
                                                fill=0x008800,
                                                font=numberFont,
                                                align="center",
                                                spacing=2)

                        background.paste((56, 46, 46), (70, 500), mask=mask)

                else:

                    #this is the mask image we will be using to create the text
                    with Image.new("L", rgb_avatar.size, 0) as mask:

                        #ImageDraw lets us draw on the image. In this instance we will be using it to draw text on the image
                        fontDraw = ImageDraw.Draw(mask)

                        #we get the font.
                        nameFont = ImageFont.truetype(font='media/Vanib.ttf',
                                                      size=35)

                        #Make sure only 15 chars of the member's nickname is selected. If there aren't 15 chars then all are displayed without errors
                        if len(member.display_name) < 15:
                            maxLen = len(member.display_name)
                        else:
                            maxLen = 15

                        #we draw it on
                        fontDraw.multiline_text(
                            xy=(0, 0),
                            text=f"{member.display_name[0:maxLen]}",
                            fill=0x008800,
                            font=nameFont,
                            align="center",
                            spacing=2)

                        background.paste((56, 46, 46), (45, 440), mask=mask)

                    with Image.new("L", rgb_avatar.size, 0) as mask:

                        #ImageDraw lets us draw on the image. In this instance we will be using it to draw text on the image
                        fontDraw = ImageDraw.Draw(mask)

                        #we get the font.
                        numberFont = ImageFont.truetype(
                            font='media/verdanab.ttf', size=32)

                        #We get the suffix
                        XPList = data_handler.load("wanted")
                        try:
                            suffix = XPList[str(ctx.guild.id)]["suffix"]
                        except:
                            suffix = 3
                        value = xp * (10**suffix)

                        #we draw it on
                        fontDraw.multiline_text(xy=(0, 0),
                                                text='{:,}'.format(value),
                                                fill=0x008800,
                                                font=numberFont,
                                                align="center",
                                                spacing=2)

                        background.paste((56, 46, 46), (70, 500), mask=mask)

                #prepare the stream to save this image into
                final_buffer = BytesIO()

                #save into the stream, using png format.
                background.save(final_buffer, "png")

            #seek back to the start of the stream
            final_buffer.seek(0)

            return final_buffer