From 5675dfd20b24f1e0eef06b11d9ec41a894d3a5bf Mon Sep 17 00:00:00 2001 From: salmonik Date: Tue, 28 Apr 2026 20:05:36 +0200 Subject: multitude of changes. but primarly, use db for all data. Signed-off-by: salmonik --- cogs/vclogs.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 13 deletions(-) (limited to 'cogs/vclogs.py') diff --git a/cogs/vclogs.py b/cogs/vclogs.py index d0c4825..404ffe0 100644 --- a/cogs/vclogs.py +++ b/cogs/vclogs.py @@ -4,7 +4,6 @@ # https://codeberg.org/salmonik/senator-sperma import datetime -import json import logging import os import asyncio @@ -13,24 +12,69 @@ from discord.ext import commands from gtts import gTTS from cogs.voice import get_voice_manager from cogs.utils.settings import get_volume, save_settings +from cogs.utils.database import get_connection, init_database import tempfile logger = logging.getLogger(__name__) -ACTIVITY_FILE = os.path.join(tempfile.gettempdir(), 'voice_activity.json') +init_database() def load_activity_data(): - if os.path.exists(ACTIVITY_FILE): - with open(ACTIVITY_FILE, 'r') as f: - return json.load(f) - return {} + try: + conn = get_connection() + c = conn.cursor() + c.execute("SELECT user_id, join_time, total_active, total_afk, is_afk, afk_start, active_start, channel_name FROM voice_activity") + rows = c.fetchall() + conn.close() + + return { + row[0]: { + "join_time": row[1], + "total_active": row[2], + "total_afk": row[3], + "is_afk": bool(row[4]), + "afk_start": row[5], + "active_start": row[6], + "channel_name": row[7], + } + for row in rows + } + except Exception as e: + logger.error(f"Error loading voice activity: {e}") + return {} def save_activity_data(data): - with open(ACTIVITY_FILE, 'w') as f: - json.dump(data, f, indent=4) + try: + conn = get_connection() + c = conn.cursor() + c.execute("PRAGMA foreign_keys = ON") + + c.execute("DELETE FROM voice_activity") + + for user_id, user_data in data.items(): + c.execute( + """INSERT INTO voice_activity (user_id, join_time, total_active, total_afk, is_afk, afk_start, active_start, channel_name) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)""", + ( + user_id, + user_data.get("join_time"), + user_data.get("total_active", 0), + user_data.get("total_afk", 0), + int(user_data.get("is_afk", False)), + user_data.get("afk_start"), + user_data.get("active_start"), + user_data.get("channel_name"), + ), + ) + + conn.commit() + conn.close() + logger.info(f"Saved voice activity for {len(data)} users") + except Exception as e: + logger.error(f"Error saving voice activity: {e}") def format_duration(seconds): @@ -168,7 +212,7 @@ class VcLogs(commands.Cog): } save_activity_data(activity_data) - message = f"[{current_time}] {member.name} dołączył na {after.channel.name}" + message = f"[{current_time}] {member.name} dołączył na {after.channel.name} " tts_text = f"{member.display_name} sie zespawnił" tts_channel = after.channel await log_channel.send(message) @@ -189,7 +233,7 @@ class VcLogs(commands.Cog): afk_str = format_duration(data['total_afk']) message = ( - f"[{current_time}] {member.name} rozłączył się z {before.channel.name}\n" + f"[{current_time}] {member.name} rozłączył się z {before.channel.name} \n" f"Aktywny: {active_str} | AFK: {afk_str}" ) tts_text = f"{member.display_name} jest chujem" @@ -200,7 +244,7 @@ class VcLogs(commands.Cog): del activity_data[user_id] save_activity_data(activity_data) else: - message = f"[{current_time}] {member.name} rozłączył się z {before.channel.name}" + message = f"[{current_time}] {member.name} rozłączył się z {before.channel.name} " tts_text = f"{member.display_name} jest chujem" tts_channel = before.channel await log_channel.send(message) @@ -224,7 +268,7 @@ class VcLogs(commands.Cog): else: activity = "odgłuchnął" - message = ( f"[{current_time}] {member.name} {activity} się na {after.channel.name}\n" + message = ( f"[{current_time}] {member.name} {activity} się na {after.channel.name} \n" f"AFK: {afk_str}" ) await log_channel.send(message) logger.info(f"User returned from AFK: {message}") @@ -244,7 +288,7 @@ class VcLogs(commands.Cog): activity = "ogłuchnął" active_str = format_duration(active_since_start) - message = ( f"[{current_time}] {member.name} {activity} się na {after.channel.name}\n" + message = ( f"[{current_time}] {member.name} {activity} się na {after.channel.name} \n" f"Aktywny: {active_str}" ) await log_channel.send(message) logger.info(f"User went AFK: {message}") -- cgit v1.2.3