Releases: crapex/pymud
0.22.5
-
功能新增: 为Session类型增加 invalidate 方法,调用该方法时,只有本会话是当前会话时,该方法才会调用 PyMudApp.invalidate() 进行刷新。
-
注意事项: 对于在个人脚本中调用的 session.application.invalidate() 方法,建议改成 session.invalidate()。因为会话的刷新会判断前台,而application的刷新会强制刷新。
-
功能新增: 增加 lazy 模式,当设置为 lazymode 模式时,即使 PyMudApp.invalidate() 的调用也不会进行显示刷新,系统仅保留在切换会话、以及定时1s材记性刷新。该模式可以通过快捷键F4切换。在lazy模式下,最底下状态栏右侧会显示"LAZY"提示。该模式可以用于在后台挂机运行时,降低CPU占用率。
-
功能新增: 增加 verbatim 模式,当设置为 verbatim 模式时,所有命令行输入的命令,都不会进行解析,直接发送到服务器。该模式可以通过快捷键F3切换。在 verbatim 模式下,最底下状态栏右侧会显示"VERB"提示。
-
功能新增: 增加一个非解析提示符"/",当在命令行行首使用该提示符时,所有后续命令不进行任何解析,直接发送到服务器。该提示符可以通过 pymud.cfg 中的 noparser 进行覆盖。此提示符相当于临时使用 verbatim 模式。
-
功能新增: 增加设置 "cmd_prefix",当配置该参数后,在窗口中的命令回显或者log记录中,输入的命令会带有该前缀。改配置默认为空白,可以通过 pymud.cfg 中的 cmd_prefix 进行覆盖。同步调整了命令的显示样式,与info默认值相同。
-
功能调整:在#var等命令执行之后,会调用del删除创建的临时列表,以加快内存释放。
-
功能调整: 在会话被关闭时,会调用del对会话中的相关对象同步进行清除,并使用代码调用执行垃圾回收(但我测试了,并没有啥用处,内存占没什么变化)。
-
问题修复: 修复了在使用网络配置(包括指定IP和使用socks5代理)连接服务器后,当断开后,再重新执行 #con 不会再次调用网络配置,而是直接使用默认配置的问题。
-
New Feature: Added
invalidatemethod to Session class. When called, it only triggersPyMudApp.invalidate()for refresh if the current session is the active session. -
Note: For
session.application.invalidate()calls in personal scripts, it is recommended to change tosession.invalidate(). Because session refresh checks for foreground status, while application refresh forces a refresh. -
New Feature: Added lazy mode. When lazy mode is enabled, even
PyMudApp.invalidate()calls will not trigger display refresh. The system only refreshes when switching sessions or on a 1-second timer. This mode can be toggled with the F4 hotkey. In lazy mode, "LAZY" is displayed on the right side of the bottom status bar. This mode can be used to reduce CPU usage when running in the background. -
New Feature: Added verbatim mode. When verbatim mode is enabled, all commands entered in the command line are sent directly to the server without any parsing. This mode can be toggled with the F3 hotkey. In verbatim mode, "VERB" is displayed on the right side of the bottom status bar.
-
New Feature: Added a non-parsing prefix "/". When this prefix is used at the beginning of a command line, all subsequent commands are sent directly to the server without any parsing. This prefix can be overridden via
noparserin pymud.cfg. This prefix is equivalent to temporarily using verbatim mode. -
New Feature: Added "cmd_prefix" setting. When configured, command echo in the window or log records will display commands with this prefix. Default is empty, can be overridden via
cmd_prefixin pymud.cfg. Also adjusted command display style to match the default info style. -
Improvement: After executing commands like #var, temporary lists created are deleted using
delto speed up memory release. -
Improvement: When a session is closed, related objects in the session are cleared synchronously using
del, and garbage collection is triggered programmatically (however, testing showed no significant effect on memory usage). -
Bug Fix: Fixed the issue where after disconnecting, when you using #con, the default network configuration is used instead of the one you specified.
0.22.1
0.22.0
- 问题修复: beautify 对齐恢复成以往的实现方式,即统一在右侧添加字符。
- 问题修复: 修复了 #var 命令中,使用中文变量名时,= 显示不对齐的问题。
- 问题修复: 修复了当使用多重继承创建脚本,同时继承 Command 和 IConfig 时,装饰器无法使用的问题。现在仅需一次 super() 调用即可解决。
- 问题修复: 修复了使用unload/reload时,有时候不显示卸载成功的问题。现在可以正常的报出卸载中的错误了。
- 问题修复: 现在可以正常的使用 remain_last_input 配置保留命令行输入了(感谢 @cantus 提供的代码)。
- 功能新增: client 新增配置 split_ratio,用于设置分屏比例。默认值为0.5,即上下分屏比例为50%。另外,可以通过快捷键 Shift + ↑/↓ 来动态调整分屏比例 (感谢 @cantus 提供的代码)。
- 功能新增: 现在上箭头在光标处于最右侧时,也是优先使用自动补完了。若无自动补完,则进行历史命令切换。
- 功能新增: 按键ESC可以直接清除命令行中的全部内容(受限于终端对按键的处理,需要连续按三次ESC按键才能生效)。
- 功能新增: 现在Tab按键也具有自动补完功能了。
- 功能新增: 为IConfigBase接口新增了info, warning, error方法,以后继承 IConfig 的类型,可以直接 self.info 了。
- 功能新增: 现在 @alias, @trigger, @Timer, @gmcp, @exception 等装饰器可以直接装饰在async def的异步函数上了。同步的,所有继承自 BaseObject 对象的类型,包括 Trigger, Alias, Timer, GMCPTrigger 等, 其onSuccess, onFailure等回调可以直接赋值为异步函数。
- 功能调整: 移除了顶部菜单栏最右侧阻挡事件响应的空白菜单。原因是有时焦点位于此空白菜单时,单击窗口焦点不能正常移动到命令栏,会造成误解。
- 功能新增: 在 @exception 输出异常信息时,会定位标记了 @exception 并产生异常的函数及所在文件。
- 功能新增: 为 Session 类型新增了一个 wait_triggers 方法,可以简化等待多个触发器的处理代码。
- 弃用预告: 由于 @exception 装饰器可以直接对异步函数使用, @async_exception 装饰器将在下一版本移除。
0.20.4
0.20.4 (2025-03-30)
- 功能调整: 为插件功能新增了 PLUGIN_PYMUD_DESTROY 方法,用于在插件被卸载时,进行一些清理工作。
- 功能调整: 将插件的 PLUGIN_PYMUD_START 方法的调用,从插件加载时刻移动到事件循环启动之后,这样在加载时,可以使用 asyncio.create_task或 asyncio.ensure_future 来执行一些异步操作
0.20.3 (2025-03-05)
- 功能调整: 为适应MacOS下的快捷键,增加Shift+左右箭头同样作为切换会话的快捷键。
- 功能调整: 会话关闭和APP退出时,偶尔受网络影响导致服务器掉线但本地未检测到时会无法退出。现增加最长10s等待,超时后会中断,强制退出。
0.20.2 (2024-11-26)
- 功能调整: MTTS协商中,将256 Color明确写入协商回复。原先仅包含ANSI 和 TrueColor。推测武庙特殊颜色偶尔不正常与此有关(已测试无关)。
- 功能调整: 修复了纯文本正则处理,目前理论上支持所有ANSI控制代码的处置,以正确响应纯文本触发器。
- 功能调整: 修改了#var和#global的显示实现,提高了变量打印排列的整齐度和辨识度,以适应长值变量和复杂变量。
- 问题修复: 修复了单行颜色代码跨行无法显示问题。现在星宿毒草可以正常辨认颜色了。
- 功能调整: 调整了info/warning/error的显示处理,默认样式进行了修改。
- 功能新增: 新增菜单选项:打开/关闭美化,以便于更好的在触发器时复制出正确的内容(以前计算可能不准确)。
- 功能新增: 状态栏的分隔符可以通过本地设置取消了。在pymud.cfg的client中新增设置,将 status_divider 设置为 false 即可。
- 功能调整: 在pymud.cfg的client中可以支持将buffer_lines设置为0了,表示不清除缓存。
- 功能新增: 为状态栏显示函数增加了异常保护,再有status_maker出错的时候,状态栏会显示出错信息。
0.20.1 (2024-11-16)
- 功能调整: 会话中触发器匹配实现进行部分调整,减少循环次数以提高响应速度
- 功能调整: #test / #show 触发器测试功能调整,现在会对使能的和未使能的触发器均进行匹配测试。其中,#show 命令仅测试,而 #test 命令会导致触发器真正响应。
- 功能新增: pymud对象新增了一个持续运行的1s的周期定时任务。该任务中会刷新页面显示。可以使用 session.application.addTimerTickCallback 和 session.application.removeTimerTickCallback 来注册和解除定时器回调。
0.20.0 (2024-08-25)
- 功能调整: 将模块主入口函数从__main__.py中移动到main.py中,以使可以在当前目录下,可直接使用pymud,也可使用python -m pymud启动
- 功能调整: 使用argsparser标准模块来配置命令行,可以使用 pymud -h 查看命令行具体参数及说明
- 功能新增: 命令行参数增加指定启动目录的功能,参数为 -s, --startup_dir。即可以从任意目录通过指定脚本目录方式启动PyMUD了。
- 例如, PS C:> pymud -s d:\prog\pkuxkx 相当于 PS D:\prog\pkuxk> pymud
- 问题修复: MacOS下 python -m pymud init 创建目录报错的问题。同时,将所有系统上的默认目录均使用 ~/pkuxkx (影响windows)
- 功能调整: 恢复在__init__.py中增加PyMudApp的导出,可以恢复使用from pymud import PyMudApp了
- 功能新增: 增加log功能,详见 #log 命令介绍、类参考中的 Logger 类,以及 Session 类的 handle_log 方法
- 功能新增: 增加 #disconnect, #dis 命令,可以使当前会话从服务器断开。相当于操作菜单 会话->断开连接
- 功能调整: 在没有session的时候,也可以执行#exit命令
- 功能新增: #session 命令增加快捷创建会话功能,假如已有快捷菜单 世界->pkuxkx->newstart , 则可以通过 #session pkuxkx.newstart 直接创建该会话,效果等同于点击该菜单
- 功能调整: 点击菜单创建会话时,若会话已存在,则将该会话切换为当前会话
- 重大更新: 完全重写了模块的加载、卸载、重新加载方法,修复模块使用中的问题
- 功能调整: 现在只要将一个类型继承 IConfig 接口,即被识别为配置类型。这种类型在模块加载时会自动创建其实例。当然,名称为Configuration的类型也同样被认为是配置类型,保持向前兼容性。唯一要求是,该类型的构造函数允许仅传递一个session对象。
- 功能新增: 各类配置类型的卸载现在既可以定义在__unload__方法中,也可以定义在unload方法中。可以根据自己喜好选择一个即可。
- 功能调整: 各配置类型加载和重新加载前,会自动调用模块的__unload__方法或unload方法(若有)
- 功能新增: Command基类增加__unload__方法和unload方法,二者在从会话中移除该 Command 时均会自动调用。自定义的Command子类应覆盖这两种方法中的一种方法,并在其中增加清除类型自行创建的 Trigger, Alias 等会话对象。这样,模块卸载时只要移除命令本身,在命令中新建的其他关联对象将被一同移除。
- 功能新增: 所有PyMUD基础对象类型及其子类型,包括 Alias, Trigger, Timer, Command, GMCPTrigger 及它们的子类型,在创建的时候会自动添加到会话中,无需再进行 addObject 等操作了
- 问题修复: 修复部分正则表达式书写错误问题
- 功能新增: Session类新增waitfor函数,用于执行一段代码后立即等待某个触发器的情况,简化原三行代码写法
# 原来为确保await triggered的任务在输入前等待,有时候需要这么写:
task = self.create_task(self.tri1.triggered())
await asyncio.sleep(0.05)
self.session.writeline('dazuo')
await task
# 现在可以一句话简写:
await self.session.waitfor('dazuo', self.create_task(self.tri1.triggered()))-
功能调整: Session类的addTriggers等方法接受的dict中,会将对象本身id作为会话处理id。当该id与key不一致时,会同时显示警告。
-
功能新增: Session类新增addObject, addObjects, delObject, delObjects用于操作别名、定时器、触发器、GMCP触发器、命令等对象。
- 使用示例:
# 所有对象均可以使用 delObject 直接从会话中移除,会自动根据对象类型推断,无需通过函数名区分 session.delObject(self.tri1) session.delObject(self.ali1) session.delObject(self.timer1) objs = [ Trigger(session, xxx, xxx), Alias(session, xxx), SimpleCommand(session, xxx), Timer(session, xxx), GMCPTrigger(session, xxx) ] session.delObjects(objs) # 可以直接从会话中移除一个数组中的所有对象,会自动判断对象类别
-
功能新增: Session类型新增idletime属性,可以获取本会话发呆秒数(float类型)。当会话处于未连接状态时,返回 -1。可以利用定时器,在其中检测 idletime 值,以在机器人出错后处理恢复
-
功能新增: Session的所有异步命令调用函数增加返回值,现在调用 session.exec_async, exec_command_async 等方法执行的内容若匹配为命令时,会返回最后最后一个 Command 对象的 execute 函数的返回值
- 例如, result = await self.session.cmds.cmd_runto.execute('rt yz') 与 result = await self.session.exec_async('rt yz') 等价,返回值相同
- 但 result = await self.session.exec_async('rt yz;dzt'),该返回的result 仅是 dzt 命令的 execute 的返回值。 rt yz 命令返回值被丢弃。
-
功能新增: 增加临时变量概念,变量名以下划线开头的为临时变量,此类变量不会被保存到 .mud 文件中。
-
功能新增: 为 BaseObject 基类的 self.session 增加了 Session 类型限定,现在自定义 Command 等时候,使用 self.session 时会有 IntelliSence 函数智能提示了,所有帮助说明已补全
-
问题修复: 修复 #var 等命令中,若含有中文则等号位置不对齐的问题
-
功能调整: 在 #tri 等命令中,当对象的 group 为空时,将不再显示 group 属性,减少无用信息
v0.15c-20231129
去掉了仅3.10之后的版本所支持的类型声明语法,以满足低版本Python的应用。
经实测,Python 3.7.9版可正常运行。
微小更新
v0.15b-20231026 correction settings
v0.13b-20230808
- 修复部分bug
- 增加状态窗口
v0.11b-20230714
修复async运行中的异常处理问题