Untitled

 avatar
unknown
python
a year ago
4.5 kB
4
Indexable
import discord
from discord.ext import commands
import datetime
from typing import List, Tuple

class Activity(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.slash_command(name="checkactivitystaff", description="Überprüft die Aktivität der Teammitglieder")
    @commands.has_permissions(manage_roles=True)
    async def check_activity_staff(self, ctx: discord.ApplicationContext):
        await ctx.defer(ephemeral=True)

        staff_role = ctx.guild.get_role(1243633506119319613)
        if not staff_role:
            await ctx.respond("Die angegebene Teammitglied-Rolle wurde nicht gefunden.", ephemeral=True)
            return

        excluded_categories = [1243629247260524677, 1234149541037740152, 1243630049169768448, 1234149545584230450, 1234149542291701790]
        log_channel = ctx.guild.get_channel(1243631483751763999)

        if not log_channel:
            await ctx.respond("Der angegebene Log-Kanal wurde nicht gefunden.", ephemeral=True)
            return

        seven_days_ago = datetime.datetime.utcnow() - datetime.timedelta(days=7)
        activity_data: List[Tuple[discord.Member, int, discord.TextChannel, int]] = []

        for member in staff_role.members:
            message_count = 0
            most_active_channel = None
            most_active_count = 0

            for channel in ctx.guild.text_channels:
                if channel.category and channel.category.id in excluded_categories:
                    continue

                channel_count = 0
                async for message in channel.history(after=seven_days_ago, limit=None):
                    if message.author == member:
                        channel_count += 1

                message_count += channel_count

                if channel_count > most_active_count:
                    most_active_count = channel_count
                    most_active_channel = channel

            activity_data.append((member, message_count, most_active_channel, most_active_count))

        # Sortiere die Aktivitätsdaten nach der Nachrichtenanzahl (absteigend)
        activity_data.sort(key=lambda x: x[1], reverse=True)

        # Erstelle die Übersicht
        overview_embed = discord.Embed(
            title="Übersicht der Teammitglieder-Aktivität",
            color=discord.Color.blue(),
            description=f"Zeitraum: {seven_days_ago.strftime('%d.%m.%Y')} bis {datetime.datetime.utcnow().strftime('%d.%m.%Y')}"
        )

        for i, (member, message_count, most_active_channel, most_active_count) in enumerate(activity_data, 1):
            status = "Bestanden" if message_count >= 100 else "Nicht bestanden"
            channel_info = f"{most_active_channel.mention} ({most_active_count})" if most_active_channel else "Keine Aktivität"
            overview_embed.add_field(
                name=f"{i}. {member.display_name}",
                value=f"Nachrichten: {message_count}\nStatus: {status}\nAktivster Kanal: {channel_info}",
                inline=False
            )

        await log_channel.send(embed=overview_embed)

        for member, message_count, most_active_channel, most_active_count in activity_data:
            passed = message_count >= 100
            status = "bestanden" if passed else "nicht bestanden"

            embed = discord.Embed(
                title=f"Aktivitätsprüfung für {member.display_name}",
                color=discord.Color.green() if passed else discord.Color.red()
            )
            embed.add_field(name="Status", value=f"Aktivität {status}", inline=False)
            embed.add_field(name="Zeitraum", value=f"Von {seven_days_ago.strftime('%d.%m.%Y')} bis {datetime.datetime.utcnow().strftime('%d.%m.%Y')}", inline=False)
            embed.add_field(name="Gesamtnachrichten", value=str(message_count), inline=False)

            if most_active_channel:
                embed.add_field(name="Aktivster Kanal", value=f"{most_active_channel.mention} ({most_active_count} Nachrichten)", inline=False)
            else:
                embed.add_field(name="Aktivster Kanal", value="Keine Aktivität gefunden", inline=False)

            await log_channel.send(embed=embed)

        await ctx.respond("Die Aktivitätsprüfung wurde abgeschlossen. Ergebnisse und Übersicht wurden im Log-Kanal gepostet.", ephemeral=True)

def setup(bot):
    bot.add_cog(Activity(bot))
Editor is loading...
Leave a Comment