pymud 0.20.3__py3-none-any.whl → 0.21.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pymud/__init__.py +6 -2
- pymud/dialogs.py +21 -21
- pymud/extras.py +0 -104
- pymud/i18n.py +42 -0
- pymud/lang/i18n_chs.py +205 -0
- pymud/lang/i18n_eng.py +43 -0
- pymud/main.py +107 -42
- pymud/modules.py +198 -14
- pymud/objects.py +6 -6
- pymud/pkuxkx.py +44 -133
- pymud/pymud.py +75 -54
- pymud/session.py +185 -176
- pymud/settings.py +11 -3
- pymud-0.21.0a1.dist-info/METADATA +370 -0
- pymud-0.21.0a1.dist-info/RECORD +22 -0
- {pymud-0.20.3.dist-info → pymud-0.21.0a1.dist-info}/WHEEL +1 -1
- pymud-0.20.3.dist-info/METADATA +0 -1029
- pymud-0.20.3.dist-info/RECORD +0 -19
- {pymud-0.20.3.dist-info → pymud-0.21.0a1.dist-info}/entry_points.txt +0 -0
- {pymud-0.20.3.dist-info → pymud-0.21.0a1.dist-info/licenses}/LICENSE.txt +0 -0
- {pymud-0.20.3.dist-info → pymud-0.21.0a1.dist-info}/top_level.txt +0 -0
pymud/session.py
CHANGED
@@ -159,11 +159,6 @@ class Session:
|
|
159
159
|
self.encoding = encoding or self.encoding
|
160
160
|
self.after_connect = after_connect
|
161
161
|
|
162
|
-
# 插件处置移动到 pymud.py 2024-3-22
|
163
|
-
# for plugin in app.plugins.values():
|
164
|
-
# if isinstance(plugin, Plugin):
|
165
|
-
# plugin.onSessionCreate(self)
|
166
|
-
|
167
162
|
self._modules = OrderedDict()
|
168
163
|
|
169
164
|
# 将变量加载和脚本加载调整到会话创建时刻
|
@@ -174,13 +169,13 @@ class Session:
|
|
174
169
|
try:
|
175
170
|
vars = pickle.load(fp)
|
176
171
|
self._variables.update(vars)
|
177
|
-
self.info(
|
172
|
+
self.info(Settings.gettext("msg_var_autoload_success", file))
|
178
173
|
except Exception as e:
|
179
|
-
self.warning(
|
174
|
+
self.warning(Settings.gettext("msg_var_autoload_fail", file, e))
|
180
175
|
|
181
176
|
|
182
177
|
if self._auto_script:
|
183
|
-
self.info(
|
178
|
+
self.info(Settings.gettext("msg_auto_script", self._auto_script))
|
184
179
|
self.load_module(self._auto_script)
|
185
180
|
|
186
181
|
if Settings.client["auto_connect"]:
|
@@ -229,7 +224,7 @@ class Session:
|
|
229
224
|
|
230
225
|
except Exception as exc:
|
231
226
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
232
|
-
self.error(
|
227
|
+
self.error(Settings.gettext("msg_connection_fail", now, exec))
|
233
228
|
self._state = "EXCEPTION"
|
234
229
|
|
235
230
|
if Settings.client["auto_reconnect"]:
|
@@ -242,14 +237,14 @@ class Session:
|
|
242
237
|
|
243
238
|
:param timeout: 重连之前的等待时间,默认15s,可由 `Settings.client['reconnect_wait']` 设置所覆盖
|
244
239
|
"""
|
245
|
-
self.info(
|
240
|
+
self.info(Settings.gettext("msg_auto_reconnect", timeout))
|
246
241
|
await asyncio.sleep(timeout)
|
247
242
|
await self.create_task(self.connect())
|
248
243
|
|
249
244
|
def onConnected(self):
|
250
245
|
"当连接到服务器之后执行的操作。包括打印连接时间,执行自定义事件(若设置)等。"
|
251
246
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
252
|
-
self.info(
|
247
|
+
self.info(Settings.gettext("msg_connected", now))
|
253
248
|
if isinstance(self.after_connect, str):
|
254
249
|
self.writeline(self.after_connect)
|
255
250
|
|
@@ -270,7 +265,7 @@ class Session:
|
|
270
265
|
|
271
266
|
self.clean()
|
272
267
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
273
|
-
self.info(
|
268
|
+
self.info(Settings.gettext("msg_disconnected", now))
|
274
269
|
|
275
270
|
event_disconnected = self._events["disconnected"]
|
276
271
|
if callable(event_disconnected):
|
@@ -386,7 +381,7 @@ class Session:
|
|
386
381
|
|
387
382
|
else:
|
388
383
|
if name not in self._loggers.keys():
|
389
|
-
self.warning(
|
384
|
+
self.warning(Settings.gettext("msg_duplicate_logname", name))
|
390
385
|
|
391
386
|
logger = self.application.loggers[name]
|
392
387
|
logger.mode = mode
|
@@ -517,7 +512,7 @@ class Session:
|
|
517
512
|
|
518
513
|
def get_status(self):
|
519
514
|
"返回状态窗口内容的真实函数。 **脚本中无需调用。**"
|
520
|
-
text =
|
515
|
+
text = Settings.gettext("msg_default_statuswindow", self.name, self.connected)
|
521
516
|
if callable(self._status_maker):
|
522
517
|
text = self._status_maker()
|
523
518
|
|
@@ -646,7 +641,7 @@ class Session:
|
|
646
641
|
self.write(b"\x1b[1z<SUPPORTS>")
|
647
642
|
else:
|
648
643
|
#self.write(b"\x1b[0z")
|
649
|
-
self.warning("
|
644
|
+
self.warning(Settings.gettext("msg_mxp_not_support"))
|
650
645
|
|
651
646
|
# 全局变量%line
|
652
647
|
self.setVariable("%line", tri_line)
|
@@ -659,7 +654,7 @@ class Session:
|
|
659
654
|
|
660
655
|
if not self._ignore:
|
661
656
|
# 修改实现,形成列表时即排除非使能状态触发器,加快响应速度
|
662
|
-
|
657
|
+
|
663
658
|
all_tris = [tri for tri in self._triggers.values() if isinstance(tri, Trigger) and tri.enabled]
|
664
659
|
all_tris.sort(key = lambda tri: tri.priority)
|
665
660
|
|
@@ -689,7 +684,7 @@ class Session:
|
|
689
684
|
|
690
685
|
:param exc: 异常对象
|
691
686
|
"""
|
692
|
-
self.error(
|
687
|
+
self.error(Settings.gettext("msg_connection_fail", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), exc))
|
693
688
|
|
694
689
|
|
695
690
|
def create_task(self, coro, *args, name: str = None) -> asyncio.Task:
|
@@ -833,7 +828,7 @@ class Session:
|
|
833
828
|
session = self.application.sessions[name]
|
834
829
|
session.exec_command(cmd, *args, **kwargs)
|
835
830
|
else:
|
836
|
-
self.error(
|
831
|
+
self.error(Settings.gettext("msg_no_session", name))
|
837
832
|
|
838
833
|
async def exec_async(self, cmd: str, name = None, *args, **kwargs):
|
839
834
|
"""
|
@@ -848,7 +843,7 @@ class Session:
|
|
848
843
|
session = self.application.sessions[name]
|
849
844
|
return await session.exec_command_async(cmd, *args, **kwargs)
|
850
845
|
else:
|
851
|
-
self.error(
|
846
|
+
self.error(Settings.gettext("msg_no_session", name))
|
852
847
|
|
853
848
|
def exec_code(self, cl: CodeLine, *args, **kwargs):
|
854
849
|
"""
|
@@ -876,7 +871,7 @@ class Session:
|
|
876
871
|
if times > 0:
|
877
872
|
self.create_task(self.handle_num(times, code = cl, *args, **kwargs))
|
878
873
|
else:
|
879
|
-
self.warning("
|
874
|
+
self.warning(Settings.gettext("msg_num_positive"))
|
880
875
|
|
881
876
|
elif cmd in self.application.sessions.keys():
|
882
877
|
name = cmd
|
@@ -905,7 +900,7 @@ class Session:
|
|
905
900
|
else:
|
906
901
|
handler(code = cl, *args, **kwargs)
|
907
902
|
else:
|
908
|
-
self.warning(
|
903
|
+
self.warning(Settings.gettext("msg_cmd_not_recognized", cl.commandText))
|
909
904
|
|
910
905
|
else:
|
911
906
|
cmdtext, code = cl.expand(self, *args, **kwargs)
|
@@ -940,7 +935,7 @@ class Session:
|
|
940
935
|
if times > 0:
|
941
936
|
await self.handle_num(times, code = cl, *args, **kwargs)
|
942
937
|
else:
|
943
|
-
self.warning("
|
938
|
+
self.warning(Settings.gettext("msg_num_positive"))
|
944
939
|
|
945
940
|
elif cmd in self.application.sessions.keys():
|
946
941
|
name = cmd
|
@@ -966,7 +961,7 @@ class Session:
|
|
966
961
|
else:
|
967
962
|
handler(code = cl, *args, **kwargs)
|
968
963
|
else:
|
969
|
-
self.warning(
|
964
|
+
self.warning(Settings.gettext("msg_cmd_not_recognized", cl.commandText))
|
970
965
|
|
971
966
|
else:
|
972
967
|
cmdtext, code = cl.expand(self, *args, **kwargs)
|
@@ -981,23 +976,35 @@ class Session:
|
|
981
976
|
:param cmdtext: 纯文本命令
|
982
977
|
"""
|
983
978
|
isNotCmd = True
|
979
|
+
|
980
|
+
# fix bugs, commands filter for enabled and sorted for priority
|
981
|
+
avai_cmds = [cmd for cmd in self._commands.values() if isinstance(cmd, Command) and cmd.enabled]
|
982
|
+
avai_cmds.sort(key = lambda cmd: cmd.priority)
|
983
|
+
|
984
984
|
for command in self._commands.values():
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
break
|
985
|
+
state = command.match(cmdtext)
|
986
|
+
if state.result == Command.SUCCESS:
|
987
|
+
# 命令的任务名称采用命令id,以便于后续查错
|
988
|
+
self.create_task(command.execute(cmdtext), name = "task-{0}".format(command.id))
|
989
|
+
isNotCmd = False
|
990
|
+
break
|
992
991
|
|
993
992
|
# 再判断是否是别名
|
994
993
|
if isNotCmd:
|
995
994
|
notAlias = True
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
995
|
+
|
996
|
+
# fix bugs, aliases filter for enabled and sorted for priority, and add oneShot, keepEval judge
|
997
|
+
avai_alis = [ali for ali in self._aliases.values() if isinstance(ali, Alias) and ali.enabled]
|
998
|
+
avai_alis.sort(key = lambda ali: ali.priority)
|
999
|
+
|
1000
|
+
for alias in avai_alis:
|
1001
|
+
state = alias.match(cmdtext)
|
1002
|
+
if state.result == Alias.SUCCESS:
|
1003
|
+
notAlias = False
|
1004
|
+
if alias.oneShot:
|
1005
|
+
self.delAlias(alias.id)
|
1006
|
+
|
1007
|
+
if not alias.keepEval:
|
1001
1008
|
break
|
1002
1009
|
|
1003
1010
|
# 都不是则是普通命令,直接发送
|
@@ -1012,23 +1019,35 @@ class Session:
|
|
1012
1019
|
"""
|
1013
1020
|
result = None
|
1014
1021
|
isNotCmd = True
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1022
|
+
|
1023
|
+
# fix bugs, commands filter for enabled and sorted for priority
|
1024
|
+
avai_cmds = [cmd for cmd in self._commands.values() if isinstance(cmd, Command) and cmd.enabled]
|
1025
|
+
avai_cmds.sort(key = lambda cmd: cmd.priority)
|
1026
|
+
|
1027
|
+
for command in avai_cmds:
|
1028
|
+
state = command.match(cmdtext)
|
1029
|
+
if state.result == Command.SUCCESS:
|
1030
|
+
# 命令的任务名称采用命令id,以便于后续查错
|
1031
|
+
result = await self.create_task(command.execute(cmdtext), name = "task-{0}".format(command.id))
|
1032
|
+
isNotCmd = False
|
1033
|
+
break
|
1023
1034
|
|
1024
1035
|
# 再判断是否是别名
|
1025
1036
|
if isNotCmd:
|
1026
1037
|
notAlias = True
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1038
|
+
|
1039
|
+
# fix bugs, aliases filter for enabled and sorted for priority, and add oneShot, keepEval judge
|
1040
|
+
avai_alis = [ali for ali in self._aliases.values() if isinstance(ali, Alias) and ali.enabled]
|
1041
|
+
avai_alis.sort(key = lambda ali: ali.priority)
|
1042
|
+
|
1043
|
+
for alias in avai_alis:
|
1044
|
+
state = alias.match(cmdtext)
|
1045
|
+
if state.result == Alias.SUCCESS:
|
1046
|
+
notAlias = False
|
1047
|
+
if alias.oneShot:
|
1048
|
+
self.delAlias(alias.id)
|
1049
|
+
|
1050
|
+
if not alias.keepEval:
|
1032
1051
|
break
|
1033
1052
|
|
1034
1053
|
# 都不是则是普通命令,直接发送
|
@@ -1162,18 +1181,6 @@ class Session:
|
|
1162
1181
|
|
1163
1182
|
return counts
|
1164
1183
|
|
1165
|
-
# def _addObjects(self, objs: dict, cls: type):
|
1166
|
-
# if cls == Alias:
|
1167
|
-
# self._aliases.update(objs)
|
1168
|
-
# elif cls == Command:
|
1169
|
-
# self._commands.update(objs)
|
1170
|
-
# elif cls == Trigger:
|
1171
|
-
# self._triggers.update(objs)
|
1172
|
-
# elif cls == Timer:
|
1173
|
-
# self._timers.update(objs)
|
1174
|
-
# elif cls == GMCPTrigger:
|
1175
|
-
# self._gmcp.update(objs)
|
1176
|
-
|
1177
1184
|
def _addObjects(self, objs):
|
1178
1185
|
if isinstance(objs, list) or isinstance(objs, tuple):
|
1179
1186
|
for item in objs:
|
@@ -1183,24 +1190,10 @@ class Session:
|
|
1183
1190
|
for key, item in objs.items():
|
1184
1191
|
if isinstance(item, BaseObject):
|
1185
1192
|
if key != item.id:
|
1186
|
-
self.warning(
|
1193
|
+
self.warning(Settings.gettext("msg_id_not_consistent", item, key, item.id))
|
1187
1194
|
|
1188
1195
|
self._addObject(item)
|
1189
1196
|
|
1190
|
-
# def _addObject(self, obj, cls: type):
|
1191
|
-
# #if type(obj) == cls:
|
1192
|
-
# if isinstance(obj, cls):
|
1193
|
-
# if cls == Alias:
|
1194
|
-
# self._aliases[obj.id] = obj
|
1195
|
-
# elif cls == Command:
|
1196
|
-
# self._commands[obj.id] = obj
|
1197
|
-
# elif cls == Trigger:
|
1198
|
-
# self._triggers[obj.id] = obj
|
1199
|
-
# elif cls == Timer:
|
1200
|
-
# self._timers[obj.id] = obj
|
1201
|
-
# elif cls == GMCPTrigger:
|
1202
|
-
# self._gmcp[obj.id] = obj
|
1203
|
-
|
1204
1197
|
def _addObject(self, obj):
|
1205
1198
|
if isinstance(obj, Alias):
|
1206
1199
|
self._aliases[obj.id] = obj
|
@@ -1620,7 +1613,7 @@ class Session:
|
|
1620
1613
|
|
1621
1614
|
:param name: 变量名
|
1622
1615
|
"""
|
1623
|
-
assert isinstance(name, str), "name
|
1616
|
+
assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
|
1624
1617
|
if name in self._variables.keys():
|
1625
1618
|
self._variables.pop(name)
|
1626
1619
|
|
@@ -1638,7 +1631,7 @@ class Session:
|
|
1638
1631
|
session.setVariable("myvar1", "the value")
|
1639
1632
|
session.vars.myvar1 = "the value"
|
1640
1633
|
"""
|
1641
|
-
assert isinstance(name, str), "name
|
1634
|
+
assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
|
1642
1635
|
self._variables[name] = value
|
1643
1636
|
|
1644
1637
|
def getVariable(self, name, default = None):
|
@@ -1657,7 +1650,7 @@ class Session:
|
|
1657
1650
|
myvar = session.vars.myvar1
|
1658
1651
|
"""
|
1659
1652
|
"""获取一个变量的值. 当name指定的变量不存在时,返回default"""
|
1660
|
-
assert isinstance(name, str), "name
|
1653
|
+
assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
|
1661
1654
|
return self._variables.get(name, default)
|
1662
1655
|
|
1663
1656
|
def setVariables(self, names, values):
|
@@ -1675,9 +1668,9 @@ class Session:
|
|
1675
1668
|
|
1676
1669
|
session.setVariables(hp_key, hp_value)
|
1677
1670
|
"""
|
1678
|
-
assert isinstance(names, tuple) or isinstance(names, list), "names
|
1679
|
-
assert isinstance(values, tuple) or isinstance(values, list), "values
|
1680
|
-
assert (len(names) > 0) and (len(values) > 0) and (len(names) == len(values)), "
|
1671
|
+
assert isinstance(names, tuple) or isinstance(names, list), Settings.gettext("msg_shall_be_list_or_tuple", "names")
|
1672
|
+
assert isinstance(values, tuple) or isinstance(values, list), Settings.gettext("msg_shall_be_list_or_tuple", "values")
|
1673
|
+
assert (len(names) > 0) and (len(values) > 0) and (len(names) == len(values)), Settings.gettext("msg_names_and_values")
|
1681
1674
|
for index in range(0, len(names)):
|
1682
1675
|
name = names[index]
|
1683
1676
|
value = values[index]
|
@@ -1695,8 +1688,8 @@ class Session:
|
|
1695
1688
|
|
1696
1689
|
qi, jing, neili, jingli = session.getVariables(["qi", "jing", "neili", "jingli"])
|
1697
1690
|
"""
|
1698
|
-
assert isinstance(names, tuple) or isinstance(names, list), "names
|
1699
|
-
assert len(names) > 0, "names
|
1691
|
+
assert isinstance(names, tuple) or isinstance(names, list), Settings.gettext("msg_shall_be_list_or_tuple", "names")
|
1692
|
+
assert len(names) > 0, Settings.gettext("msg_not_null", "names")
|
1700
1693
|
values = list()
|
1701
1694
|
for name in names:
|
1702
1695
|
value = self.getVariable(name)
|
@@ -1728,7 +1721,7 @@ class Session:
|
|
1728
1721
|
|
1729
1722
|
:param name: 全局变量的名称
|
1730
1723
|
"""
|
1731
|
-
assert isinstance(name, str), "name
|
1724
|
+
assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
|
1732
1725
|
self.application.del_globals(name)
|
1733
1726
|
|
1734
1727
|
def setGlobal(self, name, value):
|
@@ -1738,7 +1731,7 @@ class Session:
|
|
1738
1731
|
:param name: 全局变量的名称
|
1739
1732
|
:param value: 全局变量的值
|
1740
1733
|
"""
|
1741
|
-
assert isinstance(name, str), "name
|
1734
|
+
assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
|
1742
1735
|
self.application.set_globals(name, value)
|
1743
1736
|
|
1744
1737
|
def getGlobal(self, name, default = None):
|
@@ -1750,7 +1743,7 @@ class Session:
|
|
1750
1743
|
:return: 全局变量的值,或者 default
|
1751
1744
|
"""
|
1752
1745
|
|
1753
|
-
assert isinstance(name, str), "name
|
1746
|
+
assert isinstance(name, str), Settings.gettext("msg_shall_be_string", "name")
|
1754
1747
|
return self.application.get_globals(name, default)
|
1755
1748
|
|
1756
1749
|
## ###################
|
@@ -1832,7 +1825,7 @@ class Session:
|
|
1832
1825
|
elif topic in self._sys_commands:
|
1833
1826
|
docstring = self._cmds_handler[topic].__doc__
|
1834
1827
|
else:
|
1835
|
-
docstring =
|
1828
|
+
docstring = Settings.gettext("msg_topic_not_found", topic)
|
1836
1829
|
|
1837
1830
|
self.writetobuffer(docstring, True)
|
1838
1831
|
|
@@ -1911,12 +1904,12 @@ class Session:
|
|
1911
1904
|
sec = duration % 60
|
1912
1905
|
time_msg = ""
|
1913
1906
|
if hour > 0:
|
1914
|
-
time_msg += f"{hour}
|
1907
|
+
time_msg += f"{hour} {Settings.gettext('Hour')}"
|
1915
1908
|
if min > 0:
|
1916
|
-
time_msg += f"{min}
|
1917
|
-
time_msg += f"{math.ceil(sec)}
|
1909
|
+
time_msg += f"{min} {Settings.gettext('Minute')}"
|
1910
|
+
time_msg += f"{math.ceil(sec)} {Settings.gettext('Second')}"
|
1918
1911
|
|
1919
|
-
self.info("
|
1912
|
+
self.info(Settings.gettext("msg_connection_duration",time_msg))
|
1920
1913
|
|
1921
1914
|
def handle_disconnect(self, code: CodeLine = None, *args, **kwargs):
|
1922
1915
|
'''
|
@@ -2118,7 +2111,7 @@ class Session:
|
|
2118
2111
|
self.writetobuffer(line, newline = True)
|
2119
2112
|
|
2120
2113
|
else:
|
2121
|
-
self.warning(
|
2114
|
+
self.warning(Settings.gettext("msg_no_object", args[0], Settings.gettext("variable")))
|
2122
2115
|
|
2123
2116
|
elif len(args) == 2:
|
2124
2117
|
val = None
|
@@ -2128,7 +2121,7 @@ class Session:
|
|
2128
2121
|
val = args[1]
|
2129
2122
|
|
2130
2123
|
self.setVariable(args[0], val)
|
2131
|
-
self.info(
|
2124
|
+
self.info(Settings.gettext("msg_object_value_setted", Settings.gettext("variable"), args[0], val.__repr__()))
|
2132
2125
|
|
2133
2126
|
def handle_global(self, code: CodeLine = None, *args, **kwargs):
|
2134
2127
|
'''
|
@@ -2170,7 +2163,7 @@ class Session:
|
|
2170
2163
|
for line in lines:
|
2171
2164
|
self.writetobuffer(line, newline = True)
|
2172
2165
|
else:
|
2173
|
-
self.
|
2166
|
+
self.warning(Settings.gettext("msg_no_global_object", var, Settings.gettext("variable")))
|
2174
2167
|
|
2175
2168
|
elif len(args) == 2:
|
2176
2169
|
val = None
|
@@ -2179,7 +2172,7 @@ class Session:
|
|
2179
2172
|
except:
|
2180
2173
|
val = args[1]
|
2181
2174
|
self.application.set_globals(args[0], val)
|
2182
|
-
self.info(
|
2175
|
+
self.info(Settings.gettext("msg_object_value_setted", Settings.gettext("globalvar"), args[0], val.__repr__()))
|
2183
2176
|
|
2184
2177
|
def _handle_objs(self, name: str, objs: dict, *args):
|
2185
2178
|
if len(args) == 0:
|
@@ -2200,7 +2193,7 @@ class Session:
|
|
2200
2193
|
obj = objs[args[0]]
|
2201
2194
|
self.info(obj.__detailed__())
|
2202
2195
|
else:
|
2203
|
-
self.warning(
|
2196
|
+
self.warning(Settings.gettext("msg_object_not_exists", args[0], name))
|
2204
2197
|
|
2205
2198
|
elif len(args) == 2:
|
2206
2199
|
# 当第一个参数为对象obj名称时,对对象进行处理
|
@@ -2208,20 +2201,18 @@ class Session:
|
|
2208
2201
|
obj = objs[args[0]]
|
2209
2202
|
if args[1] == "on":
|
2210
2203
|
obj.enabled = True
|
2211
|
-
self.info(
|
2204
|
+
self.info(Settings.gettext("msg_object_enabled", obj.__repr__()))
|
2212
2205
|
elif args[1] == "off":
|
2213
2206
|
obj.enabled = False
|
2214
|
-
self.info(
|
2207
|
+
self.info(Settings.gettext("msg_object_disabled", obj.__repr__()))
|
2215
2208
|
elif args[1] == "del":
|
2216
2209
|
obj.enabled = False
|
2217
2210
|
objs.pop(args[0])
|
2218
|
-
self.info(
|
2211
|
+
self.info(Settings.gettext("msg_object_deleted", obj.__repr__()))
|
2219
2212
|
else:
|
2220
|
-
self.error(
|
2213
|
+
self.error(Settings.gettext("msg_invalid_param", name.lower()))
|
2221
2214
|
|
2222
|
-
# 当第一个参数为不是对象obj名称时,创建新对象 (此处还有BUG,调试中)
|
2223
2215
|
else:
|
2224
|
-
#self.warning(f"当前session中不存在key为 {args[0]} 的 {name}, 请确认后重试.")
|
2225
2216
|
pattern, code = args[0], args[1]
|
2226
2217
|
if (len(pattern)>=2) and (pattern[0] == '{') and (pattern[-1] == '}'):
|
2227
2218
|
pattern = pattern[1:-1]
|
@@ -2230,18 +2221,18 @@ class Session:
|
|
2230
2221
|
if name == "alias":
|
2231
2222
|
ali = SimpleAlias(self, pattern, code)
|
2232
2223
|
self.addAlias(ali)
|
2233
|
-
self.info("
|
2224
|
+
self.info(Settings.gettext("msg_alias_created", ali.id, ali.__repr__()))
|
2234
2225
|
elif name == "trigger":
|
2235
2226
|
tri = SimpleTrigger(self, pattern, code)
|
2236
2227
|
self.addTrigger(tri)
|
2237
|
-
self.info("
|
2228
|
+
self.info(Settings.gettext("msg_trigger_created", tri.id, tri.__repr__()))
|
2238
2229
|
elif name == "timer":
|
2239
2230
|
if pattern.isnumeric():
|
2240
2231
|
timeout = float(pattern)
|
2241
2232
|
if timeout > 0:
|
2242
2233
|
ti = SimpleTimer(self, code, timeout = timeout)
|
2243
2234
|
self.addTimer(ti)
|
2244
|
-
self.info("
|
2235
|
+
self.info(Settings.gettext("msg_timer_created", ti.id, ti.__repr__()))
|
2245
2236
|
|
2246
2237
|
def handle_alias(self, code: CodeLine = None, *args, **kwargs):
|
2247
2238
|
r"""
|
@@ -2432,26 +2423,26 @@ class Session:
|
|
2432
2423
|
if cmd in ("ig", "ignore"):
|
2433
2424
|
self._ignore = not self._ignore
|
2434
2425
|
if self._ignore:
|
2435
|
-
self.info("
|
2426
|
+
self.info(Settings.gettext("msg_ignore_on"))
|
2436
2427
|
else:
|
2437
|
-
self.info("
|
2428
|
+
self.info(Settings.gettext("msg_ignore_off"))
|
2438
2429
|
elif cmd == "t+":
|
2439
2430
|
if code.length <= 2:
|
2440
|
-
self.warning("
|
2431
|
+
self.warning(Settings.gettext("msg_T_plus_incorrect"))
|
2441
2432
|
return
|
2442
2433
|
|
2443
2434
|
groupname = code.code[2]
|
2444
2435
|
cnts = self.enableGroup(groupname)
|
2445
|
-
self.info(
|
2436
|
+
self.info(Settings.gettext("msg_group_enabled", groupname, *cnts))
|
2446
2437
|
|
2447
2438
|
elif cmd == "t-":
|
2448
2439
|
if code.length <= 2:
|
2449
|
-
self.warning("
|
2440
|
+
self.warning(Settings.gettext("msg_T_minus_incorrect"))
|
2450
2441
|
return
|
2451
2442
|
|
2452
2443
|
groupname = code.code[2]
|
2453
2444
|
cnts = self.enableGroup(groupname, False)
|
2454
|
-
self.info(
|
2445
|
+
self.info(Settings.gettext("msg_group_disabled", groupname, *cnts))
|
2455
2446
|
|
2456
2447
|
def handle_repeat(self, code: CodeLine = None, *args, **kwargs):
|
2457
2448
|
'''
|
@@ -2468,7 +2459,7 @@ class Session:
|
|
2468
2459
|
if self.connected and self.last_command:
|
2469
2460
|
self.exec_command(self.last_command)
|
2470
2461
|
else:
|
2471
|
-
self.info("
|
2462
|
+
self.info(Settings.gettext("msg_repeat_invalid"))
|
2472
2463
|
|
2473
2464
|
async def handle_num(self, times, code: CodeLine = None, *args, **kwargs):
|
2474
2465
|
'''
|
@@ -2547,7 +2538,7 @@ class Session:
|
|
2547
2538
|
- ``#mess %line`` : 使用弹出窗口显示系统变量%line的值
|
2548
2539
|
'''
|
2549
2540
|
|
2550
|
-
title = "
|
2541
|
+
title = Settings.gettext("msg_window_title", self.name)
|
2551
2542
|
|
2552
2543
|
new_cmd_text, new_code = code.expand(self, *args, **kwargs)
|
2553
2544
|
index = new_cmd_text.find(" ")
|
@@ -2667,8 +2658,8 @@ class Session:
|
|
2667
2658
|
|
2668
2659
|
except Exception as e:
|
2669
2660
|
import traceback
|
2670
|
-
self.error(
|
2671
|
-
self.error(
|
2661
|
+
self.error(Settings.gettext("msg_module_load_fail", module_name, e, type(e)))
|
2662
|
+
self.error(Settings.gettext("msg_exception_traceback", traceback.format_exc()))
|
2672
2663
|
|
2673
2664
|
def unload_module(self, module_names):
|
2674
2665
|
"""
|
@@ -2696,7 +2687,7 @@ class Session:
|
|
2696
2687
|
mod.unload()
|
2697
2688
|
|
2698
2689
|
else:
|
2699
|
-
self.warning(
|
2690
|
+
self.warning(Settings.gettext("msg_module_not_loaded", module_name))
|
2700
2691
|
|
2701
2692
|
def reload_module(self, module_names = None):
|
2702
2693
|
"""
|
@@ -2711,7 +2702,7 @@ class Session:
|
|
2711
2702
|
if isinstance(module, ModuleInfo):
|
2712
2703
|
module.reload()
|
2713
2704
|
|
2714
|
-
self.info(
|
2705
|
+
self.info(Settings.gettext("msg_all_module_reloaded"))
|
2715
2706
|
|
2716
2707
|
elif isinstance(module_names, (list, tuple)):
|
2717
2708
|
for mod in module_names:
|
@@ -2721,7 +2712,7 @@ class Session:
|
|
2721
2712
|
if isinstance(module, ModuleInfo):
|
2722
2713
|
module.reload()
|
2723
2714
|
else:
|
2724
|
-
self.warning(
|
2715
|
+
self.warning(Settings.gettext("msg_module_not_loaded", mod))
|
2725
2716
|
|
2726
2717
|
elif isinstance(module_names, str):
|
2727
2718
|
if module_names in self._modules.keys():
|
@@ -2729,7 +2720,7 @@ class Session:
|
|
2729
2720
|
if isinstance(module, ModuleInfo):
|
2730
2721
|
module.reload()
|
2731
2722
|
else:
|
2732
|
-
self.warning(
|
2723
|
+
self.warning(Settings.gettext("msg_module_not_loaded", module_names))
|
2733
2724
|
|
2734
2725
|
|
2735
2726
|
def handle_load(self, code: CodeLine = None, *args, **kwargs):
|
@@ -2811,9 +2802,9 @@ class Session:
|
|
2811
2802
|
|
2812
2803
|
elif mod in self.plugins.keys():
|
2813
2804
|
self.application.reload_plugin(self.plugins[mod])
|
2814
|
-
self.info(
|
2805
|
+
self.info(Settings.gettext("msg_plugin_reloaded", mod))
|
2815
2806
|
else:
|
2816
|
-
self.warning(
|
2807
|
+
self.warning(Settings.gettext("msg_name_not_found", mod))
|
2817
2808
|
|
2818
2809
|
def handle_unload(self, code: CodeLine = None, *args, **kwargs):
|
2819
2810
|
'''
|
@@ -2870,9 +2861,9 @@ class Session:
|
|
2870
2861
|
if len(args) == 0:
|
2871
2862
|
count = len(self._modules.keys())
|
2872
2863
|
if count == 0:
|
2873
|
-
self.info("
|
2864
|
+
self.info(Settings.gettext("msg_no_module"), "MODULES")
|
2874
2865
|
else:
|
2875
|
-
self.info(
|
2866
|
+
self.info(Settings.gettext("msg_module_list", count, list(self._modules.keys()).__repr__()))
|
2876
2867
|
|
2877
2868
|
elif len(args) >= 1:
|
2878
2869
|
modules = ",".join(args).split(",")
|
@@ -2881,12 +2872,12 @@ class Session:
|
|
2881
2872
|
module = self._modules[mod]
|
2882
2873
|
if isinstance(module, ModuleInfo):
|
2883
2874
|
if module.ismainmodule:
|
2884
|
-
self.info(
|
2875
|
+
self.info(Settings.gettext("msg_module_configurations", module.name, ",".join(module.config.keys())))
|
2885
2876
|
else:
|
2886
|
-
self.info(
|
2877
|
+
self.info(Settings.gettext("msg_submodule_no_config"))
|
2887
2878
|
|
2888
2879
|
else:
|
2889
|
-
self.info(
|
2880
|
+
self.info(Settings.gettext("msg_module_not_loaded", mod))
|
2890
2881
|
|
2891
2882
|
def handle_reset(self, code: CodeLine = None, *args, **kwargs):
|
2892
2883
|
'''
|
@@ -2937,7 +2928,7 @@ class Session:
|
|
2937
2928
|
saved.pop("%raw", None)
|
2938
2929
|
saved.pop("%copy", None)
|
2939
2930
|
pickle.dump(saved, fp)
|
2940
|
-
self.info(
|
2931
|
+
self.info(Settings.gettext("msg_variables_saved", file))
|
2941
2932
|
|
2942
2933
|
def handle_clear(self, code: CodeLine = None, *args, **kwargs):
|
2943
2934
|
'''
|
@@ -3010,18 +3001,16 @@ class Session:
|
|
3010
3001
|
triggered_enabled += 1
|
3011
3002
|
if not block:
|
3012
3003
|
triggered += 1
|
3013
|
-
|
3014
|
-
|
3015
|
-
info_enabled.append(f" {tri.__detailed__()} 正常触发。")
|
3016
|
-
info_enabled.append(f" 捕获:{state.wildcards}")
|
3004
|
+
info_enabled.append(Settings.gettext("msg_tri_triggered", tri.__detailed__()))
|
3005
|
+
info_enabled.append(Settings.gettext("msg_tri_wildcards", state.wildcards))
|
3017
3006
|
|
3018
3007
|
if not tri.keepEval: # 非持续匹配的trigger,匹配成功后停止检测后续Trigger
|
3019
|
-
info_enabled.append(
|
3020
|
-
#info_enabled.append(f"
|
3008
|
+
info_enabled.append(Settings.gettext("msg_tri_prevent", Settings.WARN_STYLE, Settings.CLR_STYLE))
|
3009
|
+
#info_enabled.append(f" {Settings.WARN_STYLE}该触发器未开启keepEval, 会阻止后续触发器。{Settings.CLR_STYLE}")
|
3021
3010
|
block = True
|
3022
3011
|
else:
|
3023
|
-
info_enabled.append(
|
3024
|
-
#info_enabled.append(f"
|
3012
|
+
info_enabled.append(Settings.gettext("msg_tri_ignored", tri.__detailed__(), Settings.WARN_STYLE, Settings.CLR_STYLE))
|
3013
|
+
# info_enabled.append(f" {Settings.WARN_STYLE}{tri.__detailed__()} 可以触发,但由于优先级与keepEval设定,触发器不会触发。{Settings.CLR_STYLE}")
|
3025
3014
|
|
3026
3015
|
|
3027
3016
|
for tri in tris_disabled:
|
@@ -3032,37 +3021,47 @@ class Session:
|
|
3032
3021
|
|
3033
3022
|
if state.result == Trigger.SUCCESS:
|
3034
3023
|
triggered_disabled += 1
|
3035
|
-
#
|
3036
|
-
info_disabled.append(
|
3024
|
+
#info_disabled.append(f" {tri.__detailed__()} 可以匹配触发。")
|
3025
|
+
info_disabled.append(Settings.gettext("msg_tri_matched", tri.__detailed__()))
|
3037
3026
|
|
3038
3027
|
if triggered_enabled + triggered_disabled == 0:
|
3039
3028
|
info_all.append("")
|
3040
3029
|
|
3041
3030
|
if triggered_enabled == 0:
|
3042
|
-
info_enabled.insert(0,
|
3031
|
+
info_enabled.insert(0, Settings.gettext("msg_enabled_summary_0", Settings.INFO_STYLE))
|
3032
|
+
#info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,没有可以触发的。")
|
3043
3033
|
elif triggered < triggered_enabled:
|
3044
|
-
info_enabled.insert(0,
|
3034
|
+
info_enabled.insert(0, Settings.gettext("msg_enabled_summary_1", Settings.INFO_STYLE, triggered_enabled, triggered, triggered_enabled - triggered))
|
3035
|
+
#info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,共有 {triggered_enabled} 个可以触发,实际触发 {triggered} 个,另有 {triggered_enabled - triggered} 个由于 keepEval 原因实际不会触发。")
|
3045
3036
|
else:
|
3046
|
-
info_enabled.insert(0,
|
3037
|
+
info_enabled.insert(0, Settings.gettext("msg_enabled_summary_2", Settings.INFO_STYLE, triggered_enabled))
|
3038
|
+
#info_enabled.insert(0, f"{Settings.INFO_STYLE} 使能的触发器中,共有 {triggered_enabled} 个全部可以被正常触发。")
|
3047
3039
|
|
3048
3040
|
if triggered_disabled > 0:
|
3049
|
-
info_disabled.insert(0,
|
3041
|
+
info_disabled.insert(0, Settings.gettext("msg_disabled_summary_0", Settings.INFO_STYLE, triggered_disabled))
|
3042
|
+
#info_disabled.insert(0, f"{Settings.INFO_STYLE} 未使能的触发器中,共有 {triggered_disabled} 个可以匹配。")
|
3050
3043
|
else:
|
3051
|
-
info_disabled.insert(0,
|
3044
|
+
info_disabled.insert(0, Settings.gettext("msg_disabled_summary_1", Settings.INFO_STYLE))
|
3045
|
+
#info_disabled.insert(0, f"{Settings.INFO_STYLE} 未使能触发器,没有可以匹配的。")
|
3052
3046
|
|
3053
3047
|
info_all.append("")
|
3054
3048
|
if triggered_enabled + triggered_disabled == 0:
|
3055
3049
|
#info_all.append(f"PYMUD 触发器测试: {'响应模式' if docallback else '测试模式'}")
|
3056
|
-
info_all.append(
|
3057
|
-
info_all.append(
|
3050
|
+
info_all.append(Settings.gettext("msg_test_summary_0", line))
|
3051
|
+
info_all.append(Settings.gettext("msg_test_summary_1"))
|
3052
|
+
#info_all.append(f" 测试内容: {line}")
|
3053
|
+
#info_all.append(f" 测试结果: 没有可以匹配的触发器。")
|
3058
3054
|
else:
|
3059
3055
|
#info_all.append(f"PYMUD 触发器测试: {'响应模式' if docallback else '测试模式'}")
|
3060
|
-
info_all.append(
|
3061
|
-
info_all.append(
|
3056
|
+
info_all.append(Settings.gettext("msg_test_summary_0", line))
|
3057
|
+
info_all.append(Settings.gettext("msg_test_summary_2", triggered, triggered_enabled + triggered_disabled))
|
3058
|
+
#info_all.append(f" 测试内容: {line}")
|
3059
|
+
#info_all.append(f" 测试结果: 有{triggered}个触发器可以被正常触发,一共有{triggered_enabled + triggered_disabled}个满足匹配触发要求。")
|
3062
3060
|
info_all.extend(info_enabled)
|
3063
3061
|
info_all.extend(info_disabled)
|
3064
3062
|
|
3065
|
-
title =
|
3063
|
+
title = Settings.gettext("msg_test_title", Settings.gettext("msg_triggered_mode") if docallback else Settings.gettext("msg_matched_mode"))
|
3064
|
+
#title = f"触发器测试 - {'响应模式' if docallback else '测试模式'}"
|
3066
3065
|
self.info("\n".join(info_all), title)
|
3067
3066
|
#self.info("PYMUD 触发器测试 完毕")
|
3068
3067
|
|
@@ -3084,17 +3083,21 @@ class Session:
|
|
3084
3083
|
if len(args) == 0:
|
3085
3084
|
count = len(self.plugins.keys())
|
3086
3085
|
if count == 0:
|
3087
|
-
self.info("
|
3086
|
+
self.info(Settings.gettext("msg_no_plugins"), "PLUGINS")
|
3087
|
+
#self.info("PYMUD当前并未加载任何插件。", "PLUGINS")
|
3088
3088
|
else:
|
3089
|
-
self.info(
|
3089
|
+
self.info(Settings.gettext("msg_plugins_list", count), "PLUGINS")
|
3090
|
+
#self.info(f"PYMUD当前已加载 {count} 个插件,分别为:", "PLUGINS")
|
3090
3091
|
for name, plugin in self.plugins.items():
|
3091
|
-
self.info(
|
3092
|
+
self.info(Settings.gettext("msg_plugins_info", plugin.desc['DESCRIPTION'], plugin.desc['VERSION'], plugin.desc['AUTHOR'], plugin.desc['RELEASE_DATE']), f"PLUGIN {name}")
|
3093
|
+
#self.info(f"{plugin.desc['DESCRIPTION']}, 版本 {plugin.desc['VERSION']} 作者 {plugin.desc['AUTHOR']} 发布日期 {plugin.desc['RELEASE_DATE']}", f"PLUGIN {name}")
|
3092
3094
|
|
3093
3095
|
elif len(args) == 1:
|
3094
3096
|
name = args[0]
|
3095
3097
|
if name in self.plugins.keys():
|
3096
3098
|
plugin = self.plugins[name]
|
3097
|
-
self.info(
|
3099
|
+
self.info(Settings.gettext("msg_plugins_info", plugin.desc['DESCRIPTION'], plugin.desc['VERSION'], plugin.desc['AUTHOR'], plugin.desc['RELEASE_DATE']), f"PLUGIN {name}")
|
3100
|
+
#self.info(f"{plugin.desc['DESCRIPTION']}, 版本 {plugin.desc['VERSION']} 作者 {plugin.desc['AUTHOR']} 发布日期 {plugin.desc['RELEASE_DATE']}", f"PLUGIN {name}")
|
3098
3101
|
self.writetobuffer(plugin.help, True)
|
3099
3102
|
|
3100
3103
|
def handle_replace(self, code: CodeLine = None, *args, **kwargs):
|
@@ -3155,7 +3158,7 @@ class Session:
|
|
3155
3158
|
try:
|
3156
3159
|
exec(code.commandText[4:])
|
3157
3160
|
except Exception as e:
|
3158
|
-
self.error(
|
3161
|
+
self.error(Settings.gettext("msg_py_exception", e))
|
3159
3162
|
|
3160
3163
|
def handle_info(self, code: CodeLine = None, *args, **kwargs):
|
3161
3164
|
'''
|
@@ -3205,21 +3208,13 @@ class Session:
|
|
3205
3208
|
new_text, new_code = code.expand(self, *args, **kwargs)
|
3206
3209
|
self.error(new_text[7:])
|
3207
3210
|
|
3208
|
-
def info2(self, msg, title =
|
3211
|
+
def info2(self, msg, title = None, style = Settings.INFO_STYLE):
|
3212
|
+
title = title or Settings.gettext("title_msg")
|
3209
3213
|
msg = f"{msg}"
|
3210
3214
|
|
3211
|
-
# if Settings.client["newline"] in msg:
|
3212
|
-
# new_lines = list()
|
3213
|
-
# msg_lines = msg.split(Settings.client["newline"])
|
3214
|
-
# for line in msg_lines:
|
3215
|
-
# new_lines.append("{}{}".format(style, line))
|
3216
|
-
|
3217
|
-
# msg = Settings.client["newline"].join(new_lines)
|
3218
|
-
|
3219
|
-
# 将颜色跨行显示移动到了MudFormatProcessor中,此处无需再处理(不行,还得恢复)
|
3220
3215
|
self.writetobuffer("{}〔{}〕{}{}".format(style, title, msg, Settings.CLR_STYLE), newline = True)
|
3221
3216
|
|
3222
|
-
def info(self, msg, title =
|
3217
|
+
def info(self, msg, title = None, style = Settings.INFO_STYLE):
|
3223
3218
|
"""
|
3224
3219
|
使用默认的INFO_STYLE(绿色)输出信息,并自动换行。信息格式类似 [title] msg
|
3225
3220
|
|
@@ -3227,9 +3222,10 @@ class Session:
|
|
3227
3222
|
:param title: 要显示在前面的标题,不指定时默认为 PYMUD INFO
|
3228
3223
|
:param style: 要输出信息的格式(ANSI), 默认为 INFO_STYLE, \x1b[32m
|
3229
3224
|
"""
|
3225
|
+
title = title or Settings.gettext("title_info")
|
3230
3226
|
self.info2(msg, title, style)
|
3231
3227
|
|
3232
|
-
def warning(self, msg, title =
|
3228
|
+
def warning(self, msg, title = None, style = Settings.WARN_STYLE):
|
3233
3229
|
"""
|
3234
3230
|
使用默认的WARN_STYLE(黄色)输出信息,并自动换行。信息格式类似 [title] msg
|
3235
3231
|
|
@@ -3237,9 +3233,10 @@ class Session:
|
|
3237
3233
|
:param title: 要显示在前面的标题,不指定时默认为 PYMUD WARNING
|
3238
3234
|
:param style: 要输出信息的格式(ANSI), 默认为 WARN_STYLE, \x1b[33m
|
3239
3235
|
"""
|
3236
|
+
title = title or Settings.gettext("title_warning")
|
3240
3237
|
self.info2(msg, title, style)
|
3241
3238
|
|
3242
|
-
def error(self, msg, title =
|
3239
|
+
def error(self, msg, title = None, style = Settings.ERR_STYLE):
|
3243
3240
|
"""
|
3244
3241
|
使用默认的ERR_STYLE(红色)输出信息,并自动换行。信息格式类似 [title] msg
|
3245
3242
|
|
@@ -3247,6 +3244,7 @@ class Session:
|
|
3247
3244
|
:param title: 要显示在前面的标题,不指定时默认为 PYMUD ERROR
|
3248
3245
|
:param style: 要输出信息的格式(ANSI), 默认为 ERR_STYLE, \x1b[31m
|
3249
3246
|
"""
|
3247
|
+
title = title or Settings.gettext("title_error")
|
3250
3248
|
self.info2(msg, title, style)
|
3251
3249
|
|
3252
3250
|
def handle_log(self, code: CodeLine = None, *args, **kwargs):
|
@@ -3292,16 +3290,21 @@ class Session:
|
|
3292
3290
|
if len(args) == 0:
|
3293
3291
|
session_loggers = set(self._loggers.keys())
|
3294
3292
|
app_loggers = set(self.application.loggers.keys()).difference(session_loggers)
|
3295
|
-
|
3293
|
+
|
3294
|
+
self.info(Settings.gettext("msg_log_title"))
|
3295
|
+
#self.info("本会话中的记录器情况:")
|
3296
3296
|
for name in session_loggers:
|
3297
3297
|
logger = self.application.loggers[name]
|
3298
|
-
self.info(f"
|
3298
|
+
self.info(f"{Settings.gettext('logger')} {logger.name}, {Settings.gettext('logger_status')}: {Settings.gettext('enabled') if logger.enabled else Settings.gettext('disabled')}, {Settings.gettext('file_mode')}: {logger.mode}, {Settings.gettext('logger_mode')}: {Settings.gettext('ANSI') if logger.raw else Settings.gettext('plain_text')}")
|
3299
|
+
#self.info(f"记录器 {logger.name}, 当前状态: {'开启' if logger.enabled else '关闭'}, 文件模式: {logger.mode}, 记录模式: {'ANSI' if logger.raw else '纯文本'}")
|
3299
3300
|
|
3300
3301
|
if len(app_loggers) > 0:
|
3301
|
-
self.info("
|
3302
|
+
self.info(Settings.gettext("msg_log_title2"))
|
3303
|
+
#self.info("本应用其他会话中的记录器情况:")
|
3302
3304
|
for name in app_loggers:
|
3303
3305
|
logger = self.application.loggers[name]
|
3304
|
-
self.info(f"
|
3306
|
+
self.info(f"{Settings.gettext('logger')} {logger.name}, {Settings.gettext('logger_status')}: {Settings.gettext('enabled') if logger.enabled else Settings.gettext('disabled')}, {Settings.gettext('file_mode')}: {logger.mode}, {Settings.gettext('logger_mode')}: {Settings.gettext('ANSI') if logger.raw else Settings.gettext('plain_text')}")
|
3307
|
+
#self.info(f"记录器 {logger.name}, 当前状态: {'开启' if logger.enabled else '关闭'}, 文件模式: {logger.mode}, 记录模式: {'ANSI' if logger.raw else '纯文本'}")
|
3305
3308
|
|
3306
3309
|
else:
|
3307
3310
|
name = self.name
|
@@ -3311,24 +3314,30 @@ class Session:
|
|
3311
3314
|
if (args[0] == "start"):
|
3312
3315
|
if "-n" in args:
|
3313
3316
|
mode = "n"
|
3314
|
-
mode_name = '新建'
|
3317
|
+
#mode_name = '新建'
|
3318
|
+
mode_name = Settings.gettext("filemode_new")
|
3315
3319
|
elif "-w" in args:
|
3316
3320
|
mode = "w"
|
3317
|
-
mode_name = '覆写'
|
3321
|
+
#mode_name = '覆写'
|
3322
|
+
mode_name = Settings.gettext("filemode_overwrite")
|
3318
3323
|
else:
|
3319
3324
|
mode = "a"
|
3320
|
-
mode_name = '
|
3325
|
+
#mode_name = '追加'
|
3326
|
+
mode_name = Settings.gettext("filemode_append")
|
3321
3327
|
|
3322
3328
|
raw = True if "-r" in args else False
|
3323
|
-
raw_name = '原始ANSI' if raw else '纯文本'
|
3329
|
+
#raw_name = '原始ANSI' if raw else '纯文本'
|
3330
|
+
raw_name = Settings.gettext("ANSI") if raw else Settings.gettext("plain_text")
|
3324
3331
|
|
3325
3332
|
logger = self.getLogger(name = name, mode = mode, raw = raw)
|
3326
3333
|
logger.enabled = True
|
3327
3334
|
|
3328
|
-
self.info(f"{datetime.datetime.now()}: 记录器{name}以{mode_name}文件模式以及{raw_name}记录模式开启。")
|
3335
|
+
#self.info(f"{datetime.datetime.now()}: 记录器{name}以{mode_name}文件模式以及{raw_name}记录模式开启。")
|
3336
|
+
self.info(Settings.gettext("msg_logger_enabled", datetime.datetime.now(), name, mode_name, raw_name))
|
3329
3337
|
|
3330
3338
|
elif (args[0] == "stop"):
|
3331
|
-
self.info(f"{datetime.datetime.now()}: 记录器{name}记录已关闭。")
|
3339
|
+
#self.info(f"{datetime.datetime.now()}: 记录器{name}记录已关闭。")
|
3340
|
+
self.info(Settings.gettext("msg_logger_disabled", datetime.datetime.now(), name))
|
3332
3341
|
self.log.enabled = False
|
3333
3342
|
|
3334
3343
|
elif (args[0] == "show"):
|
@@ -3345,7 +3354,7 @@ class Session:
|
|
3345
3354
|
self.application.logFileShown = filepath
|
3346
3355
|
self.application.showLogInTab()
|
3347
3356
|
else:
|
3348
|
-
self.warning(
|
3357
|
+
self.warning(Settings.gettext("msg_logfile_not_exists", file))
|
3349
3358
|
|
3350
3359
|
else:
|
3351
3360
|
self.application.show_logSelectDialog()
|