diff --git a/src/plugin_system/apis/mood_api.py b/src/plugin_system/apis/mood_api.py index 612fb8b4e..d7afd3ed0 100644 --- a/src/plugin_system/apis/mood_api.py +++ b/src/plugin_system/apis/mood_api.py @@ -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: