1010
1111
1212def _validate_log_level (value : str ) -> str :
13- """验证日志级别 """
13+ """Validate log level """
1414 value = value .upper ()
1515 if value not in ["DEBUG" , "INFO" , "WARNING" , "ERROR" , "CRITICAL" ]:
1616 raise click .ClickException (
17- "日志级别必须是 DEBUG/INFO/WARNING/ERROR/CRITICAL 之一 " ,
17+ "Log level must be one of DEBUG/INFO/WARNING/ERROR/CRITICAL" ,
1818 )
1919 return value
2020
2121
2222def _validate_dashboard_port (value : str ) -> int :
23- """验证 Dashboard 端口 """
23+ """Validate Dashboard port """
2424 try :
2525 port = int (value )
2626 if port < 1 or port > 65535 :
27- raise click .ClickException ("端口必须在 1-65535 范围内 " )
27+ raise click .ClickException ("Port must be in range 1-65535" )
2828 return port
2929 except ValueError :
30- raise click .ClickException ("端口必须是数字 " )
30+ raise click .ClickException ("Port must be a number " )
3131
3232
3333def _validate_dashboard_username (value : str ) -> str :
34- """验证 Dashboard 用户名 """
34+ """Validate Dashboard username """
3535 if not value :
36- raise click .ClickException ("用户名不能为空 " )
36+ raise click .ClickException ("Username cannot be empty " )
3737 return value
3838
3939
4040def _validate_dashboard_password (value : str ) -> str :
41- """验证 Dashboard 密码 """
41+ """Validate Dashboard password """
4242 if not value :
43- raise click .ClickException ("密码不能为空 " )
43+ raise click .ClickException ("Password cannot be empty " )
4444 return hashlib .md5 (value .encode ()).hexdigest ()
4545
4646
4747def _validate_timezone (value : str ) -> str :
48- """验证时区 """
48+ """Validate timezone """
4949 try :
5050 zoneinfo .ZoneInfo (value )
5151 except Exception :
52- raise click .ClickException (f"无效的时区 : { value } ,请使用有效的IANA时区名称 " )
52+ raise click .ClickException (f"Invalid timezone : { value } . Please use a valid IANA timezone name " )
5353 return value
5454
5555
5656def _validate_callback_api_base (value : str ) -> str :
57- """验证回调接口基址 """
57+ """Validate callback API base URL """
5858 if not value .startswith ("http://" ) and not value .startswith ("https://" ):
59- raise click .ClickException ("回调接口基址必须以 http:// 或 https:// 开头 " )
59+ raise click .ClickException ("Callback API base must start with http:// or https://" )
6060 return value
6161
6262
63- # 可通过CLI设置的配置项,配置键到验证器函数的映射
63+ # Configuration items settable via CLI, mapping config keys to validator functions
6464CONFIG_VALIDATORS : dict [str , Callable [[str ], Any ]] = {
6565 "timezone" : _validate_timezone ,
6666 "log_level" : _validate_log_level ,
@@ -72,11 +72,11 @@ def _validate_callback_api_base(value: str) -> str:
7272
7373
7474def _load_config () -> dict [str , Any ]:
75- """加载或初始化配置文件 """
75+ """Load or initialize config file """
7676 root = get_astrbot_root ()
7777 if not check_astrbot_root (root ):
7878 raise click .ClickException (
79- f"{ root } 不是有效的 AstrBot 根目录,如需初始化请使用 astrbot init" ,
79+ f"{ root } is not a valid AstrBot root directory. Use ' astrbot init' to initialize " ,
8080 )
8181
8282 config_path = root / "data" / "cmd_config.json"
@@ -91,11 +91,11 @@ def _load_config() -> dict[str, Any]:
9191 try :
9292 return json .loads (config_path .read_text (encoding = "utf-8-sig" ))
9393 except json .JSONDecodeError as e :
94- raise click .ClickException (f"配置文件解析失败 : { e !s} " )
94+ raise click .ClickException (f"Failed to parse config file : { e !s} " )
9595
9696
9797def _save_config (config : dict [str , Any ]) -> None :
98- """保存配置文件 """
98+ """Save config file """
9999 config_path = get_astrbot_root () / "data" / "cmd_config.json"
100100
101101 config_path .write_text (
@@ -105,21 +105,21 @@ def _save_config(config: dict[str, Any]) -> None:
105105
106106
107107def _set_nested_item (obj : dict [str , Any ], path : str , value : Any ) -> None :
108- """设置嵌套字典中的值 """
108+ """Set a value in a nested dictionary """
109109 parts = path .split ("." )
110110 for part in parts [:- 1 ]:
111111 if part not in obj :
112112 obj [part ] = {}
113113 elif not isinstance (obj [part ], dict ):
114114 raise click .ClickException (
115- f"配置路径冲突 : { '.' .join (parts [: parts .index (part ) + 1 ])} 不是字典 " ,
115+ f"Config path conflict : { '.' .join (parts [: parts .index (part ) + 1 ])} is not a dict " ,
116116 )
117117 obj = obj [part ]
118118 obj [parts [- 1 ]] = value
119119
120120
121121def _get_nested_item (obj : dict [str , Any ], path : str ) -> Any :
122- """获取嵌套字典中的值 """
122+ """Get a value from a nested dictionary """
123123 parts = path .split ("." )
124124 for part in parts :
125125 obj = obj [part ]
@@ -128,31 +128,31 @@ def _get_nested_item(obj: dict[str, Any], path: str) -> Any:
128128
129129@click .group (name = "conf" )
130130def conf () -> None :
131- """配置管理命令
131+ """Configuration management commands
132132
133- 支持的配置项 :
133+ Supported config keys :
134134
135- - timezone: 时区设置 (例如: Asia/Shanghai)
135+ - timezone: Timezone setting (e.g. Asia/Shanghai)
136136
137- - log_level: 日志级别 (DEBUG/INFO/WARNING/ERROR/CRITICAL)
137+ - log_level: Log level (DEBUG/INFO/WARNING/ERROR/CRITICAL)
138138
139- - dashboard.port: Dashboard 端口
139+ - dashboard.port: Dashboard port
140140
141- - dashboard.username: Dashboard 用户名
141+ - dashboard.username: Dashboard username
142142
143- - dashboard.password: Dashboard 密码
143+ - dashboard.password: Dashboard password
144144
145- - callback_api_base: 回调接口基址
145+ - callback_api_base: Callback API base URL
146146 """
147147
148148
149149@conf .command (name = "set" )
150150@click .argument ("key" )
151151@click .argument ("value" )
152152def set_config (key : str , value : str ) -> None :
153- """设置配置项的值 """
153+ """Set the value of a config item """
154154 if key not in CONFIG_VALIDATORS :
155- raise click .ClickException (f"不支持的配置项 : { key } " )
155+ raise click .ClickException (f"Unsupported config key : { key } " )
156156
157157 config = _load_config ()
158158
@@ -162,41 +162,41 @@ def set_config(key: str, value: str) -> None:
162162 _set_nested_item (config , key , validated_value )
163163 _save_config (config )
164164
165- click .echo (f"配置已更新 : { key } " )
165+ click .echo (f"Config updated : { key } " )
166166 if key == "dashboard.password" :
167- click .echo (" 原值 : ********" )
168- click .echo (" 新值 : ********" )
167+ click .echo (" Old value : ********" )
168+ click .echo (" New value : ********" )
169169 else :
170- click .echo (f" 原值 : { old_value } " )
171- click .echo (f" 新值 : { validated_value } " )
170+ click .echo (f" Old value : { old_value } " )
171+ click .echo (f" New value : { validated_value } " )
172172
173173 except KeyError :
174- raise click .ClickException (f"未知的配置项 : { key } " )
174+ raise click .ClickException (f"Unknown config key : { key } " )
175175 except Exception as e :
176- raise click .UsageError (f"设置配置失败 : { e !s} " )
176+ raise click .UsageError (f"Failed to set config : { e !s} " )
177177
178178
179179@conf .command (name = "get" )
180180@click .argument ("key" , required = False )
181181def get_config (key : str | None = None ) -> None :
182- """获取配置项的值,不提供key则显示所有可配置项 """
182+ """Get the value of a config item. If no key is provided, show all configurable items """
183183 config = _load_config ()
184184
185185 if key :
186186 if key not in CONFIG_VALIDATORS :
187- raise click .ClickException (f"不支持的配置项 : { key } " )
187+ raise click .ClickException (f"Unsupported config key : { key } " )
188188
189189 try :
190190 value = _get_nested_item (config , key )
191191 if key == "dashboard.password" :
192192 value = "********"
193193 click .echo (f"{ key } : { value } " )
194194 except KeyError :
195- raise click .ClickException (f"未知的配置项 : { key } " )
195+ raise click .ClickException (f"Unknown config key : { key } " )
196196 except Exception as e :
197- raise click .UsageError (f"获取配置失败 : { e !s} " )
197+ raise click .UsageError (f"Failed to get config : { e !s} " )
198198 else :
199- click .echo ("当前配置 :" )
199+ click .echo ("Current config :" )
200200 for key in CONFIG_VALIDATORS :
201201 try :
202202 value = (
0 commit comments