@@ -39,7 +39,20 @@ def __init__(self):
39
39
try :
40
40
with open (config_path , "r" , encoding = "utf-8" ) as f :
41
41
config = json .load (f )
42
- self .roles = {role ["title" ].lower (): role for role in config ["roles" ]}
42
+ self .tags = { tag :(desc ,[]) for tag ,desc in config ["tags" ].items ()}
43
+ self .roles = {}
44
+ for role in config ["roles" ]:
45
+ self .roles [role ["title" ].lower ()] = role
46
+ for tag in role ["tags" ]:
47
+ if tag not in self .tags :
48
+ logger .warning (f"[Role] unknown tag { tag } " )
49
+ self .tags [tag ] = (tag , [])
50
+ self .tags [tag ][1 ].append (role )
51
+ for tag in list (self .tags .keys ()):
52
+ if len (self .tags [tag ][1 ]) == 0 :
53
+ logger .debug (f"[Role] no role found for tag { tag } " )
54
+ del self .tags [tag ]
55
+
43
56
if len (self .roles ) == 0 :
44
57
raise Exception ("no role found" )
45
58
self .handlers [Event .ON_HANDLE_CONTEXT ] = self .on_handle_context
@@ -100,6 +113,32 @@ def on_handle_context(self, e_context: EventContext):
100
113
desckey = "description"
101
114
elif clist [0 ] == f"{ trigger_prefix } 设定扮演" :
102
115
customize = True
116
+ elif clist [0 ] == f"{ trigger_prefix } 角色类型" :
117
+ if len (clist ) > 1 :
118
+ tag = clist [1 ].strip ()
119
+ help_text = "角色列表:\n "
120
+ for key ,value in self .tags .items ():
121
+ if value [0 ] == tag :
122
+ tag = key
123
+ break
124
+ if tag == "所有" :
125
+ for role in self .roles .values ():
126
+ help_text += f"{ role ['title' ]} : { role ['remark' ]} \n "
127
+ elif tag in self .tags :
128
+ for role in self .tags [tag ][1 ]:
129
+ help_text += f"{ role ['title' ]} : { role ['remark' ]} \n "
130
+ else :
131
+ help_text = f"未知角色类型。\n "
132
+ help_text += "目前的角色类型有: \n "
133
+ help_text += "," .join ([self .tags [tag ][0 ] for tag in self .tags ])+ "\n "
134
+ else :
135
+ help_text = f"请输入角色类型。\n "
136
+ help_text += "目前的角色类型有: \n "
137
+ help_text += "," .join ([self .tags [tag ][0 ] for tag in self .tags ])+ "\n "
138
+ reply = Reply (ReplyType .INFO , help_text )
139
+ e_context ['reply' ] = reply
140
+ e_context .action = EventAction .BREAK_PASS
141
+ return
103
142
elif sessionid not in self .roleplays :
104
143
return
105
144
logger .debug ("[Role] on_handle_context. content: %s" % content )
@@ -139,8 +178,10 @@ def get_help_text(self, verbose=False, **kwargs):
139
178
help_text = f"使用方法:\n { trigger_prefix } 角色" + " 预设角色名: 设定角色为{预设角色名}。\n " + f"{ trigger_prefix } role" + " 预设角色名: 同上,但使用英文设定。\n "
140
179
help_text += f"{ trigger_prefix } 设定扮演" + " 角色设定: 设定自定义角色人设为{角色设定}。\n "
141
180
help_text += f"{ trigger_prefix } 停止扮演: 清除设定的角色。\n "
142
- help_text += "\n 目前可用的预设角色名列表: \n "
143
- for role in self .roles :
144
- help_text += f"{ role } : { self .roles [role ]['remark' ]} \n "
145
- help_text += f"\n 命令例子: '{ trigger_prefix } 角色 写作助理'"
181
+ help_text += f"{ trigger_prefix } 角色类型" + " 角色类型: 查看某类{角色类型}的所有预设角色,为所有时输出所有预设角色。\n "
182
+ help_text += "\n 目前的角色类型有: \n "
183
+ help_text += "," .join ([self .tags [tag ][0 ] for tag in self .tags ])+ "。\n "
184
+ help_text += f"\n 命令例子: \n { trigger_prefix } 角色 写作助理\n "
185
+ help_text += f"{ trigger_prefix } 角色类型 所有\n "
186
+ help_text += f"{ trigger_prefix } 停止扮演\n "
146
187
return help_text
0 commit comments