コード例 #1
0
ファイル: mod_userlog.py プロジェクト: hax4dazy/Komet-CL
    def get_userlog_embed_for_id(self, uid: str, name: str, own: bool = False,
                                 event=""):
        own_note = " Good for you!" if own else ""
        wanted_events = ["warns", "bans", "kicks", "mutes", "notes"]
        if event and not isinstance(event, list):
            wanted_events = [event]
        embed = discord.Embed(color=discord.Color.dark_red())
        embed.set_author(name=f"Userlog for {name}")
        userlog = get_userlog()

        if uid not in userlog:
            embed.description = f"There are none!{own_note} (no entry)"
            embed.color = discord.Color.green()
            return embed

        for event_type in wanted_events:
            if event_type in userlog[uid] and userlog[uid][event_type]:
                event_name = userlog_event_types[event_type]
                for idx, event in enumerate(userlog[uid][event_type]):
                    issuer = "" if own else f"Issuer: {event['issuer_name']} "\
                                            f"({event['issuer_id']})\n"
                    embed.add_field(name=f"{event_name} {idx + 1}: "
                                         f"{event['timestamp']}",
                                    value=issuer + f"Reason: {event['reason']}",
                                    inline=False)

        if not own and "watch" in userlog[uid]:
            watch_state = "" if userlog[uid]["watch"] else "NOT "
            embed.set_footer(text=f"User is {watch_state}under watch.")

        if not embed.fields:
            embed.description = f"There are none!{own_note}"
            embed.color = discord.Color.green()
        return embed
コード例 #2
0
ファイル: mod_mail.py プロジェクト: tumGER/Komet-CL
    async def resolved(self, ctx):
        """Marks your last mod mail message as resolved"""

        # We should probably delete the message for privacy.
        await ctx.message.delete()

        logs = get_userlog()
        uid = str(ctx.author.id)

        if uid not in logs or "mail" not in logs[uid] or len(
                logs[uid]["mail"]) == 0:
            await ctx.send("No mod mail message to mark as resolved.")
            return

        if logs[uid]["mail"][-1]["resolved"]:
            await ctx.send(
                "Last mod mail message is already marked as resolved.")
            return

        logs[uid]["mail"][-1]["resolved"] = True
        set_userlog(json.dumps(logs))

        modmail_channel = self.bot.get_channel(config.modmail_channel)
        message = await modmail_channel.fetch_message(
            logs[uid]["mail"][-1]["message_id"])
        await message.edit(
            embed=self.build_embed(ctx.author, logs[uid]["mail"][-1]))

        await ctx.send(f"{ctx.author.mention} - Message marked as resolved.")
コード例 #3
0
ファイル: mod_stats.py プロジェクト: tumGER/Komet-CL
    def get_stats_for_id(self, uid: int, events: list):
        userlog = get_userlog()

        results = {
            "warns": None,
            "mutes": None,
            "kicks": None,
            "bans": None,
            "notes": None
        }

        for event in events:
            results[event] = 0

        if len(userlog.values()) == 0:
            return results

        for logs in userlog.values():
            for event in events:
                if event not in logs:
                    continue

                for loggedEvent in logs[event]:
                    if uid == loggedEvent["issuer_id"]:
                        results[event] += 1

        return results
コード例 #4
0
ファイル: mod_mail.py プロジェクト: tumGER/Komet-CL
    async def modmail(self, ctx, *, body: str = ""):
        """Sends a mod mail message"""

        # We should probably delete the message for privacy.
        if ctx.guild:
            await ctx.message.delete()

        # Prevent sending of blank messages.
        if len(body.strip()) == 0:
            await ctx.send("A message can not be empty.")
            return

        if len(body.strip()) > 2048:
            await ctx.send("A message can not be longer than 2048 characters.")
            return

        logs = get_userlog()
        uid = str(ctx.author.id)

        # Get the timeout from the config and default it to 15 seconds.
        timeout = getattr(config, "modmail_timeout", 15)

        # Make sure our user exists in the userlog, and they've sent a message before.
        if uid in logs and "mail" in logs[uid] and len(logs[uid]["mail"]) != 0:
            last_message = logs[uid]["mail"][-1]

            # Prevents sending the same message.
            if last_message["body"].strip() == body.strip():
                await ctx.send("Unable to send message.")
                return

            # Rate limit messages.
            delta_time = int(time.time()) - last_message["timestamp"]
            if delta_time < timeout:
                await ctx.send(
                    f"Please wait {timeout - delta_time} seconds before sending another message."
                )
                return

        message = {
            "body": body.strip(),
            "timestamp": int(time.time()),
            "resolved": False,
            "replier_id": 0,
            "replier_name": "",
            "message_id": 0,
        }

        # Send message
        modmail_channel = self.bot.get_channel(config.modmail_channel)
        message["message_id"] = (await modmail_channel.send(
            embed=self.build_embed(ctx.author, message))).id

        # Log messages to the userlog.
        self.add_mail_log(uid, message)

        await ctx.send(f"{ctx.author.mention} - Message sent.")
コード例 #5
0
ファイル: mod_mail.py プロジェクト: tumGER/Komet-CL
    def add_mail_log(self, uid, message):
        userlogs = get_userlog()
        uid = str(uid)

        if uid not in userlogs:
            userlogs[uid] = get_blank_userlog()

        userlogs[uid]["mail"].append(message)
        set_userlog(json.dumps(userlogs))
コード例 #6
0
 def clear_event_from_id(self, uid: str, event_type):
     userlog = get_userlog()
     if uid not in userlog:
         return f"<@{uid}> has no {event_type}!"
     event_count = len(userlog[uid][event_type])
     if not event_count:
         return f"<@{uid}> has no {event_type}!"
     userlog[uid][event_type] = []
     set_userlog(json.dumps(userlog))
     return f"<@{uid}> no longer has any {event_type}!"
コード例 #7
0
 def delete_event_from_id(self, uid: str, idx: int, event_type):
     userlog = get_userlog()
     if uid not in userlog:
         return f"<@{uid}> has no {event_type}!"
     event_count = len(userlog[uid][event_type])
     if not event_count:
         return f"<@{uid}> has no {event_type}!"
     if idx > event_count:
         return "Index is higher than "\
                f"count ({event_count})!"
     if idx < 1:
         return "Index is below 1!"
     event = userlog[uid][event_type][idx - 1]
     event_name = userlog_event_types[event_type]
     embed = discord.Embed(color=discord.Color.dark_red(),
                           title=f"{event_name} {idx} on "
                           f"{event['timestamp']}",
                           description=f"Issuer: {event['issuer_name']}\n"
                           f"Reason: {event['reason']}")
     del userlog[uid][event_type][idx - 1]
     set_userlog(json.dumps(userlog))
     return embed