diff --git a/plugins/dungeon/dungeon.py b/plugins/dungeon/dungeon.py index 955840f..9df7230 100644 --- a/plugins/dungeon/dungeon.py +++ b/plugins/dungeon/dungeon.py @@ -3,6 +3,8 @@ from bridge.bridge import Bridge from bridge.context import ContextType from bridge.reply import Reply, ReplyType +from common.expired_dict import ExpiredDict +from config import conf import plugins from plugins import * from common.log import logger @@ -38,7 +40,11 @@ class Dungeon(Plugin): super().__init__() self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context logger.info("[Dungeon] inited") - self.games = {} + # 目前没有设计session过期事件,这里先暂时使用过期字典 + if conf().get('expires_in_seconds'): + self.games = ExpiredDict(conf().get('expires_in_seconds')) + else: + self.games = dict() def on_handle_context(self, e_context: EventContext): diff --git a/plugins/role/role.py b/plugins/role/role.py index 91c09be..e092914 100644 --- a/plugins/role/role.py +++ b/plugins/role/role.py @@ -14,14 +14,17 @@ class RolePlay(): def __init__(self, bot, sessionid, desc, wrapper=None): self.bot = bot self.sessionid = sessionid - bot.sessions.clear_session(sessionid) - bot.sessions.build_session(sessionid, desc) self.wrapper = wrapper or "%s" # 用于包装用户输入 + self.desc = desc def reset(self): self.bot.sessions.clear_session(self.sessionid) def action(self, user_action): + session = self.bot.sessions.build_session(self.sessionid, self.desc) + if session[0]['role'] == 'system' and session[0]['content'] != self.desc: # 目前没有触发session过期事件,这里先简单判断,然后重置 + self.reset() + self.bot.sessions.build_session(self.sessionid, self.desc) prompt = self.wrapper % user_action return prompt @@ -105,7 +108,7 @@ class Role(Plugin): e_context.action = EventAction.BREAK_PASS return else: - self.roleplays[sessionid] = RolePlay(bot, sessionid, self.roles[role][desckey],self.roles[role].get("wrapper","%s")) + self.roleplays[sessionid] = RolePlay(bot, sessionid, self.roles[role][desckey], self.roles[role].get("wrapper","%s")) reply = Reply(ReplyType.INFO, f"角色设定为 {role} :\n"+self.roles[role][desckey]) e_context['reply'] = reply e_context.action = EventAction.BREAK_PASS