This commit is contained in:
Chelsea
2026-02-17 05:46:59 +00:00
parent 596467628f
commit 3d3b80fe96
5 changed files with 49 additions and 8 deletions

View File

@@ -38,6 +38,8 @@ CACHE_FILE = "/app/user_cache.pkl"
intents = discord.Intents.default()
intents.message_content = True
intents.presences = True
intents.members = True
client = discord.Client(intents=intents)
@@ -582,14 +584,21 @@ async def beforeBackgroundLoop():
async def update_presence_tracking():
"""Track Discord presence for users with presence tracking enabled."""
print(f"[DEBUG] update_presence_tracking() called", flush=True)
try:
import core.adaptive_meds as adaptive_meds
import core.postgres as postgres
print(f"[DEBUG] Running presence tracking. Guilds: {len(client.guilds)}", flush=True)
for guild in client.guilds:
print(f"[DEBUG] Guild: {guild.name} ({guild.id}) - Members: {guild.member_count}")
# Get all users with presence tracking enabled
settings = postgres.select(
"adaptive_med_settings", {"presence_tracking_enabled": True}
)
print(f"[DEBUG] Found {len(settings)} users with presence tracking enabled")
for setting in settings:
user_uuid = setting.get("user_uuid")
@@ -600,21 +609,35 @@ async def update_presence_tracking():
continue
discord_user_id = notif_settings[0].get("discord_user_id")
print(f"[DEBUG] Looking for Discord user: {discord_user_id}", flush=True)
if not discord_user_id:
print(f"[DEBUG] No Discord ID for user {user_uuid}", flush=True)
continue
# Get the user from Discord
# Get the member from a shared guild (needed for presence data)
try:
discord_user = await client.fetch_user(int(discord_user_id))
if not discord_user:
member = None
target_id = int(discord_user_id)
# Search through all guilds the bot is in
for guild in client.guilds:
member = guild.get_member(target_id)
print(f"[DEBUG] Checked guild {guild.name}, member: {member}", flush=True)
if member:
break
if not member:
print(f"[DEBUG] User {discord_user_id} not found in any shared guild", flush=True)
continue
# Check if user is online
is_online = discord_user.status != discord.Status.offline
is_online = member.status != discord.Status.offline
print(f"[DEBUG] User status: {member.status}, is_online: {is_online}", flush=True)
# Get current presence from DB
presence = adaptive_meds.get_user_presence(user_uuid)
was_online = presence.get("is_currently_online") if presence else False
print(f"[DEBUG] Previous state: {was_online}, Current: {is_online}", flush=True)
# Update presence if changed
if is_online != was_online:
@@ -644,7 +667,12 @@ async def update_presence_tracking():
@tasks.loop(seconds=30)
async def presenceTrackingLoop():
"""Track Discord presence every 30 seconds."""
await update_presence_tracking()
try:
await update_presence_tracking()
except Exception as e:
print(f"[ERROR] presenceTrackingLoop failed: {e}", flush=True)
import traceback
traceback.print_exc()
@presenceTrackingLoop.before_loop
@@ -711,10 +739,12 @@ async def beforeSnitchCheckLoop():
@client.event
async def on_ready():
print(f"Bot logged in as {client.user}")
print(f"Bot logged in as {client.user}", flush=True)
print(f"Connected to {len(client.guilds)} guilds", flush=True)
loadCache()
backgroundLoop.start()
presenceTrackingLoop.start()
print(f"[DEBUG] Presence tracking loop started", flush=True)
snitchCheckLoop.start()