pymud 0.20.0a1__py3-none-any.whl → 0.20.0a2__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/__main__.py +19 -26
- pymud/pymud.py +1 -0
- pymud/session.py +37 -3
- pymud/settings.py +2 -2
- {pymud-0.20.0a1.dist-info → pymud-0.20.0a2.dist-info}/METADATA +10 -4
- pymud-0.20.0a2.dist-info/RECORD +17 -0
- pymud-0.20.0a1.dist-info/RECORD +0 -17
- {pymud-0.20.0a1.dist-info → pymud-0.20.0a2.dist-info}/LICENSE.txt +0 -0
- {pymud-0.20.0a1.dist-info → pymud-0.20.0a2.dist-info}/WHEEL +0 -0
- {pymud-0.20.0a1.dist-info → pymud-0.20.0a2.dist-info}/entry_points.txt +0 -0
- {pymud-0.20.0a1.dist-info → pymud-0.20.0a2.dist-info}/top_level.txt +0 -0
pymud/__main__.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import
|
1
|
+
import os, json, platform, shutil, logging, argparse
|
2
|
+
from pathlib import Path
|
2
3
|
from .pymud import main
|
3
4
|
from .settings import Settings
|
4
5
|
|
@@ -43,34 +44,26 @@ CFG_TEMPLATE = {
|
|
43
44
|
def init_pymud_env(args):
|
44
45
|
print(f"欢迎使用PyMUD, 版本{Settings.__version__}. 使用PyMUD时, 建议建立一个新目录(任意位置),并将自己的脚本以及配置文件放到该目录下.")
|
45
46
|
print("即将开始为首次运行初始化环境...")
|
46
|
-
|
47
|
-
|
47
|
+
|
48
48
|
dir = args.dir
|
49
49
|
if dir:
|
50
|
-
print(f"你已经指定了创建脚本的目录为 {args.dir}
|
51
|
-
|
50
|
+
print(f"你已经指定了创建脚本的目录为 {args.dir}")
|
51
|
+
dir = Path(dir)
|
52
52
|
else:
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
dir =
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
if not os.path.exists(dir):
|
70
|
-
print(f'检测到给定目录 {dir} 不存在,正在创建目录...', end = "")
|
71
|
-
os.mkdir(dir)
|
72
|
-
os.chdir(dir)
|
73
|
-
print(f'完成!')
|
53
|
+
dir = Path.home().joinpath('pkuxkx')
|
54
|
+
|
55
|
+
system = platform.system().lower()
|
56
|
+
dir_enter = input(f"检测到当前系统为 {system}, 请指定游戏脚本的目录(若目录不存在会自动创建),直接回车表示使用默认值 [{dir}]:")
|
57
|
+
if dir_enter:
|
58
|
+
dir = Path(dir_enter)
|
59
|
+
|
60
|
+
if dir.exists() and dir.is_dir():
|
61
|
+
print(f'检测到给定目录 {dir} 已存在,切换至此目录...')
|
62
|
+
else:
|
63
|
+
print(f'检测到给定目录 {dir} 不存在,正在创建并切换至目录...')
|
64
|
+
dir.mkdir()
|
65
|
+
|
66
|
+
os.chdir(dir)
|
74
67
|
|
75
68
|
if os.path.exists('pymud.cfg'):
|
76
69
|
print(f'检测到脚本目录下已存在pymud.cfg文件,将直接使用此文件进入PyMUD...')
|
pymud/pymud.py
CHANGED
@@ -663,6 +663,7 @@ class PyMudApp:
|
|
663
663
|
plugin.onSessionDestroy(self.current_session)
|
664
664
|
|
665
665
|
name = self.current_session.name
|
666
|
+
self.current_session.closeLoggers()
|
666
667
|
self.current_session.clean()
|
667
668
|
self.current_session = None
|
668
669
|
self.consoleView.buffer = SessionBuffer()
|
pymud/session.py
CHANGED
@@ -116,9 +116,6 @@ class Session:
|
|
116
116
|
self._events["connected"] = None
|
117
117
|
self._events["disconnected"] = None
|
118
118
|
|
119
|
-
self._loggers = dict()
|
120
|
-
self.log = self.getLogger(name)
|
121
|
-
|
122
119
|
self._auto_script = kwargs.get("scripts", None)
|
123
120
|
|
124
121
|
self._cmds_handler = dict() # 支持的命令的处理函数字典
|
@@ -144,6 +141,9 @@ class Session:
|
|
144
141
|
|
145
142
|
self.initialize()
|
146
143
|
|
144
|
+
self._loggers = dict()
|
145
|
+
self.log = self.getLogger(name)
|
146
|
+
|
147
147
|
self.host = host
|
148
148
|
self.port = port
|
149
149
|
self.encoding = encoding or self.encoding
|
@@ -176,6 +176,10 @@ class Session:
|
|
176
176
|
if Settings.client["auto_connect"]:
|
177
177
|
self.open()
|
178
178
|
|
179
|
+
def __del__(self):
|
180
|
+
self.clean()
|
181
|
+
self.closeLoggers()
|
182
|
+
|
179
183
|
def initialize(self):
|
180
184
|
"初始化Session有关对象。 **无需脚本调用。**"
|
181
185
|
self._line_buffer = bytearray()
|
@@ -376,6 +380,15 @@ class Session:
|
|
376
380
|
|
377
381
|
return logger
|
378
382
|
|
383
|
+
def closeLoggers(self):
|
384
|
+
"移除本会话所有相关Logger"
|
385
|
+
for name in self._loggers.keys():
|
386
|
+
if isinstance(self._loggers[name], Logger):
|
387
|
+
self._loggers[name].enabled = False
|
388
|
+
|
389
|
+
if name in self.application.loggers.keys():
|
390
|
+
self.application.loggers.pop(name)
|
391
|
+
|
379
392
|
@property
|
380
393
|
def modules(self) -> OrderedDict:
|
381
394
|
"""
|
@@ -758,6 +771,27 @@ class Session:
|
|
758
771
|
cmd = line + self.newline
|
759
772
|
self.write(cmd.encode(self.encoding, Settings.server["encoding_errors"]))
|
760
773
|
|
774
|
+
async def waitfor(self, line: str, awaitable, wait_time = 0.05) -> None:
|
775
|
+
"""
|
776
|
+
调用writline向服务器中写入一行后,等待到可等待对象再返回。
|
777
|
+
|
778
|
+
:param line: 使用writeline写入的行
|
779
|
+
:param awaitable: 等待的可等待对象
|
780
|
+
:param wait_time: 写入行前等待的延时,单位为s。默认0.05
|
781
|
+
|
782
|
+
由于异步的消息循环机制,如果在写入命令之后再创建可等待对象,则有可能服务器响应在可等待对象的创建之前
|
783
|
+
此时使用await就无法等待到可等待对象的响应,会导致任务出错。
|
784
|
+
一种解决方式是先创建可等待对象,然后写入命令,然后再等待可等待对象,但这种情况下需要写入三行代码,书写麻烦
|
785
|
+
因此该函数是用于简化此类使用时的写法。
|
786
|
+
|
787
|
+
示例:
|
788
|
+
await session.waitfor('a_cmd', self.create_task(a_tri.triggered()))
|
789
|
+
done, pending = await session.waitfor('a_cmd', asyncio.wait([self.create_task(a_tri.triggered()), self.create_task(b_tri.triggered())], return_when = 'FIRST_COMPLETED'))
|
790
|
+
"""
|
791
|
+
await asyncio.sleep(wait_time)
|
792
|
+
self.writeline(line)
|
793
|
+
return await awaitable
|
794
|
+
|
761
795
|
def exec(self, cmd: str, name = None, *args, **kwargs):
|
762
796
|
"""
|
763
797
|
在名称为name的会话中使用exec_command执行MUD命令。当不指定name时,在当前会话中执行。
|
pymud/settings.py
CHANGED
@@ -11,9 +11,9 @@ class Settings:
|
|
11
11
|
"APP 名称, 默认PYMUD"
|
12
12
|
__appdesc__ = "a MUD client written in Python"
|
13
13
|
"APP 简要描述"
|
14
|
-
__version__ = "0.20.
|
14
|
+
__version__ = "0.20.0a2"
|
15
15
|
"APP 当前版本"
|
16
|
-
__release__ = "2024-08-
|
16
|
+
__release__ = "2024-08-19"
|
17
17
|
"APP 当前版本发布日期"
|
18
18
|
__author__ = "本牛(newstart)@北侠"
|
19
19
|
"APP 作者"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pymud
|
3
|
-
Version: 0.20.
|
3
|
+
Version: 0.20.0a2
|
4
4
|
Summary: a MUD Client written in Python
|
5
5
|
Author-email: "newstart@pkuxkx" <crapex@crapex.cc>
|
6
6
|
Maintainer-email: "newstart@pkuxkx" <crapex@crapex.cc>
|
@@ -684,7 +684,7 @@ Project-URL: Bug Reports, https://github.com/crapex/pymud/issues
|
|
684
684
|
Project-URL: Source, https://github.com/crapex/pymud/
|
685
685
|
Project-URL: document, https://pymud.readthedocs.io/
|
686
686
|
Keywords: MUD,multi-user dungeon,client
|
687
|
-
Classifier: Development Status ::
|
687
|
+
Classifier: Development Status :: 3 - Alpha
|
688
688
|
Classifier: Intended Audience :: End Users/Desktop
|
689
689
|
Classifier: Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)
|
690
690
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
@@ -971,8 +971,14 @@ Requires-Dist: prompt-toolkit
|
|
971
971
|
+ 功能调整: 变量替代时,会自动实现类型转化,当被替代变量值为非 str 类型时不会再报错
|
972
972
|
+ 问题修复: 修复之前从后向前选择时,无法复制的问题
|
973
973
|
|
974
|
-
### 0.
|
974
|
+
### 0.20.0a1 (2024-08-14)
|
975
|
+
+ 功能调整: 使用argsparser标准模块来配置命令行,可以使用 python -m pymud -h 查看命令行具体参数及说明
|
975
976
|
+ 功能调整: 恢复在__init__.py中增加PyMudApp的导出,可以恢复使用from pymud import PyMudApp了
|
976
977
|
+ 功能调整: 在没有session的时候,也可以执行#exit命令
|
977
978
|
+ 功能调整: 模块加载和重新加载前,会自动调用模块的unload方法(若有)
|
978
|
-
+ 功能新增: 增加log
|
979
|
+
+ 功能新增: 增加log功能,详见 #log 命令介绍、类参考中的 Logger 类,以及 Session 类的 handle_log 方法
|
980
|
+
|
981
|
+
### 0.20.0a2 (2024-08-19)
|
982
|
+
+ 问题修复: 关闭会话时未关闭相关记录器,导致后续会话无法启动
|
983
|
+
+ 问题修复: MacOS下 python -m pymud init 创建目录报错的问题。同时,将所有系统上的默认目录均使用 ~/pkuxkx (影响windows)
|
984
|
+
+ 功能新增: Session类新增waitfor函数,用于执行一段代码后立即等待某个触发器的情况,简化原三行代码写法
|
@@ -0,0 +1,17 @@
|
|
1
|
+
pymud/__init__.py,sha256=Ep6JrWv2wwlLV5nI7F6BOA7Ei6yVgnxvhIRwFGPr2Oc,501
|
2
|
+
pymud/__main__.py,sha256=vE5mi5WFyiUPGLfq-1sMrEpHoD2Vxiy5XXenmoXFA1c,6230
|
3
|
+
pymud/dialogs.py,sha256=D0ZtCeoBchF5eYzXumkOi3p-maCQZu4v9-wJgxQ790o,6500
|
4
|
+
pymud/extras.py,sha256=QwWwLavVtuXfg0Qb0f_040va1_kej27P-ZB_19HB6Qk,42422
|
5
|
+
pymud/logger.py,sha256=39I_rFBU5MEiOTJyU7GAy9cY_MpYHKiXNgBhpokQrTA,5358
|
6
|
+
pymud/objects.py,sha256=0aUc-PZfVSdYPEAamY0eO6k3P9wJcw6PNxfSE8eZZeE,38072
|
7
|
+
pymud/pkuxkx.py,sha256=vWXHU6GF0HQ0eWb3LmxFVRP0cKnigffCX7Z-LJvwVtw,11496
|
8
|
+
pymud/protocol.py,sha256=QfDXjlg2OcJXmVoXf_3mAemnYotRXDUlEZNQjhkfXdA,49106
|
9
|
+
pymud/pymud.py,sha256=yAd6nz_ltM3B0fDwMGvaa-tpMlZycZEGJ5E4rZb9Nx4,48235
|
10
|
+
pymud/session.py,sha256=Q1ylk9-5tZGI4maMfDRqzq8Ca6vzG4SivzjxfrpUk84,122932
|
11
|
+
pymud/settings.py,sha256=3FDAgW97SEQfWb9HR6n2U-rQYKxclQXnfaRuo2o0ly0,7147
|
12
|
+
pymud-0.20.0a2.dist-info/LICENSE.txt,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
13
|
+
pymud-0.20.0a2.dist-info/METADATA,sha256=eFQxv8YNREut-zvVzsCf7uAfM3DAxFOi_vvX4uQITCA,68829
|
14
|
+
pymud-0.20.0a2.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
15
|
+
pymud-0.20.0a2.dist-info/entry_points.txt,sha256=diPUOtTkhgC1hVny7Cdg4aRhaHSynMQoraE7ZhJxUcw,37
|
16
|
+
pymud-0.20.0a2.dist-info/top_level.txt,sha256=8Gp1eXjxixXjqhhti6tLCspV_8s9sNV3z5Em2_KRhD4,6
|
17
|
+
pymud-0.20.0a2.dist-info/RECORD,,
|
pymud-0.20.0a1.dist-info/RECORD
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
pymud/__init__.py,sha256=Ep6JrWv2wwlLV5nI7F6BOA7Ei6yVgnxvhIRwFGPr2Oc,501
|
2
|
-
pymud/__main__.py,sha256=ybi8pA0BXCZJ_GWgndllT7f1FBBE2tGNCByN0zkaSu0,6748
|
3
|
-
pymud/dialogs.py,sha256=D0ZtCeoBchF5eYzXumkOi3p-maCQZu4v9-wJgxQ790o,6500
|
4
|
-
pymud/extras.py,sha256=QwWwLavVtuXfg0Qb0f_040va1_kej27P-ZB_19HB6Qk,42422
|
5
|
-
pymud/logger.py,sha256=39I_rFBU5MEiOTJyU7GAy9cY_MpYHKiXNgBhpokQrTA,5358
|
6
|
-
pymud/objects.py,sha256=0aUc-PZfVSdYPEAamY0eO6k3P9wJcw6PNxfSE8eZZeE,38072
|
7
|
-
pymud/pkuxkx.py,sha256=vWXHU6GF0HQ0eWb3LmxFVRP0cKnigffCX7Z-LJvwVtw,11496
|
8
|
-
pymud/protocol.py,sha256=QfDXjlg2OcJXmVoXf_3mAemnYotRXDUlEZNQjhkfXdA,49106
|
9
|
-
pymud/pymud.py,sha256=2dbgnzlG9476esOfyp9sv-lRSTpMuRaCXnqrOofOu24,48182
|
10
|
-
pymud/session.py,sha256=uAWt0-AZWpDvVfCjzoxWDpuOwCQ8s1DN_DZ-rVAC5xs,121232
|
11
|
-
pymud/settings.py,sha256=XkyFWTskPGZljuWCaC8cU18ie8-FkecEtb0h3OfcfjU,7145
|
12
|
-
pymud-0.20.0a1.dist-info/LICENSE.txt,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
13
|
-
pymud-0.20.0a1.dist-info/METADATA,sha256=N57G7pGHXWfYKJ2YwJjWFMSYxvfkvwIpmsTKTR1hjro,68201
|
14
|
-
pymud-0.20.0a1.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
15
|
-
pymud-0.20.0a1.dist-info/entry_points.txt,sha256=diPUOtTkhgC1hVny7Cdg4aRhaHSynMQoraE7ZhJxUcw,37
|
16
|
-
pymud-0.20.0a1.dist-info/top_level.txt,sha256=8Gp1eXjxixXjqhhti6tLCspV_8s9sNV3z5Em2_KRhD4,6
|
17
|
-
pymud-0.20.0a1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|