Untitled
unknown
python
a year ago
4.5 kB
8
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