import asyncio import logging import discord from cogs.sentiment.log_utils import log_action from cogs.sentiment.state import save_user_state logger = logging.getLogger("bcs.sentiment") async def handle_coherence_alert( bot, message: discord.Message, degradation: dict, coherence_config: dict, db_message_id: int | None, dirty_users: set[int], ): flag = degradation["flag"] messages_map = coherence_config.get("messages", {}) alert_text = messages_map.get(flag, messages_map.get( "default", "You okay there, {username}? That message was... something." )).format(username=message.author.display_name) await message.channel.send(alert_text) await log_action( message.guild, f"**COHERENCE ALERT** | {message.author.mention} | " f"Score: {degradation['current']:.2f} | Baseline: {degradation['baseline']:.2f} | " f"Drop: {degradation['drop']:.2f} | Flag: {flag}", ) logger.info( "Coherence alert for %s: score=%.2f baseline=%.2f drop=%.2f flag=%s", message.author, degradation["current"], degradation["baseline"], degradation["drop"], flag, ) asyncio.create_task(bot.db.save_action( guild_id=message.guild.id, user_id=message.author.id, username=message.author.display_name, action_type="coherence_alert", message_id=db_message_id, details=f"score={degradation['current']:.2f} baseline={degradation['baseline']:.2f} drop={degradation['drop']:.2f} flag={flag}", )) save_user_state(bot, dirty_users, message.author.id)