This commit is contained in:
Windpicker-owo
2025-11-13 16:23:00 +08:00

View File

@@ -47,16 +47,23 @@ def get_mood(chat_id: str) -> str:
return chat_mood.mood_state
def set_mood(chat_id: str, new_mood: str):
def set_mood(chat_id: str, new_mood: str) -> bool:
"""强制设定指定聊天的新情绪状态
Args:
chat_id (str): 聊天ID
new_mood (str): 新的情绪状态
Returns:
bool: 操作是否成功
"""
chat_mood = mood_manager.get_mood_by_chat_id(chat_id)
chat_mood.mood_state = new_mood
logger.info(f"[{chat_id}] 情绪状态被强制设置为: {new_mood}")
try:
chat_mood = mood_manager.get_mood_by_chat_id(chat_id)
chat_mood.mood_state = new_mood
logger.info(f"[{chat_id}] 情绪状态被强制设置为: {new_mood}")
return True
except Exception as e:
logger.error(f"强制设定指定聊天的新情绪状态时发生错误:{e}")
return False
async def lock_mood(chat_id: str, duration: float | None = None):
@@ -66,30 +73,39 @@ async def lock_mood(chat_id: str, duration: float | None = None):
Args:
chat_id (str): 聊天ID
duration (Optional[float]): 锁定时长(秒)。如果为 None则永久锁定直到手动解锁。
Returns:
bool: 操作是否成功
"""
if chat_id in _unlock_tasks:
_unlock_tasks[chat_id].cancel()
del _unlock_tasks[chat_id]
try:
if chat_id in _unlock_tasks:
_unlock_tasks[chat_id].cancel()
del _unlock_tasks[chat_id]
mood_manager.insomnia_chats.add(chat_id)
logger.info(f"[{chat_id}] 情绪已锁定。")
mood_manager.insomnia_chats.add(chat_id)
logger.info(f"[{chat_id}] 情绪已锁定。")
if duration:
logger.info(f"[{chat_id}] 情绪将于 {duration} 秒后自动解锁。")
if duration:
logger.info(f"[{chat_id}] 情绪将于 {duration} 秒后自动解锁。")
async def _unlock_after():
await asyncio.sleep(duration)
if chat_id in mood_manager.insomnia_chats:
await unlock_mood(chat_id)
logger.info(f"[{chat_id}] 情绪已自动解锁。")
task = asyncio.create_task(_unlock_after())
_unlock_tasks[chat_id] = task
async def _unlock_after():
await asyncio.sleep(duration)
if chat_id in mood_manager.insomnia_chats:
await unlock_mood(chat_id)
logger.info(f"[{chat_id}] 情绪已自动解锁。")
task = asyncio.create_task(_unlock_after())
_unlock_tasks[chat_id] = task
return True
except Exception as e:
logger.error(f"锁定指定聊天的情绪时发生错误:{e}")
return False
async def unlock_mood(chat_id: str):
async def unlock_mood(chat_id: str) -> bool:
"""
立即解除情绪锁定。
Returns:
bool: 如果成功解锁则返回 True如果情绪未被锁定则返回 False。
"""
if chat_id in _unlock_tasks:
_unlock_tasks[chat_id].cancel()
@@ -98,6 +114,8 @@ async def unlock_mood(chat_id: str):
if chat_id in mood_manager.insomnia_chats:
mood_manager.insomnia_chats.remove(chat_id)
logger.info(f"[{chat_id}] 情绪已手动解锁。")
return True
return False
def is_mood_locked(chat_id: str) -> bool: