Example #1
0
 async def on_task_due(self, guild_id: int, task: dict):
     """This fires when a task is due."""
     projects = ProjectHandler(guild_id)
     project = projects.find_project(task.get('project'))
     completed = self.bot.db("guilds").find(
         str(guild_id)).get('projects')[project.get("number")].get("tasks")[
             task.get("number")].get("completed")
     if completed:
         return
     channel = await self.bot.fetch_channel(int(project.get("channel")))
     members = self.bot.db("guilds").find(
         str(guild_id)).get('projects')[project.get("number")].get("tasks")[
             task.get("number")].get("assigned")
     members = [(await self.bot.fetch_user(member)) for member in members]
     new_value = task.get("value") * 10 / 100
     if new_value < 1:
         new_value = 1
     guild = self.bot.db("guilds").find(str(guild_id))
     guild.get('projects')[project.get("number")].get("tasks")[task.get(
         "number")]["value"] = new_value
     self.bot.db("guilds").update(str(guild_id), guild)
     task = guild.get('projects')[project.get("number")].get("tasks")[
         task.get("number")]
     task_name = task.get("name")
     task_value = task.get("value")
     await channel.send(f"**> Task bounty update:** Task `{task_name}` "
                        f"is now valued at `{task_value}` points.")
     for member in members:
         await member.send(f":alarm_clock: The task {task_name}"
                           " is now overdue. And as such, the bounty is "
                           "10% of what it originally was."
                           f" Bounty now: `{task_value}` points.")
Example #2
0
    async def on_task_revoke(self, guild_id: int, task: dict) -> None:
        """This is fired when someone marks a task as incomplete."""
        projects = ProjectHandler(guild_id)
        pointhandler = Points()
        all_logs = list(self.bot.db("logs").find_all())
        for member in task.get("assigned"):
            task_name = task.get("name")
            logs = list(
                filter(
                    lambda all_logs: all_logs['name'] ==
                    f"point_addition_{member}_{task_name}", all_logs))
            points_gained = [log.get("amount") for log in logs]
            for points in points_gained:
                pointhandler.remove_points(guild_id, task, points)

        project = projects.find_project(task.get("project"))
        channel = await self.bot.fetch_channel(int(project.get("channel")))
        task_name = task.get("name")
        task_reward = self.bot.db("guilds").find(guild_id).get("projects")[
            project.get('number')].get("tasks")[task.get("number")]["value"]
        message = await channel.fetch_message(
            int(projects.find_project(task.get("project")).get("message")))
        await message.edit(
            content=projects.project_progress_bar(task.get("project")))
        return await channel.send(f"**> Task revoked:** The task `{task_name}`"
                                  " was marked as incomplete. "
                                  f"The bounty of `{task_reward}` "
                                  "points is back up.")
Example #3
0
    async def on_task_complete(self, guild_id: int, task: dict) -> None:
        """This event is fired on the completion of a task."""
        pointhandler = Points()
        projects = ProjectHandler(guild_id)
        project = projects.find_project(task.get("project"))
        value = self.bot.db("guilds").find(guild_id).get("projects")[
            project.get('number')].get("tasks")[task.get("number")]["value"]
        # start_timestamp = (datetime.datetime.now() -
        #                 task.get("start_timestamp")).total_seconds()
        # end_timestamp = (task.get("end_timestamp") -
        #                datetime.datetime.now()).total_seconds()
        pointhandler.add_points(guild_id, task, value)

        channel = await self.bot.fetch_channel(int(project.get("channel")))
        task_name = task.get("name")
        value = self.bot.db("guilds").find(guild_id).get("projects")[
            project.get('number')].get("tasks")[task.get("number")]["value"]
        message = await channel.fetch_message(
            int(projects.find_project(task.get("project")).get("message")))
        await message.edit(
            content=projects.project_progress_bar(task.get("project")))
        return await channel.send(f"**> Task completion:** The task "
                                  f"`{task_name}` was completed and "
                                  f" the bounty of `{value}` "
                                  "points has been claimed!")
Example #4
0
 async def on_task_member_update(self, task: dict, guild_id: int,
                                 members: list) -> None:
     """This sends a message when a member is added"""
     projects = ProjectHandler(guild_id)
     project = projects.find_project(task.get("project"))
     guild = (await self.bot.fetch_guild(guild_id))
     channel = await self.bot.fetch_channel(int(project.get("channel")))
     members = [(await guild.fetch_member(member)) for member in members]
     count = len(members)
     task_name = task.get("name")
     if count == 1:
         member = members[0]
         return await channel.send(f"**> Member Update:** `{member}` "
                                   f"was added to `{task_name}`.")
     if count == 2:
         return await channel.send(f"**> Member Update:** `{members[0]}` "
                                   f"and `{members[1]}` were added "
                                   f"to `{task_name}`.")
     else:
         last_member = members[count - 1]
         members = members.pop(count - 1)
         string = "`"
         members = string + "`, ".join(str(x) for x in members) + string
         members = members + f" and `{last_member}``"
         return await channel.send(f"**> Member Update:** {members}"
                                   f" were added to `{task_name}`.")
Example #5
0
 async def on_task_create(self, guild_id: int, task: dict) -> None:
     """Sends a message on the creation of a task to the project channel."""
     projects = ProjectHandler(guild_id)
     project = projects.find_project(task.get("project"))
     channel = await self.bot.fetch_channel(int(project.get("channel")))
     task_name = task.get("name")
     task_reward = task.get("value")
     message = await channel.fetch_message(
         int(projects.find_project(task.get("project")).get("message")))
     await message.edit(
         content=projects.project_progress_bar(task.get("project")))
     await channel.send(f"**> Task creation:** The task `{task_name}` "
                        "was created. Bounty for completion: "
                        f"`{task_reward}` points!")
Example #6
0
 async def projects(self, ctx) -> None:
     """Project related commands."""
     ctx.projects = ProjectHandler(ctx.guild.id)