Untitled
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