role: add tags for role

This commit is contained in:
lanvent
2023-04-06 14:01:14 +08:00
parent 5fe8d9a855
commit 938e3b5cf2
3 changed files with 434 additions and 204 deletions

View File

@@ -39,7 +39,20 @@ class Role(Plugin):
try:
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
self.roles = {role["title"].lower(): role for role in config["roles"]}
self.tags = { tag:(desc,[]) for tag,desc in config["tags"].items()}
self.roles = {}
for role in config["roles"]:
self.roles[role["title"].lower()] = role
for tag in role["tags"]:
if tag not in self.tags:
logger.warning(f"[Role] unknown tag {tag} ")
self.tags[tag] = (tag, [])
self.tags[tag][1].append(role)
for tag in list(self.tags.keys()):
if len(self.tags[tag][1]) == 0:
logger.debug(f"[Role] no role found for tag {tag} ")
del self.tags[tag]
if len(self.roles) == 0:
raise Exception("no role found")
self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context
@@ -100,6 +113,32 @@ class Role(Plugin):
desckey = "description"
elif clist[0] == f"{trigger_prefix}设定扮演":
customize = True
elif clist[0] == f"{trigger_prefix}角色类型":
if len(clist) >1:
tag = clist[1].strip()
help_text = "角色列表:\n"
for key,value in self.tags.items():
if value[0] == tag:
tag = key
break
if tag == "所有":
for role in self.roles.values():
help_text += f"{role['title']}: {role['remark']}\n"
elif tag in self.tags:
for role in self.tags[tag][1]:
help_text += f"{role['title']}: {role['remark']}\n"
else:
help_text = f"未知角色类型。\n"
help_text += "目前的角色类型有: \n"
help_text += "".join([self.tags[tag][0] for tag in self.tags])+"\n"
else:
help_text = f"请输入角色类型。\n"
help_text += "目前的角色类型有: \n"
help_text += "".join([self.tags[tag][0] for tag in self.tags])+"\n"
reply = Reply(ReplyType.INFO, help_text)
e_context['reply'] = reply
e_context.action = EventAction.BREAK_PASS
return
elif sessionid not in self.roleplays:
return
logger.debug("[Role] on_handle_context. content: %s" % content)
@@ -139,8 +178,10 @@ class Role(Plugin):
help_text = f"使用方法:\n{trigger_prefix}角色"+" 预设角色名: 设定角色为{预设角色名}\n"+f"{trigger_prefix}role"+" 预设角色名: 同上,但使用英文设定。\n"
help_text += f"{trigger_prefix}设定扮演"+" 角色设定: 设定自定义角色人设为{角色设定}\n"
help_text += f"{trigger_prefix}停止扮演: 清除设定的角色。\n"
help_text += "\n目前可用的预设角色名列表: \n"
for role in self.roles:
help_text += f"{role}: {self.roles[role]['remark']}\n"
help_text += f"\n命令例子: '{trigger_prefix}角色 写作助理'"
help_text += f"{trigger_prefix}角色类型"+" 角色类型: 查看某类{角色类型}的所有预设角色,为所有时输出所有预设角色。\n"
help_text += "\n目前的角色类型有: \n"
help_text += "".join([self.tags[tag][0] for tag in self.tags])+"\n"
help_text += f"\n命令例子: \n{trigger_prefix}角色 写作助理\n"
help_text += f"{trigger_prefix}角色类型 所有\n"
help_text += f"{trigger_prefix}停止扮演\n"
return help_text