Exemple #1
0
async def _guild_leave():
    assigned_ids = utils.get_assigned_user_ids()

    if _guild_leave.message.author.id not in assigned_ids:
        await _guild_leave.message.channel.send(
            ":warning: Your id is not assigned")

    else:
        in_guild = False
        is_leader = False
        guild_id = -1

        for gid in utils.get_guilds_id():
            members = utils.get_guild_members_id(gid)

            guild = iniparser2.INI(convert_property=True)
            guild.read_file(f"data/guilds/{gid}.ini")

            if _guild_leave.message.author.id in members:
                in_guild = True
                guild_id = gid

            if _guild_leave.message.author.id == guild["info"]["leader"]:
                in_guild = False
                is_leader = True
                guild_id = gid

        if is_leader:
            await _guild_leave.message.channel.send(
                ":x: You can't leave if you are a leader of a guild, you can delete your guild"
            )
            return

        elif in_guild:
            filename = f"data/guilds/{guild_id}.ini"

            data = iniparser2.INI(convert_property=True)
            data.read_file(filename)

            del data["members"][str(_guild_leave.message.author.id)]
            data.write(filename)

            await _guild_leave.message.channel.send(
                f":white_check_mark: You left the guild: **{data['info']['name']}**"
            )

        else:
            await _guild_leave.message.channel.send(
                ":x: You are not in a guild")
Exemple #2
0
async def _mine():
    assigned_ids = utils.get_assigned_user_ids()

    if _mine.message.author.id not in assigned_ids:
        await _mine.message.channel.send(":warning: Your id is not assigned")

    else:

        filename = f"data/users/{_mine.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data["cooldown"]["mine"] > 0:
            await _mine.message.channel.send(
                f":warning: command is still cooling down for {utils.fsec(data['cooldown']['mine'])}"
            )

        else:

            rng = random.randint(0, len(statics.mine) - 1)
            mine_keys = [key for key in statics.mine.keys()]
            item = mine_keys[rng]
            rng_broken = random.randint(1, 3)

            data["cooldown"]["mine"] = 45
            data["stats"]["current_exp"] += 1.0

            if data["tools"]["pickaxe"] not in statics.items:
                await _mine.message.channel.send(f":x: Equip a pickaxe to mine"
                                                 )
                return

            try:
                result = statics.mine[item][data["tools"]["pickaxe"]]
            except KeyError:
                result = 0

            if rng_broken == 2:
                data["inventory"][data["tools"]["pickaxe"]] -= 1
                await _mine.message.channel.send(
                    f":warning: {_mine.message.author.mention}, Your {data['tools']['pickaxe']} is broken"
                )
                data["tools"]["pickaxe"] = True

            data["inventory"][item] += result
            data.write(filename)

            embed = discord.Embed(
                title="Mine",
                color=0xFF00FF,
            )

            if result > 0:
                embed.description = f"You mined x{result} `{item.upper()}`"
            else:
                embed.description = "You found nothing"
            embed.set_author(name=_mine.message.author.display_name)

            await _mine.message.channel.send(embed=embed)
Exemple #3
0
async def _unequip(tool):
    assigned_ids = utils.get_assigned_user_ids()

    if _unequip.message.author.id not in assigned_ids:
        await _unequip.message.channel.send(":warning: Your id is not assigned")

    else:
        if tool in statics.tools:
            filename = f"data/users/{_unequip.message.author.id}.ini"

            data = iniparser2.INI(convert_property=True)
            data.read_file(filename)

            if data["tools"][tool] is True:
                await _unequip.message.channel.send(
                    f":x: {_unequip.message.author.mention}, You are not equipping this tool: `{tool}`"
                )
                return

            data["tools"][tool] = True
            data.write(filename)

            await _unequip.message.channel.send(
                f":white_check_mark: {_unequip.message.author.mention}, You have unequipped tool **{tool}**"
            )
        else:
            await _unequip.message.channel.send(f":x: Tool `{tool}` did not exists")
Exemple #4
0
async def update_user_database():
    users = utils.get_assigned_user_ids()

    for user in users:
        filename = f"data/users/{user}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data.has_section("inventory") is False:
            data.set_section("inventory")

        for item in statics.items.keys():
            if data.has_property(item, section="inventory") is False:
                data["inventory"][item] = 0

        if data.has_section("cooldown") is False:
            data.set_section("cooldown")

        for cooldown in statics.cooldowns:
            if data.has_property(cooldown, section="cooldown") is False:
                data["cooldown"][cooldown] = 0

        if data.has_section("tools") is False:
            data.set_section("tools")

        for tool in statics.tools:
            if data.has_property(tool, section="tools") is False:
                data["tools"][tool] = True

        data.write(filename)
Exemple #5
0
async def _field_buy():
    assigned_ids = utils.get_assigned_user_ids()

    if _field_buy.message.author.id not in assigned_ids:
        await _field_buy.message.channel.send(
            ":warning: Your id is not assigned")

    else:

        fields = utils.get_fields()

        if _field_buy.message.author.id in fields:
            await _field_buy.message.channel.send(
                f":x: You already have a field")

        else:

            filename = f"data/fields/{_field_buy.message.author.id}.ini"
            user_filename = f"data/users/{_field_buy.message.author.id}.ini"

            user_data = iniparser2.INI(convert_property=True)
            user_data.read_file(user_filename)

            if user_data["stats"]["balance"] >= 1000:
                open(filename, "w").close()

                data = iniparser2.INI(convert_property=True)
                data.read_file(filename)

                # free plot woo
                data.set_section("plot0")
                data["plot0"]["plant"] = True
                data["plot0"]["progress"] = 0

                user_data.set("balance",
                              user_data["stats"]["balance"] - 1000,
                              section="stats")

                data.write(filename)
                user_data.write(user_filename)

                await _field_buy.message.channel.send(
                    ":white_check_mark: You bought a field")

            else:
                await _field_buy.message.channel.send(
                    ":x: You need 1000 coins to buy a new field")
Exemple #6
0
async def _field_buyplot():
    assigned_ids = utils.get_assigned_user_ids()

    if _field_buyplot.message.author.id not in assigned_ids:
        await _field_buyplot.message.channel.send(
            ":warning: Your id is not assigned")

    else:
        fields = utils.get_fields()

        if _field_buyplot.message.author.id not in fields:
            await _field_buyplot.message.channel.send(
                f":x: You don't have a field")

        else:

            filename = f"data/fields/{_field_buyplot.message.author.id}.ini"
            user_filename = f"data/users/{_field_buyplot.message.author.id}.ini"

            data = iniparser2.INI(convert_property=True)
            user_data = iniparser2.INI(convert_property=True)
            data.read_file(filename)
            user_data.read_file(user_filename)

            if len(data.sections()) == 10:
                await _field_buyplot.message.channel.send(
                    ":x: You cannot buy more plots")

            else:
                price = 1000 * len(data.sections())

                if user_data["stats"]["balance"] >= price:
                    await _field_buyplot.message.channel.send(
                        f":white_check_mark: You bought a new field plot with id `{len(data.sections())}`"
                    )
                    data.set_section(f"plot{len(data.sections())}")
                    data[f"plot{len(data.sections()) - 1}"]["plant"] = True
                    data[f"plot{len(data.sections()) - 1}"]["progress"] = 0

                    user_data["stats"]["balance"] -= price

                    data.write(filename)
                    user_data.write(user_filename)
Exemple #7
0
def get_guild_members_id(guild_id):
    members = []
    filename = f"data/guilds/{guild_id}.ini"

    if os.path.isfile(filename):
        guild = iniparser2.INI(convert_property=True)
        guild.read_file(filename)

        for member in guild["members"].keys():
            members.append(int(member))

        return members
Exemple #8
0
async def _buy(item, amount=1):
    try:
        amount = int(amount)
    except Exception:
        await _buy.message.channel.send(
            f":x: item amount must be an integer value.")
        return

    assigned_ids = utils.get_assigned_user_ids()

    if _buy.message.author.id not in assigned_ids:
        await _buy.message.channel.send(":warning: Your id is not assigned")

    else:

        filename = f"data/users/{_buy.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if item not in statics.items:
            await _buy.message.channel.send(f":x: Item `{item}` did not exists"
                                            )
            return

        if statics.items[item]["purchasable"] is False:
            await _buy.message.channel.send(
                f":x: You cannot buy this item, `{item}`")
            return

        if amount < 1:
            await _buy.message.channel.send(
                ":x: item amount cannot be lower than 1")
            return

        price = statics.items[item]["price"] * amount

        if data["stats"]["balance"] < amount:
            await _buy.message.channel.send(
                f":x: You need **{price}** coins to buy x{amount} `{item}`")
            return

        data["inventory"][item] += amount
        data["stats"]["balance"] -= price

        data.write(filename)

        embed = discord.Embed(title="Buy", color=0xFF00FF)
        embed.description = f"You bought x{amount} `{item}` for **{price}** coins"
        embed.set_author(name=_buy.message.author.display_name)

        await _buy.message.channel.send(embed=embed)
Exemple #9
0
async def _chop():
    assigned_ids = utils.get_assigned_user_ids()

    if _chop.message.author.id not in assigned_ids:
        await _chop.message.channel.send(":warning: Your id is not assigned")

    else:
        filename = f"data/users/{_chop.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data["cooldown"]["chop"] > 0:
            await _chop.message.channel.send(
                f":warning: command is still cooling down for {utils.fsec(data['cooldown']['chop'])}"
            )

        else:
            rng = random.randint(1, 3)

            if data["tools"]["axe"] in statics.chop:
                wood = statics.chop[data["tools"]["axe"]]

                if rng == 2:
                    data.set(
                        data["tools"]["axe"],
                        data["inventory"][data["tools"]["axe"]] - 1,
                        section="inventory",
                    )
                    await _chop.message.channel.send(
                        f":warning: {_chop.message.author.mention} Your `{data['tools']['axe']}` is broken!"
                    )
                    data.set("axe", True, section="tools")

            else:
                wood = 1

            data["inventory"]["wood"] += wood
            data["stats"]["current_exp"] += 1.0
            data["cooldown"]["chop"] = 30
            data.write(filename)

            embed = discord.Embed(
                title="Chop",
                description=f"You chopped x{wood} wood",
                color=0xFF00FF,
            )
            embed.set_author(name=_chop.message.author.display_name)

            await _chop.message.channel.send(embed=embed)
Exemple #10
0
async def update_cooldown():
    userids = utils.get_assigned_user_ids()

    for userid in userids:
        filename = f"data/users/{userid}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        for cooldown in data["cooldown"].keys():
            if data["cooldown"][cooldown] > 0:
                data["cooldown"][cooldown] -= 1

        data.write(filename)
Exemple #11
0
async def update_fields():
    fields = utils.get_fields()

    for field in fields:
        filename = f"data/fields/{field}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        for plot in data.sections():
            if data[plot]["progress"] > 0 and data[plot][
                    "plant"] in statics.items:
                data[plot]["progress"] -= 1

        data.write(filename)
Exemple #12
0
async def _fish():
    assigned_ids = utils.get_assigned_user_ids()

    if _fish.message.author.id not in assigned_ids:
        await _fish.message.channel.send(":warning: Your id is not assigned")

    else:
        filename = f"data/users/{_fish.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data["cooldown"]["fish"] > 0:
            await _fish.message.channel.send(
                f":x: Command is still cooling down for {utils.fsec(data['cooldown']['fish'])} minutes"
            )
            return

        if data["inventory"]["fishing_rod"] < 1:
            await _fish.message.channel.send(":x: You don't have a fishing rod"
                                             )
            return

        else:
            rng = random.randint(1, 3)
            rng_fish = random.randint(1, 3)

            if rng == 2:
                data["inventory"]["fising_rod"] -= 1
                await _fish.message.channel.send(
                    f":warning: {_fish.message.author.mention}, Your fishing rod is broken"
                )

            if rng_fish == 2:
                data["cooldown"]["fish"] = 60
                data["inventory"]["fish"] += 1
                data["stats"]["current_exp"] += 2.0

                await _fish.message.channel.send(
                    f"{_fish.message.author.mention}, You have caught a `fish`"
                )

            else:
                data["cooldown"]["fish"] = 60
                await _fish.message.channel.send(
                    f":x: you didn't catch anything")

        data.write(filename)
Exemple #13
0
async def _inventory(page=1):
    try:
        page = int(page) - 1
    except Exception:
        await _inventory.message.channel.send(
            ":warning: use number to navigate between pages")
        return

    assigned_ids = utils.get_assigned_user_ids()

    if _inventory.message.author.id not in assigned_ids:
        await _inventory.message.channel.send(
            ":warning: Your id is not assigned")

    else:

        pages = [[]]
        filename = f"data/users/{_inventory.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        for item in data["inventory"].keys():
            if len(pages[len(pages) - 1]) == 15:
                pages.append([])

            if len(pages[len(pages) - 1]) < 15:
                if data["inventory"][item] > 0:
                    pages[len(pages) -
                          1].append(f"{item}: {data['inventory'][item]}")

        if (page + 1) > len(pages) or (page + 1) < 1:
            await _inventory.message.channel.send(
                f":x: Page {page + 1} did not exists")

        else:
            if len(pages[0]) < 1:
                await _inventory.message.channel.send(
                    f":warning: You don't have any items")

            else:
                embed = discord.Embed(title="Inventory", color=0xFF00FF)
                embed.set_author(name=_inventory.message.author.display_name)
                embed.description = "```\n" + "\n".join(pages[page]) + "\n```"
                embed.set_footer(text=f"Page {page + 1} of {len(pages)}")

                await _inventory.message.channel.send(embed=embed)
Exemple #14
0
async def _sell(item, amount=1):
    try:
        amount = int(amount)
    except Exception:
        await _sell.message.channel.send(
            f":x: item amount must be an integer value.")
        return

    if item not in statics.items.keys():
        await _sell.message.channel.send(f"item `{item}` did not exists")
        return

    if statics.items[item]["sellable"] is False:
        await _sell.message.channel.send(
            f":x: You cannot sell this item: `{item}`")
        return

    filename = f"data/users/{_sell.message.author.id}.ini"

    data = iniparser2.INI(convert_property=True)
    data.read_file(filename)

    if amount < 1:
        await _sell.message.channel.send(
            ":x: item amount cannot be lower than 1")

    else:

        if data["inventory"][item] < amount:
            await _sell.message.channel.send(
                ":x: you don't have enough items to sell")

        else:
            price = int((statics.items[item]["price"] / 1.8) * amount)

            data["inventory"][item] -= amount
            data["stats"]["balance"] += price

            data.write(filename)

            embed = discord.Embed(
                title="Sell",
                description=f"You sold x{amount} {item} for {price} coins",
                color=0xFF00FF,
            )

            await _sell.message.channel.send(embed=embed)
Exemple #15
0
def get_guilds_data():
    guilds_file = []

    for guild in os.listdir("data/guilds"):
        if os.path.isfile("data/guilds/" + guild):
            if guild.endswith(".ini"):
                guilds_file.append("data/guilds/" + guild)

    guilds = []

    for guild in guilds_file:
        data = iniparser2.INI(convert_property=True)
        data.read_file(guild)

        guilds.append(data)

    return guilds
Exemple #16
0
async def update_exp():
    userids = utils.get_assigned_user_ids()

    for userid in userids:
        filename = f"data/users/{userid}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data["stats"]["current_exp"] >= data["stats"]["max_exp"]:
            prev_exp = data["stats"]["current_exp"] - data["stats"]["max_exp"]

            data["stats"]["current_exp"] = 0.0 + prev_exp
            data["stats"]["max_exp"] *= 2
            data["stats"]["level"] += 1

        data.write(filename)
Exemple #17
0
async def update_guild_exp():
    guilds = utils.get_guilds_data()

    for gid, guild in enumerate(guilds):
        filename = f"data/guilds/{gid}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data["stats"]["current_exp"] >= data["stats"]["max_exp"]:
            prev_exp = data["stats"]["current_exp"] - data["stats"]["max_exp"]

            data["stats"]["current_exp"] = 0.0 + prev_exp
            data["stats"]["max_exp"] *= 2
            data["stats"]["level"] += 1

        data.write(filename)
Exemple #18
0
async def _use(item):
    assigned_ids = utils.get_assigned_user_ids()

    if _use.message.author.id not in assigned_ids:
        await _use.message.channel.send(":warning: Your id is not assigned")

    else:

        filename = f"data/users/{_use.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if item not in statics.items:
            await _use.message.channel.send(
                f":x: Item did not exists, `{item}`")
            return

        if item not in statics.consumable:
            await _use.message.channel.send(
                f":x: You cannot use this item, `{item}`")

        else:
            if data["inventory"][item] > 0:
                if data["status"]["health"] == data["status"]["max_health"]:
                    await _use.message.channel.send(
                        ":warning: Your Health is maxed out")
                    return

                if (data["status"]["health"] + statics.consumable[item]
                    ) > data["status"]["max_health"]:
                    data["status"]["health"] = data["status"]["max_health"]

                else:
                    data["status"]["health"] += statics.consumable[item]

                data["inventory"][item] -= 1

                data.write(filename)

                await _use.message.channel.send(
                    f":white_check_mark: {_use.message.author.mention}, You used the item `{item}`, health restored **{statics.consumable[item]} HP**"
                )
            else:
                await _use.message.channel.send(
                    f":x: You don't have that item, `{item}`")
Exemple #19
0
async def _guild_join(guild_id):
    try:
        guild_id = int(guild_id)

    except Exception:
        await _guild_join.message.channel.send(
            ":x: guild id is not an integer value")
        return

    assigned_ids = utils.get_assigned_user_ids()

    if _guild_join.message.author.id not in assigned_ids:
        await _guild_join.message.channel.send(
            ":warning: Your id is not assigned")

    else:
        in_guild = False
        guilds = utils.get_guilds()

        for gid in range(len(guilds)):
            members = utils.get_guild_members_id(gid)

            if _guild_join.message.author.id in members:
                in_guild = True

        if in_guild is True:
            await _guild_join.message.channel.send(
                ":x: You are already in a guild")
            return

        filename = f"data/guilds/{guild_id}.ini"

        if not os.path.isfile(filename):
            await _guild_join.message.channel.send(
                f":x: Guild id {guild_id} did not exists")
            return

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        data["members"][_guild_join.message.author.id] = None
        data.write(filename)

        await _guild_join.message.channel.send(
            f":white_check_mark: You have joined guild: `{guilds[guild_id]['name']}`"
        )
Exemple #20
0
async def _guild_set_logo(url):
    for gid in utils.get_guilds_id():
        filename = f"data/guilds/{gid}.ini"

        if os.path.isfile(filename):
            data = iniparser2.INI(convert_property=True)
            data.read_file(filename)

            if _guild_set_logo.message.author.id == data["info"]["leader"]
                data["info"]["logo"] = url
                data.write(filename)

                await _guild_set_logo.message.channel.send(
                    f":white_check_mark: Logo has been updated for guild: **{data['info']['name']}**"
                )
                return

    await _guild_set_logo.message.channel.send(f":x: You don't own a guild")
Exemple #21
0
async def _field():
    assigned_ids = utils.get_assigned_user_ids()

    if _field.message.author.id not in assigned_ids:
        await _field.message.channel.send(":warning: Your id is not assigned")

    else:
        fields = utils.get_fields()

        if _field.message.author.id not in fields:
            await _field.message.channel.send(f":x: You don't have a field")

        else:

            filename = f"data/fields/{_field.message.author.id}.ini"

            data = iniparser2.INI(convert_property=True)
            data.read_file(filename)

            embed = discord.Embed(
                title=f"{_field.message.author.display_name}'s Field",
                color=0xFF00FF)

            for pid, plot in enumerate(data.sections()):
                if data[plot]["progress"] > 0 and data[plot][
                        "plant"] in statics.items:
                    embed.add_field(
                        name=f"Plot {pid}",
                        value=f"Growing {data[plot]['plant']}...",
                        inline=False,
                    )
                elif (data[plot]["progress"] == 0
                      and data[plot]["plant"] in statics.items):
                    embed.add_field(
                        name=f"Plot {pid}",
                        value=f"{data[plot]['plant']} is ready to be harvested",
                        inline=False,
                    )
                else:
                    embed.add_field(name=f"Plot {pid}",
                                    value="Empty",
                                    inline=False)
            await _field.message.channel.send(embed=embed)
Exemple #22
0
async def _guild_info(guild_id):
    try:
        guild_id = int(guild_id)
    except Exception:
        await _guild_info.message.channel.send(
            ":x: Guild id value is not an integer")
        return

    filename = f"data/guilds/{guild_id}.ini"

    if not os.path.isfile(filename):
        await _guild_info.message.channel.send(
            f":x: Guild id `{guild_id}` did not exists")
        return

    guild = iniparser2.INI(convert_property=True)
    guild.read_file(filename)

    leader_user = await _guild_info.client.fetch_user(guild["info"]["leader"])

    created_at = datetime.datetime.strptime(guild["info"]["created"],
                                            "%Y-%m-%d %H:%M:%S.%f")

    embed = discord.Embed(title=guild["info"]["name"], color=0xFF00FF)
    embed.description = f"Leader: **{leader_user.name}#{leader_user.discriminator}**"
    embed.description += (
        f"\nCreated At: **{created_at.strftime('%a %d %b %Y %X %p %z')}**")
    embed.set_author(name=f"Level {guild['stats']['level']}")
    embed.description += (
        f"\nMembers Count: `{len(utils.get_guild_members_id(guild_id))}`")
    embed.set_thumbnail(url=guild["info"]["logo"])

    try:
        await _guild_info.message.channel.send(embed=embed)
        return
    except Exception:
        pass

    embed.set_thumbnail(url=embed.Empty)
    await _guild_info.message.channel.send(embed=embed)
Exemple #23
0
async def _start():
    assigned_userids = utils.get_assigned_user_ids()

    if _start.message.author.id in assigned_userids:
        await _start.message.channel.send(":x: Your id has already assigned!")

    else:
        filename = f"data/users/{_start.message.author.id}.ini"

        open(filename, "w").close()

        data = iniparser2.INI(convert_property=True)

        data.set_section("stats")
        data["stats"]["balance"] = 500
        data["stats"]["level"] = 0
        data["stats"]["current_exp"] = 0.0
        data["stats"]["max_exp"] = 50.0

        data.set_section("status")
        data["status"]["health"] = 100.0
        data["status"]["max_health"] = 100.0

        data.set_section("inventory")
        for item in statics.items.keys():
            data["inventory"][item] = 0

        data.set_section("cooldown")
        for cooldown in statics.cooldowns:
            data["cooldown"][cooldown] = 0

        data.set_section("tools")
        for tool in statics.tools:
            data["tools"][tool] = True

        data.write(filename)

        await _start.message.channel.send(
            ":white_check_mark: Your id has successfully assigned!")
Exemple #24
0
async def _balance():
    assigned_ids = utils.get_assigned_user_ids()

    if _balance.message.author.id not in assigned_ids:
        await _balance.message.channel.send(":warning: Your id is not assigned"
                                            )

    else:

        filename = f"data/users/{_balance.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        embed = discord.Embed(
            title="Balance",
            description=f"You have `{data['stats']['balance']}` coins",
            color=0xFF00FF,
        )
        embed.set_author(name=_balance.message.author.display_name)

        await _balance.message.channel.send(embed=embed)
Exemple #25
0
def get_guilds():
    guilds_file = []

    for guild in os.listdir("data/guilds"):
        if os.path.isfile("data/guilds/" + guild):
            if guild.endswith(".ini"):
                guilds_file.append("data/guilds/" + guild)

    guilds = []

    for guild in guilds_file:
        data = iniparser2.INI(convert_property=True)
        data.read_file(guild)

        guilds.append({
            "id": int(os.path.basename(guild).split(".ini")[0]),
            "name": data["info"]["name"],
            "leader": data["info"]["leader"],
            "members": len(data["members"].keys()),
        })

    return guilds
Exemple #26
0
async def _forage():
    assigned_ids = utils.get_assigned_user_ids()

    if _forage.message.author.id not in assigned_ids:
        await _forage.message.channel.send(":warning: Your id is not assigned")

    else:
        filename = f"data/users/{_forage.message.author.id}.ini"

        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        if data["cooldown"]["forage"] > 0:
            await _forage.message.channel.send(
                f":warning: command is still cooling down for {utils.fsec(data['cooldown']['forage'])}"
            )

        else:

            rng_result = random.randint(1, 5)
            rng_item = random.randint(0, len(statics.forage) - 1)
            item = statics.forage[rng_item]

            data["inventory"][item] += rng_result
            data["stats"]["current_exp"] += 1.0
            data["cooldown"]["forage"] = 15
            data.write(filename)

            embed = discord.Embed(
                title="Forage",
                description=f"You found x{rng_result} `{item}`",
                color=0xFF00FF,
            )
            embed.set_author(name=_forage.message.author.display_name)

            await _forage.message.channel.send(embed=embed)
Exemple #27
0
async def _guild_members(guild_id, page=1):
    try:
        guild_id = int(guild_id)

    except Exception:
        await _guild_members.message.channel.send(
            ":x: Guild id value is not an integer"
        )
        return

    try:
        page = int(page) - 1

    except Exception:
        await _guild_members.message.channel.send(
            ":x: Use number to navigate between pages"
        )
        return

    filename = f"data/guilds/{guild_id}.ini"

    if os.path.isfile(filename):
        data = iniparser2.INI(convert_property=True)
        data.read_file(filename)

        pages = [[]]

        for member in data["members"].keys():
            member = int(member)

            if len(pages[len(pages) - 1]) == 10:
                pages.append([])

            if len(pages[len(pages) - 1]) < 10:
                user = await _guild_members.client.fetch_user(member)
                if member != data["info"]["leader"]:
                    pages[len(pages) - 1].append(f"{user.name}#{user.discriminator}")

        if (page + 1) > len(pages) or (page + 1) < 1:
            await _guild_members.message.channel.send(
                f":x: Page {page + 1} did not exists"
            )
            return

        leader = await _guild_members.client.fetch_user(data["info"]["leader"])

        embed = discord.Embed(title="Members", color=0xFF00FF)
        embed.set_author(name=data["info"]["name"])
        embed.description = f"Leader: **{leader.name}#{leader.discriminator}**"

        if len(pages[0]) > 0:
            embed.description += "\n\n```\n"
            embed.description += "\n".join(pages[page])
            embed.description += "\n```"
            embed.set_footer(text=f"Page {page + 1} of {len(pages)}")

        embed.set_thumbnail(url=data["info"]["logo"])

        try:
            await _guild_members.message.channel.send(embed=embed)
            return
        except Exception:
            pass

        embed.set_thumbnail(url=embed.Empty)
        await _guild_members.message.channel.send(embed=embed)

    else:
        await _guild_members.message.channel.send(
            f":x: Guild id `{guild_id}` did not exists"
        )
Exemple #28
0
async def _field_harvest(plot):
    try:
        plot = int(plot)
    except Exception:
        await _field_harvest.message.channel.send(
            ":x: use number to select a plot")

    else:

        assigned_ids = utils.get_assigned_user_ids()

        if _field_harvest.message.author.id not in assigned_ids:
            await _field_harvest.message.channel.send(
                ":warning: Your id is not assigned")

        else:

            fields = utils.get_fields()

            if _field_harvest.message.author.id not in fields:
                await _field_harvest.message.channel.send(
                    f":x: You don't have a field")

            else:

                filename = f"data/fields/{_field_harvest.message.author.id}.ini"
                user_filename = f"data/users/{_field_harvest.message.author.id}.ini"

                data = iniparser2.INI(convert_property=True)
                user_data = iniparser2.INI(convert_property=True)
                data.read_file(filename)
                user_data.read_file(user_filename)

                if "plot" + str(plot) not in data.sections():
                    await _field_harvest.message.channel.send(
                        f":x: Plot id `{plot}` did not exists")

                else:

                    _plot = "plot" + str(plot)

                    if data[_plot]["plant"] in statics.items:

                        if data[_plot]["progress"] == 0:
                            user_data["inventory"][data[_plot]["plant"]] += 1
                            user_data["stats"]["current_exp"] += 10.0
                            await _field_harvest.message.channel.send(
                                f":white_check_mark: {_field_harvest.message.author.mention}, You've harvested item `{data[_plot]['plant']}` from plot id `{plot}`"
                            )
                            data[_plot]["plant"] = True

                            data.write(filename)
                            user_data.write(user_filename)

                        else:
                            await _field_harvest.message.channel.send(
                                f":warning: crop on plot id `{plot}` is not yet mature, will mature in {utils.fsec(data[_plot]['progress'])}"
                            )
                    else:
                        await _field_harvest.message.channel.send(
                            f":x: Plot id {plot} is empty")
Exemple #29
0
async def _field_plant(seed, plot):
    try:
        plot = int(plot)
    except Exception:
        await _field_plant.message.channel.send(
            ":x: use number to select a plot")

    else:

        assigned_ids = utils.get_assigned_user_ids()

        if _field_plant.message.author.id not in assigned_ids:
            await _field_plant.message.channel.send(
                ":warning: Your id is not assigned")

        else:

            fields = utils.get_fields()

            if _field_plant.message.author.id not in fields:
                await _field_plant.message.channel.send(
                    f":x: You don't have a field")

            else:

                if seed not in statics.items:
                    await _field_plant.message.channel.send(
                        f":x: Item `{seed}` did not exists")
                    return

                if not seed.endswith("_seed"):
                    await _field_plant.message.channel.send(
                        f":x: You cannot plant this item: `{seed}`")
                    return

                filename = f"data/fields/{_field_plant.message.author.id}.ini"
                seedfor = seed.split("_seed")[0]

                data = iniparser2.INI(convert_property=True)
                data.read_file(filename)

                if "plot" + str(plot) not in data.sections():
                    await _field_plant.message.channel.send(
                        f":x: Plot id `{plot}` did not exists")

                else:
                    _plot = "plot" + str(plot)

                    if (data[_plot]["progress"] > 0
                            or data[_plot]["plant"] in statics.items):
                        await _field_plant.message.channel.send(
                            f":x: Plot id `{plot}` is not empty")

                    else:
                        data[_plot]["progress"] = statics.farm[seedfor]
                        data[_plot]["plant"] = seedfor

                        data.write(filename)

                        await _field_plant.message.channel.send(
                            f":white_check_mark: {_field_plant.message.author.mention}, You have planted `{seed}`, takes {utils.fsec(statics.farm[seedfor])} to mature."
                        )
Exemple #30
0
async def _guild_create(name):
    assigned_ids = utils.get_assigned_user_ids()

    if _guild_create.message.author.id not in assigned_ids:
        await _guild_create.message.channel.send(
            ":warning: Your id is not assigned")

    else:
        if len(name) < 3:
            await _guild_create.message.channel.send(
                ":x: Guild name is too short, min 3 characters")

        else:
            for gid in utils.get_guilds_id():
                members = utils.get_guild_members_id(gid)

                if _guild_create.message.author.id in members:
                    await _guild_create.message.channel.send(
                        f":x: {_guild_create.message.author.mention}, You are already in a guild"
                    )
                    return

            names = utils.get_guilds_name()

            if name in names:
                await _guild_create.message.channel.send(
                    f":x: A guild with the name `{name}` already exists")

            else:
                gid = utils.new_guild_id()
                filename = f"data/guilds/{gid}.ini"
                user_filename = f"data/users/{_guild_create.message.author.id}.ini"

                user_data = iniparser2.INI(convert_property=True)
                user_data.read_file(user_filename)

                if user_data["stats"]["balance"] < 10_000:
                    await _guild_create.message.channel.send(
                        ":x: You don't have enough coins to create a new guild, coins required 10,000"
                    )
                    return

                if user_data["stats"]["level"] < 5:
                    await _guild_create.message.channel.send(
                        ":x: You must be at least level 5 to create a new guild"
                    )
                    return

                open(filename, "w").close()

                data = iniparser2.INI(convert_property=True)
                data.set_section("info")
                data["info"]["name"] = name
                data["info"]["leader"] = _guild_create.message.author.id
                data["info"]["created"] = datetime.datetime.utcnow()
                data["info"]["logo"] = "no logo"

                data.set_section("stats")
                data["stats"]["level"] = 0
                data["stats"]["current_exp"] = 0.0
                data["stats"]["max_exp"] = 100.0

                data.set_section("members")
                data.set(_guild_create.message.author.id,
                         True,
                         section="members")

                user_data.set("balance",
                              user_data["stats"]["balance"] - 10_000,
                              section="stats")

                data.write(filename)
                user_data.write(user_filename)

                await _guild_create.message.channel.send(
                    f":white_check_mark: Guild has successfully created with id `{gid}`"
                )