8 类参考 class references

class pymud.pymud.PyMudApp(cfg_data=None)[源代码]

PYMUD程序管理主对象,对窗体、操作及所有会话进行管理。

PyMudApp对象不需要手动创建,在命令行中执行 python -m pymud 时会自动创建对象实例。

参数:
  • cfg_data: 替代配置数据,由本地pymud.cfg文件读取,用于覆盖settings.py中的默认Settings数据

可替代字典: 含义请查阅 应用配置及本地化
  • sessions: 用于创建菜单栏会话的字典

  • client: 用于配置客户端属性的字典

  • text: 用于各默认显示文字内容的字典

  • server: 用于服务器选项的配置字典

  • styles: 用于显示样式的定义字典

  • keys: 用于快捷键定义的字典

替代配置按不同的dict使用dict.update进行更新覆盖,因此可以仅指定需替代的部分。

act_about()[源代码]

菜单: 关于

act_autoreconnect()[源代码]

菜单: 打开/关闭自动重连

act_clearsession()[源代码]

菜单: 清空会话内容

act_close_session()[源代码]

菜单: 关闭当前会话

act_connect()[源代码]

菜单: 连接/重新连接

act_copy()[源代码]

菜单: 复制纯文本

act_copyraw()[源代码]

菜单: 复制(ANSI)

act_discon()[源代码]

菜单: 断开连接

act_echoinput()[源代码]

菜单: 显示/隐藏输入指令

act_exit()[源代码]

菜单: 退出

act_new()[源代码]

菜单: 创建新会话

act_nosplit()[源代码]

菜单: 取消分屏

act_reload()[源代码]

菜单: 重新加载脚本配置

activate_session(key)[源代码]

激活指定名称的session,并将该session设置为当前session

btn_title_clicked(name, mouse_event: MouseEvent)[源代码]

顶部会话标签点击切换鼠标事件

change_session(event: KeyPressEvent)[源代码]

快捷键Ctrl+左右箭头: 切换会话

close_session()[源代码]

关闭当前会话。若当前会话处于连接状态,将弹出对话框以确认。

complete_autosuggest(event: KeyPressEvent)[源代码]

快捷键右箭头→: 自动完成建议

copy(raw=False)[源代码]

复制会话中的选中内容

参数:

raw – 指定采取文本模式还是ANSI格式模式

注意: 复制的内容仅存在于运行环境的剪贴板中。若使用ssh远程,该复制命令不能访问本地剪贴板。

copy_selection(event: KeyPressEvent) None[源代码]

快捷键Ctrl+C/Ctrl+R: 复制选择内容。根据按键不同选择文本复制方式和RAW复制方式

create_session(name, host, port, encoding=None, after_connect=None, scripts=None, userid=None)[源代码]

创建一个会话。菜单或者#session命令均调用本函数执行创建会话。

参数:
  • name – 会话名称

  • host – 服务器域名或IP地址

  • port – 端口号

  • encoding – 服务器编码

  • after_connect – 连接后要向服务器发送的内容,用来实现自动登录功能

  • scripts – 要加载的脚本清单

  • userid – 自动登录的ID(获取自cfg文件中的定义,绑定到菜单),将以该值在该会话中创建一个名为id的变量

create_world_menus()[源代码]

创建世界子菜单,其中根据本地pymud.cfg中的有关配置创建会话有关子菜单

custom_key_press(event: KeyPressEvent)[源代码]

自定义快捷键功能实现,根据keys字典配置在当前会话执行指定指令

del_globals(name)[源代码]

移除一个PYMUD全局变量 移除全局变量是从字典中删除该变量,而不是将其设置为None

参数:

name – 全局变量名称

enter_pressed(buffer: Buffer)[源代码]

命令行回车按键处理

get_frame_title()[源代码]

顶部会话标题选项卡

get_globals(name, default=None)[源代码]

获取PYMUD全局变量

参数:
  • name – 全局变量名称

  • default – 当全局变量不存在时的返回值

get_height()[源代码]

获取ConsoleView的实际高度,等于输出高度-5,(上下线条,菜单,命令栏,状态栏)

get_input_prompt()[源代码]

命令输入行提示符

get_statusbar_right_text()[源代码]

状态栏右侧内容

get_statusbar_text()[源代码]

状态栏内容

get_statuswindow_text()[源代码]

状态窗口: status_maker 的内容

get_width()[源代码]

获取ConsoleView的实际宽度,等于输出宽度-4,(左右线条宽度, 滚动条宽度,右边让出的1列)

property globals

全局变量,快捷点访问器 用于替代get_globals与set_globals函数的调用

handle_session(*args)[源代码]

嵌入命令 #session 的执行函数,创建一个远程连接会话。 该函数不应该在代码中直接调用。

使用:
  • #session {name} {host} {port} {encoding}

  • 当不指定 Encoding: 时, 默认使用utf-8编码

  • 可以直接使用 #{名称} 切换会话和操作会话命令

参数:
name:

会话名称

host:

服务器域名或IP地址

port:

端口号

encoding:

编码格式,不指定时默认为 utf8

示例:
#session {名称} {宿主机} {端口} {编码}

创建一个远程连接会话,使用指定编码格式连接到远程宿主机的指定端口并保存为 {名称} 。其中,编码可以省略,此时使用Settings.server[“default_encoding”]的值,默认为utf8

#session newstart mud.pkuxkx.net 8080 GBK

使用GBK编码连接到mud.pkuxkx.net的8080端口,并将该会话命名为newstart

#session newstart mud.pkuxkx.net 8081

使用UTF8编码连接到mud.pkuxkx.net的8081端口,并将该会话命名为newstart

#newstart

将名称为newstart的会话切换为当前会话

#newstart give miui gold

使名称为newstart的会话执行give miui gold指令,但不切换到该会话

相关命令:
  • #close

  • #exit

hide_history(event: KeyPressEvent) None[源代码]

快捷键Ctrl+Z: 关闭历史行显示

initUI()[源代码]

初始化UI界面

load_plugins()[源代码]

加载插件。将加载pymud包的plugins目录下插件,以及当前目录的plugins目录下插件

page_down(event: KeyPressEvent) None[源代码]

快捷键PageDown: 用于向下翻页。翻页页数为显示窗口行数的一半减去一行。

page_up(event: KeyPressEvent) None[源代码]

快捷键PageUp: 用于向上翻页。翻页页数为显示窗口行数的一半减去一行。

property plugins

所有已加载的插件列表,快捷点访问器

reload_plugin(plugin: Plugin)[源代码]

重新加载指定插件

run()[源代码]

运行本程序

async run_async()[源代码]

以异步方式运行本程序

scroll(lines=1)[源代码]

内容滚动指定行数,小于0为向上滚动,大于0为向下滚动

set_globals(name, value)[源代码]

设置PYMUD全局变量

参数:
  • name – 全局变量名称

  • value – 全局变量值。值可以为任何类型。

set_status(msg)[源代码]

在状态栏中上显示消息。可在代码中调用

参数:

msg – 要显示的消息

show_dialog(dialog)[源代码]

显示一个给定的对话框

async show_dialog_as_float(dialog)[源代码]

显示弹出式窗口.

show_message(title, text, modal=True)[源代码]

显示一个消息对话框

toggle_mousesupport(event: KeyPressEvent)[源代码]

快捷键F2: 切换鼠标支持状态。用于远程连接时本地复制命令执行操作

class pymud.Session(app, name, host, port, encoding=None, after_connect=None, loop=None, **kwargs)[源代码]

会话管理主对象,每一个角色的所有处理实现均在该类中实现。

Session对象由PyMudApp对象进行创建和管理,不需要手动创建。

参数:
  • app – 对应的PyMudApp对象

  • name – 本会话的名称

  • host – 本会话连接的远程服务器地址

  • port – 本会话连接的远程服务器端口

  • encoding – 远程服务器的编码

  • after_connect – 当连接到远程服务器后执行的操作

  • loop – asyncio的消息循环队列

  • kwargs – 关键字参数清单,当前支持的关键字 scripts : 需加载的脚本清单

addAlias(ali: Alias)[源代码]

向会话中增加一个别名。

参数:

ali – 要增加的别名对象,应为 Alias 类型或其子类

addAliases(alis: dict)[源代码]

向会话中增加多个别名

参数:

alis – 多个别名的字典。字典 key 应为每个别名的 id。

示例:
class Configuration:
    def __init__(self, session):
        self.session = session
        self._aliases = dict()

        self._initAliases()

    def _initAliases(self):
        self._aliases['my_ali1'] = SimpleAlias(self.session, "n", "north", id = "my_ali1")
        self._aliases['my_ali2'] = SimpleAlias(self.session, "s", "south", id = "my_ali2")
        self.session.addAliases(self._aliases)
addCommand(cmd: Command)[源代码]

向会话中增加一个命令。

参数:

cmd – 要增加的命令对象,应为 Command 类型或其子类

addCommands(cmds: dict)[源代码]

向会话中增加多个命令。使用方法与 addAliases 类似。

参数:

cmds – 多个命令的字典。字典 key 应为每个命令的 id。

addGMCP(gmcp: GMCPTrigger)[源代码]

向会话中增加一个GMCP触发器。

参数:

gmcp – 要增加的GMCP触发器对象,应为 GMCPTrigger 类型或其子类

addGMCPs(gmcps: dict)[源代码]

向会话中增加多个GMCPTrigger。使用方法与 addAliases 类似。

参数:

gmcps – 多个GMCPTrigger的字典。字典 key 应为每个GMCPTrigger的 id。

addTimer(ti: Timer)[源代码]

向会话中增加一个定时器。

参数:

ti – 要增加的定时器对象,应为 Timer 类型或其子类

addTimers(tis: dict)[源代码]

向会话中增加多个定时器。使用方法与 addAliases 类似。

参数:

tis – 多个定时器的字典。字典 key 应为每个定时器的 id。

addTrigger(tri: Trigger)[源代码]

向会话中增加一个触发器。

参数:

tri – 要增加的触发器对象,应为 Trigger 类型或其子类

addTriggers(tris: dict)[源代码]

向会话中增加多个触发器。使用方法与 addAliases 类似。

参数:

tris – 多个触发器的字典。字典 key 应为每个触发器的 id。

property alis

本会话的别名辅助点访问器,可以通过alis+别名id快速访问别名

session.alis.myali.enabled = False
clean()[源代码]

清除会话有关任务项和事件标识,具体包括:

  • 复位所有可能包含异步操作的对象,包括定时器、触发器、别名、GMCP触发器、命令

  • 取消所有由本会话管理但仍未完成的任务

  • 清空会话管理的所有任务

clear_half()[源代码]

清除半数缓冲。 脚本中无需调用。

半数的数量由 Settings.client[‘buffer_lines’] 确定,默认为5000行。

property cmds

本会话的命令辅助点访问器,可以通过cmds+命令id快速访问命令

session.cmds.mycmd.enabled = False
async connect()[源代码]

创建到远程服务器的连接,异步非阻塞方式。

property connected: bool

只读属性,返回服务器端的连接状态

create_task(coro, *args, name: str = None) Task[源代码]

创建一个任务,并将其加入到会话的任务管理队列中。

加入会话管理的任务,在任务完成(结束或中止)后,会自动从管理队列中移除。

参数:
  • coro – 一个async定义的协程对象或者其他可等待对象

  • name – 任务的名称定义,可选项。该属性仅在3.10及以后的Python版本中支持

示例:
class Configuration:
    def __init__(self, session):
        self.session = session
        self.session.create_task(self.async_example())

    async def async_example(self):
        await asyncio.sleep(1)
        self.session.info("show a message after 1 second")
delAlias(ali)[源代码]

从会话中移除一个别名,可接受 Alias 对象或其 id

参数:

ali – 要删除的别名指代,可以为别名 id 或者别名自身

示例:
class Configuration:
    def __init__(self, session):
        self.session = session

        ali = Alias(session, "s", "south", id = "my_ali1")
        session.addAlias(ali)

        # 以下两行语句均可以删除该别名
        session.delAlias("my_ali1")
        session.delAlias(ali)
delAliases(ali_es: Iterable)[源代码]

从会话中移除一组别名,可接受 Alias 对象或其 id 的迭代器

参数:

ali_es – 要删除的一组别名指代,可以为别名 id 或者别名自身的列表

示例:
class Configuration:
    def __init__(self, session):
        self.session = session
        self._aliases = dict()

        self._aliases["my_ali1"] = Alias(session, "s", "south", id = "my_ali1")
        self._aliases["my_ali2"] = Alias(session, "n", "north", id = "my_ali2")

        session.addAliases(self._aliase)

        # 以下两行语句均可以删除两个别名
        session.delAliases(self._aliases)
        session.delAliases(self._aliases.keys())
delCommand(cmd)[源代码]

从会话中移除一个命令,可接受 Command 对象或其 id。使用方法与 delAlias 类似

参数:

cmd – 要删除的命令指代,可以为命令id或者命令自身

delCommands(cmd_s: Iterable)[源代码]

从会话中移除一组命令,可接受可接受 Command 对象或其 id 的迭代器。使用方法与 delAliases 类似

参数:

cmd_s – 要删除的命令指代,可以为命令 id 或者命令自身的列表

delGMCP(gmcp: GMCPTrigger)[源代码]

从会话中移除一个GMCP触发器,可接受 GMCPTrigger 对象或其的id。使用方法与 delAlias 类似

参数:

gmcp – 要删除的GMCP触发器指代,可以为GMCP触发器 id 或者GMCP触发器自身

delGMCPs(gmcp_s: Iterable)[源代码]

从会话中移除一组GMCP触发器,可接受可接受 GMCPTrigger 对象或其 id 的迭代器。使用方法与 delAliases 类似

参数:

gmcp_s – 要删除的GMCP触发器指代,可以为 id 或者GMCP触发器自身的列表

delGlobal(name)[源代码]

删除一个全局变量,使用方式与会话变量variable相同

参数:

name – 全局变量的名称

delTimer(ti)[源代码]

从会话中移除一个定时器,可接受 Timer 对象或其的id。使用方法与 delAlias 类似

参数:

ti – 要删除的定时器指代,可以为定时器 id 或者定时器自身

delTimers(ti_s: Iterable)[源代码]

从会话中移除一组定时器,可接受可接受 Timer 对象或其 id 的迭代器。使用方法与 delAliases 类似

参数:

ti_s – 要删除的定时器指代,可以为定时器 id 或者定时器自身的列表

delTrigger(tri)[源代码]

从会话中移除一个触发器,可接受 Trigger 对象或其的id。使用方法与 delAlias 类似

参数:

tri – 要删除的触发器指代,可以为触发器 id 或者触发器自身

delTriggers(tri_s: Iterable)[源代码]

从会话中移除一组触发器,可接受可接受 Trigger 对象或其 id 的迭代器。使用方法与 delAliases 类似

参数:

tri_s – 要删除的触发器指代,可以为触发器 id 或者触发器自身的列表

delVariable(name)[源代码]

删除一个变量。删除变量是从session管理的变量列表中移除关键字,而不是设置为 None

参数:

name – 变量名

disconnect()[源代码]

断开到服务器的连接。

property duration: float

只读属性,返回服务器端连接的时间,以秒为单位

enableGroup(group: str, enabled=True)[源代码]

使能或禁用Group中所有对象, 返回组内各对象个数。

参数:
  • group – 组名,即各对象的 group 属性的值

  • enabled – 使能/禁用开关。为True时表示使能, False为禁用

返回:

5个整数的列表,依次表示改组内操作的 别名,触发器,命令,定时器,GMCP 的个数

error(msg, title='PYMUD ERROR', style='\x1b[31m')[源代码]

使用默认的ERR_STYLE(红色)输出信息,并自动换行。信息格式类似 [title] msg

参数:
  • msg – 要输出的信息

  • title – 要显示在前面的标题,不指定时默认为 PYMUD ERROR

  • style – 要输出信息的格式(ANSI), 默认为 ERR_STYLE, 

property event_connected

可读写属性,自定义的会话连接事件,应为一个带一个额外参数 Session 的方法

示例:
class Configuration:
    def __init__(self, session):
        self.session = session
        self.session.event_connected = self.onSessionConnected

    def onSessionConnected(self, session):
        session.info("Connected!")
property event_disconnected

可读写属性,自定义的会话断开事件,应为一个带一个参数 Session 的方法

使用方法同 event_connected

exec(cmd: str, name=None, *args, **kwargs)[源代码]

在名称为name的会话中使用exec_command执行MUD命令。当不指定name时,在当前会话中执行。

  • exec 与 writeline 都会向服务器写入数据。其差异在于,exec执行的内容,会先经过Alias处理和Command处理,实际向远程发送内容与cmd可以不一致。

  • exec 在内部通过调用 exec_command 实现, exec 可以实现与 exec_command 完全相同的功能

  • exec 是后来增加的函数,因此保留 exec_command 的目的是为了脚本的向前兼容

参数:
  • cmd – 要执行的命令

  • name – 要执行命令的会话的名称,当不指定时,在当前会话执行。

  • args – 保留兼容与扩展性所需,脚本中调用时无需指定

  • kwargs – 保留兼容与扩展性所需,脚本中调用时无需指定

示例:
session.addAlias(SimpleAlias(self.session, "^cb\s(\S+)\s(\S+)", "#3 get %1 from jinnang;#wa 250;combine gem;#wa 250;pack gem", id = "ali_combine"))
session.exec("cb j1a")
async exec_async(cmd: str, name=None, *args, **kwargs)[源代码]

exec的异步形式。在名称为name的会话中使用exec_command_async执行MUD命令。当不指定name时,在当前会话中执行。

  • exec_async 在内部通过调用 exec_command_async 实现, exec_async 可以实现与 exec_command_async 完全相同的功能

  • exec_async 是后来增加的函数,因此保留 exec_command_async 的目的是为了脚本的向前兼容

  • 异步调用时,该函数要等待对应的代码执行完毕后才会返回。可以用于确保命令执行完毕。

exec_code(cl: CodeLine, *args, **kwargs)[源代码]

执行解析为CodeLine形式的MUD命令(必定为单个命令)。一般情况下,脚本中不应调用该方法,而应使用exec/exec_command。

这是命令执行的最核心执行函数,所有真实调用的起源(同步调用情况下)

参数:
  • cl – CodeLine形式的执行代码

  • args – 保留兼容与扩展性所需

  • kwargs – 保留兼容与扩展性所需

async exec_code_async(cl: CodeLine, *args, **kwargs)[源代码]

该方法为exec_code的异步形式实现。一般情况下,脚本中不应调用该方法,而应使用 exec_command_async。

这是命令执行的最核心执行函数,所有真实调用的起源(异步调用情况下)。

异步调用时,该函数要等待对应的代码执行完毕后才会返回。可以用于确保命令执行完毕。

参数:
  • cl – CodeLine形式的执行代码

  • args – 保留兼容与扩展性所需

  • kwargs – 保留兼容与扩展性所需

exec_command(line: str, *args, **kwargs) None[源代码]

在当前会话中执行MUD命令。多个命令可以用分隔符隔开。

  • 此函数中,多个命令是一次性发送到服务器的,并未进行等待确认上一条命令执行完毕。

  • 若要等待每一个命令执行完毕后再进行下一个命令,则应使用本函数的异步形式 exec_command_async

  • 本函数和writeline的区别在于,本函数会先进行Command和Alias解析,若不是再使用writeline发送

  • 当line不包含Command和Alias时,等同于writeline

  • 本函数使用方法与 exec 相同,差异在于不能指定会话名

  • exec 是后来增加的函数,因此保留 exec_command 的目的是为了脚本的向前兼容

参数:
  • line – 需指定的内容

  • args – 保留兼容性与扩展性需要

  • kwargs – 保留兼容性与扩展性需要

exec_command_after(wait: float, line: str)[源代码]

延时一段时间之后,执行命令exec_command

参数:
  • wait – float, 延时等待时间,单位为秒。

  • line – str, 延时等待结束后执行的内容

async exec_command_async(line: str, *args, **kwargs)[源代码]

exec_command 的异步形式。在当前会话中执行MUD命令。多个命令可以用分隔符隔开。

  • 异步时,多个命令是逐个发送到服务器的,每一命令都等待确认上一条命令执行完毕,且多命令之间会插入一定时间等待

  • 多个命令之间的间隔等待时间由 Settings.client[“interval”] 指定,单位为 ms

  • 本函数使用方法与 exec_async 相同,差异在于不能指定会话名

  • exec_async 是后来增加的函数,因此保留 exec_command_async 的目的是为了脚本的向前兼容

exec_text(cmdtext: str)[源代码]

执行文本形式的MUD命令。必定为单个命令,且确定不是#开头的,同时不进行参数替代

一般情况下,脚本中不应调用该方法,而应使用 exec/exec_command。

参数:

cmdtext – 纯文本命令

async exec_text_async(cmdtext: str)[源代码]

该方法为 exec_text 的异步形式实现。一般情况下,脚本中不应调用该方法,而应使用 exec_async/exec_command_async。

异步调用时,该函数要等待对应的代码执行完毕后才会返回。可以用于确保命令执行完毕。

feed_data(data) None[源代码]

由协议对象调用,将收到的远程数据加入会话缓冲。永远只会传递1个字节的数据,以bytes形式。 脚本中无需调用。

参数:

data – 传入的数据, bytes 格式

feed_eof() None[源代码]

由协议对象调用,处理收到远程 eof 数据,即远程断开连接。 脚本中无需调用。

feed_gmcp(name, value) None[源代码]

由协议对象调用,处理收到远程 GMCP 数据。 脚本中无需调用。

参数:
  • name – 收到的GMCP数据的 name

  • value – 收到的GMCP数据的 value。 该数据值类型为 字符串形式执行过eval后的结果

当未通过GMCPTrigger对某个name的GMCP数据进行处理时,会通过session.info将该GMCP数据打印出来以供调试。 当已有GMCPTrigger处理该name的GMCP数据时,则不会再打印此信息。

feed_msdp(name, value) None[源代码]

由协议对象调用,处理收到远程 MSDP 数据。 脚本中无需调用。

参数:
  • name – 收到的MSDP数据的 name

  • value – 收到的MSDP数据的 value

由于北大侠客行不支持MSDP,因此该函数体并未实现

feed_mssp(name, value) None[源代码]

由协议对象调用,处理收到远程 MSSP 数据。 脚本中无需调用。

参数:
  • name – 收到的MSSP数据的 name

  • value – 收到的MSSP数据的 value

由于北大侠客行不支持MSSP,因此该函数体并未实现

getGlobal(name, default=None)[源代码]

获取一个全局变量的值,使用方式与会话变量variable相同

参数:
  • name – 全局变量的名称

  • default – 当全局变量不存在时的返回值

返回:

全局变量的值,或者 default

getPlainText(rawText: str, trim_newline=False) str[源代码]

将带有VT100或者MXP转义字符的字符串转换为正常字符串(删除所有转义)。 脚本中无需调用。

参数:
  • rawText – 原始文本对象

  • trim_newline – 返回值是否删除末尾的回车符和换行符

返回:

经处理后的纯文本字符串

getUniqueID(prefix)[源代码]

根据唯一编号获取本session中的唯一名称, 格式为: prefix_uid

参数:

prefix – 为唯一数值增加的前缀

返回:

形式为 prefix_uid 的唯一标识

getUniqueNumber()[源代码]

获取本session中的唯一数值。该方法用来为各类对象生成随机不重复ID

返回:

返回为整数,返回结果在本会话中唯一。

getVariable(name, default=None)[源代码]

获取一个变量的值。可以使用vars快捷点访问器实现类似效果,但vars访问时,默认值总为None。

参数:
  • name – 变量名。变量名必须为一个字符串

  • default – 当会话中不存在该变量时,返回的值。默认为 None。

返回:

变量的值,或者 default

示例:
# 以下两种方式等价
myvar = session.getVariable("myvar1", None)
myvar = session.vars.myvar1
getVariables(names)[源代码]

同时获取一组变量的值。

参数:

names – 所有变量名的元组或列表

返回:

返回所有变量值的元组。可在获取值时直接解包。

示例:
qi, jing, neili, jingli = session.getVariables(["qi", "jing", "neili", "jingli"])
get_status()[源代码]

返回状态窗口内容的真实函数。 脚本中无需调用。

property globals

全局变量的辅助点访问器,可以通过globals+变量名快速访问该变量值

全局变量与会话变量的区别在于,全局变量在所有会话之间是共享和统一的

# 以下两个获取全局变量值的方法等价
hooked = session.globals.hooked
hooked = session.getGlobal('hooked')

# 以下两个为全局变量赋值的方法等价
session.globals.hooked = True
session.setGlobal('hooked', True)
property gmcp

本会话的GMCP辅助访问器

go_ahead() None[源代码]

对当前接收缓冲内容进行处理并放到显示缓冲中。 脚本中无需调用。

触发器的响应在该函数中进行处理。

handle_alias(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #alias / #ali 的执行函数,操作别名。该命令可以不带参数、带一个参数或者两个参数。 该函数不应该在代码中直接调用。

使用:
  • #ali: 显示本会话所有别名

  • #ali {ali_id}: 显示本会话中id为{ali_id}的别名信息

  • #ali {ali_id} {on/off/del}: 使能/禁用/删除本会话中id为{ali_id}的别名

  • #ali {pattern} {code}: 创建一个新别名,匹配为{pattern},匹配时执行{code}

  • 别名的code中,可以使用%line代表行,%1~%9代表捕获信息

参数:
ali_id:

别名Alias的id

on:

使能

off:

禁用

del:

删除

pattern:

新别名的匹配模式,应为合法的Python 正则表达式

code:

别名匹配成功后执行的内容

示例:
  • #ali : 无参数, 打印列出当前会话中所有的别名清单

  • #ali my_ali : 一个参数, 列出id为my_ali的Alias对象的详细信息

  • #ali my_ali on : 两个参数,启用id为my_ali的Alias对象(enabled = True)

  • #ali my_ali off : 两个参数, 禁用id为my_ali的Alias对象(enabled = False)

  • #ali my_ali del : 两个参数,删除id为my_ali的Alias对象

  • #ali {^gp\s(.+)$} {get %1 from corpse} : 两个参数,新增创建一个Alias对象。使用时, gp gold = get gold from corpse

相关命令:
  • #trigger

  • #timer

  • #command

handle_all(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #all 的执行函数,向所有会话发送统一命令。 该函数不应该在代码中直接调用。

使用:
  • #all {code}: 向所有会话发送code命令

参数:
code:

重复执行的代码

示例:
  • #all #cls : 所有会话统一执行#cls命令

  • #all quit : 所有会话的角色统一执行quit退出

相关命令:
  • #num

  • #session

handle_clear(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #clear / #cls 的执行函数,清空当前会话缓冲与显示。 该函数不应该在代码中直接调用。

使用:
  • #cls: 清空当前会话缓冲及显示

handle_close(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #close 的执行函数,关闭当前会话,并将当前会话从 PyMudApp 的会话列表中移除。 该函数不应该在代码中直接调用。

注:当前会话处于连接状态时,#close关闭会话会弹出对话框确认是否关闭

相关命令:
  • #exit

  • #session

handle_command(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #command / #cmd 的执行函数,操作命令。该命令可以不带参数、带一个参数或者两个参数。 该函数不应该在代码中直接调用。

使用:
  • #cmd: 显示本会话所有命令(Command及其子类)

  • #cmd {cmd_id}: 显示本会话中id为{cmd_id}的命令信息

  • #cmd {cmd_id} {on/off/del}: 使能/禁用/删除本会话中id为{cmd_id}的命令

  • 由于命令的特殊性,其只能使用脚本代码创建

参数:
cmd_id:

命令Command的id

on:

使能

off:

禁用

del:

删除

示例:
  • #cmd : 无参数, 打印列出当前会话中所有的命令清单

  • #cmd my_cmd : 一个参数, 列出id为my_cmd的Command对象的详细信息

  • #cmd my_cmd on : 两个参数,启用id为my_cmd的Command对象(enabled = True)

  • #cmd my_cmd off : 两个参数, 禁用id为my_cmd的Command对象(enabled = False)

  • #cmd my_cmd del : 两个参数,删除id为my_cmd的Command对象

相关命令:
  • #alias

  • #trigger

  • #timer

handle_connect(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #connect / #con 的执行函数,连接到远程服务器(仅当远程服务器未连接时有效)。 该函数不应该在代码中直接调用。

相关命令:
  • #close

  • #exit

handle_error(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #error 的执行函数,使用 session.error 输出一行,主要用于测试。 该函数不应该在代码中直接调用。

使用:
  • #error {msg}

相关命令:
  • #info

  • #warning

handle_exit(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #exit 的执行函数,退出 PyMudApp 应用。 该函数不应该在代码中直接调用。

注:当应用中存在还处于连接状态的会话时,#exit退出应用会逐个弹出对话框确认这些会话是否关闭

相关命令:
  • #close

  • #session

handle_gag(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #gag 的执行函数,在主窗口中不显示当前行内容,一般用于触发器中。 该函数不应该在代码中直接调用。

使用:
  • #gag

注意:
  • 一旦当前行被gag之后,无论如何都不会再显示此行内容,但对应的触发器仍会生效

相关命令:
  • #replace

handle_global(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #global 的执行函数,操作全局变量(跨会话共享)。 该命令可以不带参数、带一个参数、两个参数。 该函数不应该在代码中直接调用。

使用:
  • #global: 列出所有全局变量

  • #global {name}: 列出中名称为{name}的全局变量的值

  • #global {name} {value}: 将名称为{name}的全局变量设置值为{value},若不存在则创建

参数:
name:

变量名称

value:

变量值。注意: 该值赋值后为str类型!

相关命令:
  • #variable

handle_gmcp(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #gmcp 的执行函数,操作GMCPTrigger。该命令可以不带参数、带一个参数或者两个参数。 该函数不应该在代码中直接调用。

使用:
  • #gmcp: 显示本会话所有GMCPTrigger

  • #gmcp {gmcp_key}: 显示本会话中name为{gmcp_key}的GMCPTrigger信息

  • #gmcp {gmcp_key} {on/off/del}: 使能/禁用/删除本会话中name为{gmcp_key}的GMCPTrigger

  • 由于GMCPTrigger的特殊性,其只能使用脚本代码创建

参数:
gmcp_key:

GMCPTrigger的关键字name

on:

使能

off:

禁用

del:

删除

示例:
  • #gmcp : 无参数, 打印列出当前会话中所有的命令清单

  • #gmcp GMCP.Move : 一个参数, 列出名称为 GMCP.Move 的 GMCPTrigger 对象的详细信息

  • #gmcp GMCP.Move on : 两个参数,启用名称为 GMCP.Move 的 GMCPTrigger 对象(enabled = True)

  • #gmcp GMCP.Move off : 两个参数, 禁用名称为 GMCP.Move 的 GMCPTrigger 对象(enabled = False)

  • #gmcp GMCP.Move del : 两个参数,删除名称为 GMCP.Move 的 GMCPTrigger 对象

相关命令:
  • #alias

  • #trigger

  • #timer

handle_help(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #help 的执行函数,在当前会话中现实帮助信息。 当不带参数时, #help会列出所有可用的帮助主题。 带参数显示该系统命令的帮助。参数中不需要#号。 该函数不应该在代码中直接调用。

使用:
  • #help {topic}

  • 当不指定 topic: 列出所有可用的帮助主题。

  • 当指定 topic: 列出指定topic的帮助内容。该帮助类容由调用的函数的docstring确定。

参数:
topic:

主题,支持所有的系统命令。在键入主题时,请忽略命令中的#号

示例:
  • #help

    在当前会话中显示所有帮助主题。其中,绿色显示的命令为其他命令的别名。 注意,在没有当前会话时,命令不生效。

  • #help help

    显示 #help 有关的帮助(即本帮助)

  • #help session

    显示 #session 命令有关的帮助

handle_ignore(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #ignore / #ig, #t+ / #t- 的执行函数,处理使能/禁用状态。 该函数不应该在代码中直接调用。

使用:
  • #ig: 切换触发器全局使能/禁用状态

  • #t+ {group}: 使能{group}组内的所有对象,包括别名、触发器、命令、定时器、GMCPTrigger等

  • #t- {group}: 禁用{group}组内的所有对象,包括别名、触发器、命令、定时器、GMCPTrigger等

参数:
group:

组名

示例:
  • #ig: 切换全局触发器的使能/禁用状态。为禁用时,状态栏右下角会显示“全局已禁用”

  • #t+ mygroup: 使能名称为 mygroup 的组内的所有对象,包括别名、触发器、命令、定时器、GMCPTrigger等

  • #t- mygroup: 禁用名称为 mygroup 的组内的所有对象,包括别名、触发器、命令、定时器、GMCPTrigger等

相关命令:
  • #trigger

  • #alias

  • #timer

handle_info(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #info 的执行函数,使用 session.info 输出一行,主要用于测试。 该函数不应该在代码中直接调用。

使用:
  • #info {msg}

相关命令:
  • #warning

  • #error

handle_load(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #load 的执行函数,为当前会话执行模块加载操作。当要加载多个模块时,使用空格或英文逗号隔开。 该函数不应该在代码中直接调用。

使用:
  • #load {mod1}: 加载指定名称的模块

  • #load {mod1} {mod2} … {modn}: 加载指定名称的多个模块

  • #load {mod1},{mod2},…{modn}: 加载指定名称的多个模块

  • 注: 多个模块加载时,将依次逐个加载。因此若模块之间有依赖关系请注意先后顺序

参数:
modx:

模块名称

示例:
  • #load myscript : 加载myscript模块,首先会从执行PyMUD应用的当前目录下查找myscript.py文件并进行加载

  • #load pymud.pkuxkx : 加载pymud.pkuxkx模块。相当于脚本中的 import pymud.pkuxkx 命令

  • #load myscript1 myscript2 : 依次加载myscript1和myscript2模块

  • #load myscript1,myscript2 : 多个脚本之间也可以用逗号分隔

相关命令:
  • #unload

  • #reload

  • #module

handle_message(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #message / #mess 的执行函数,弹出对话框显示给定信息。 该函数不应该在代码中直接调用。

使用:
  • #mess {msg}: 以弹出对话框显示{msg}指定的信息

参数:
msg:

需弹出的显示信息

示例:
  • #mess 这是一行测试 : 使用弹出窗口显示“这是一行测试”

  • #mess %line : 使用弹出窗口显示系统变量%line的值

handle_modules(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #modules / #mods 的执行函数,显示加载模块清单。该命令不带参数。 该函数不应该在代码中直接调用。

使用:
  • #mods: 显示当前会话所加载的所有模块清单

相关命令:
  • #load

  • #unload

  • #reload

async handle_num(times, code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #{num} 的执行函数,重复执行多次命令。 该函数不应该在代码中直接调用。

使用:
  • #{num} {code}: 执行code代码num次

  • {num}必须大于等于1

  • 该命令可以嵌套使用

参数:
num:

重复执行的次数

code:

重复执行的代码

示例:
  • #3 get m1b from nang : 从锦囊中取出3次地*木灵

  • #3 {#3 get m1b from nang;#wa 500;combine gem;#wa 4000};xixi : 执行三次合并地*木灵宝石的操作,中间留够延时等待时间,全部结束后发出xixi。

相关命令:
  • #all

  • #session

handle_plugins(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #plugins 的执行函数,显示插件信息。该命令可以不带参数、带一个参数。 该函数不应该在代码中直接调用。

使用:
  • #plugins: 显示当前会话所加载的所有插件清单

  • #plugins {myplug}: 显示名称为myplug的插件的详细信息

相关命令:
  • #modules

handle_py(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #py 的执行函数,执行 Python 语句。 该函数不应该在代码中直接调用。

使用:
  • #py {py_code}: 在当前上下文中执行py_code

  • 环境为当前上下文环境,此时self代表当前会话

示例:
  • #py self.info("hello") : 相当于在当前会话中调用 session.info("hello")

  • #py self.enableGroup("group1", False) : 相当于调用 session.enableGroup("group1", False)

handle_reload(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #reload 的执行函数,重新加载模块/插件。 该函数不应该在代码中直接调用。

使用:
  • #reload: 重新加载所有已加载模块

  • #reload {modname}: 重新加载名称为modname的模块

  • #reload {plugins}: 重新加载名称为plugins的插件

  • #reload {mod1} {mod2} … {modn}: 重新加载指定名称的多个模块/插件

  • #reload {mod1},{mod2},…{modn}: 重新加载指定名称的多个模块/插件

参数:
modname:

模块名称

plugins:

插件名称

modn:

模块名称

注意:
  1. #reload只能重新加载#load方式加载的模块(包括在pymud.cfg中指定的),但不能重新加载import xxx导入的模块。

  2. 若加载的模块脚本中有语法错误,#reload可能无法生效。此时需要退出PyMUD重新打开

  3. 若加载时依次加载了不同模块,且模块之间存在依赖关系,那么重新加载时,应按原依赖关系顺序逐个重新加载,否则容易找不到依赖或依赖出错

示例:
  • #reload : 重新加载所有已加载模块

  • #reload mymodule : 重新加载名为mymodule的模块

  • #reload myplugins : 重新加载名为myplugins的插件

  • #reload mymodule myplugins : 重新加载名为mymodule的模块和名为myplugins的插件。

相关命令:
  • #load

  • #unload

  • #module

handle_repeat(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #repeat / #rep 的执行函数,重复向session输出上一次人工输入的命令。 该函数不应该在代码中直接调用。

使用:
  • #repeat

注:

这条命令并没有啥实质性应用场景

handle_replace(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #replace 的执行函数,修改显示内容,将当前行原本显示内容替换为msg显示。不需要增加换行符。 该函数不应该在代码中直接调用。

使用:
  • #replace {new_display}: 将当前行显示替换为{new_display}

参数:
  • new_display:

    替换后的显示,可支持ANSI颜色代码

示例:
  • #replace %raw - 捕获到此行 : 将捕获的当前行信息后面增加标注

注意:
  • 应在触发器的同步处理中使用。多行触发器时,替代只替代最后一行。

相关命令:
  • #gag

handle_reset(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #reset 的执行函数,复位全部脚本。该命令不带参数。 复位操作将复位所有的触发器、命令、未完成的任务,并清空所有触发器、命令、别名、变量。 该函数不应该在代码中直接调用。

使用:
  • #reset: 复位全部脚本

相关命令:
  • #load

  • #unload

  • #reload

handle_save(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #save 的执行函数,保存当前会话变量(系统变量除外)至文件。该命令不带参数。 该函数不应该在代码中直接调用。

使用:
  • #save: 保存当前会话变量

注意:
  1. 文件保存在当前目录下,文件名为 {会话名}.mud

  2. 变量保存使用了python的pickle模块,因此所有变量都应是类型自省的

  3. 虽然变量支持所有的Python类型,但是仍然建议仅在变量中使用可以序列化的类型。

  4. namedtuple不建议使用,因为加载后在类型匹配比较时会失败,不认为两个相同定义的namedtuple是同一种类型。

相关命令:
  • #variable

handle_task(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #task 的执行函数,显示当前管理的所有任务清单(仅用于调试)。 该函数不应该在代码中直接调用。

注意:

当管理任务很多时,该指令会影响系统响应。

handle_test(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #test 的执行函数,触发器测试命令。类似于zmud的#show命令。 该函数不应该在代码中直接调用。

使用:
  • #test {some_text}: 测试服务器收到{some_text}时的触发器响应情况

示例:
  • #test 你深深吸了口气,站了起来。 : 模拟服务器收到“你深深吸了口气,站了起来。”时的情况进行触发测试

  • #test %copy: 复制一句话,模拟服务器再次收到复制的这句内容时的情况进行触发器测试

注意:
  • #test命令测试触发器时,enabled为False的触发器不会响应。

handle_timer(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #timer / #ti 的执行函数,操作定时器。该命令可以不带参数、带一个参数或者两个参数。 该函数不应该在代码中直接调用。

使用:
  • #ti: 显示本会话所有定时器

  • #ti {ti_id}: 显示本会话中id为{ti_id}的定时器信息

  • #ti {ti_id} {on/off/del}: 使能/禁用/删除本会话中id为{ti_id}的定时器

  • #ti {second} {code}: 创建一个新定时器,定时间隔为{second}秒,定时器到时间执行{code}

  • PyMUD支持同时任意多个定时器。

参数:
ti_id:

定时器Timer的id

on:

使能

off:

禁用

del:

删除

second:

新定时器的定时时间,单位为秒

code:

定时器到时间后执行的内容

示例:
  • #ti: 无参数, 打印列出当前会话中所有的定时器清单

  • #ti my_timer: 一个参数, 列出id为my_timer的Timer对象的详细信息

  • #ti my_timer on: 两个参数,启用id为my_timer的Timer对象(enabled = True)

  • #ti my_timer off: 两个参数, 禁用id为my_timer的Timer对象(enabled = False)

  • #ti my_timer del: 两个参数,删除id为my_timer的Timer对象

  • #ti 100 {drink jiudai;#wa 200;eat liang}: 两个参数,新增创建一个Timer对象。每隔100s,自动执行一次喝酒袋吃干粮。

相关命令:
  • #alias

  • #trigger

  • #command

handle_trigger(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #trigger / #tri / #action 的执行函数,操作触发器。该命令可以不带参数、带一个参数或者两个参数。 该函数不应该在代码中直接调用。

使用:
  • #tri: 显示本会话所有触发器

  • #tri {tri_id}: 显示本会话中id为{tri_id}的触发器信息

  • #tri {tri_id} {on/off/del}: 使能/禁用/删除本会话中id为{tri_id}的触发器

  • #tri {pattern} {code}: 创建一个新触发器,匹配为{pattern},匹配时执行{code}

  • 触发器的code中,可以使用%line代表行,%1~%9代表捕获信息

参数:
tri_id:

触发器Trigger的id

on:

使能

off:

禁用

del:

删除

pattern:

触发器的匹配模式,应为合法的Python正则表达式

code:

触发成功时执行的内容

示例:
  • #tri: 无参数, 打印列出当前会话中所有的触发器清单

  • #tri my_tri: 一个参数, 列出id为my_tri的Trigger对象的详细信息

  • #tri my_tri on: 两个参数,启用id为my_tri的Trigger对象(enabled = True)

  • #tri my_tri off: 两个参数, 禁用id为my_tri的Trigger对象(enabled = False)

  • #tri my_tri del: 两个参数,删除id为my_tri的Trigger对象

  • #tri {^[> ]*段誉脚下一个不稳.+} {get duan}: 两个参数,新增创建一个Trigger对象。当段誉被打倒的时刻把他背起来。

相关命令:
  • #alias

  • #timer

  • #command

handle_unload(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #unload 的执行函数,卸载模块。 该函数不应该在代码中直接调用。

使用:
  • #unload {modname}: 卸载指定名称的已加载模块

  • #unload {mod1} {mod2} … {modn}: 卸载指定名称的多个模块/插件

  • #unload {mod1},{mod2},…{modn}: 卸载加载指定名称的多个模块/插件

  • 注意: 卸载模块时并不会自动清理模块所创建的对象,而是调用模块Configuration类的unload方法, 若需要清理模块创建的对象,请将清理工作代码显式放在此方法中 。

参数:
modname:

模块名称

modn:

模块名称

示例:
  • #unload mymodule: 卸载名为mymodule的模块(并调用其中Configuration类的unload方法【若有】)

相关命令:
  • #load

  • #reload

  • #module

handle_variable(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #variable / #var 的执行函数,操作会话变量。 该命令可以不带参数、带一个参数、两个参数。 该函数不应该在代码中直接调用。

使用:
  • #var: 列出本会话所有变量

  • #var {name}: 列出本会话中名称为{name}的变量的值

  • #var {name} {value}: 将本会话中名称为{name}的变量设置值为{value},若不存在则创建

参数:
name:

变量名称

value:

变量值。注意: 该值赋值后为str类型!

相关命令:
  • #global

async handle_wait(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #wait / #wa 的执行函数,异步延时等待指定时间,用于多个命令间的延时等待。 该函数不应该在代码中直接调用。

使用:
  • #wa {ms}

参数:
  • ms: 等待时间(毫秒)

示例:
  • eat liang;#wa 300;drink jiudai

    吃干粮,延时300毫秒后,执行喝酒袋

相关命令:
  • #gag

  • #replace

handle_warning(code: CodeLine = None, *args, **kwargs)[源代码]

嵌入命令 #warning 的执行函数,使用 session.warning 输出一行,主要用于测试。 该函数不应该在代码中直接调用。

使用:
  • #warning {msg}

相关命令:
  • #info

  • #error

info(msg, title='PYMUD INFO', style='\x1b[32m')[源代码]

使用默认的INFO_STYLE(绿色)输出信息,并自动换行。信息格式类似 [title] msg

参数:
  • msg – 要输出的信息

  • title – 要显示在前面的标题,不指定时默认为 PYMUD INFO

  • style – 要输出信息的格式(ANSI), 默认为 INFO_STYLE, 

initialize()[源代码]

初始化Session有关对象。 无需脚本调用。

load_module(module_names)[源代码]

模块加载函数。

参数:

module_names – 要加载的模块清单。为元组/列表时,加载指定名称的系列模块,当名称为字符串时,加载单个模块。

示例:
  • session.load_module(‘mymodule’): 加载名为mymodule.py文件对应的模块

  • session.load_modules([‘mymod1’, ‘mymod2’]): 依次加载mymod1.py与mymod2.py文件对应的模块

property modules: OrderedDict

只读属性,返回本会话加载的所有模块,类型为顺序字典 OrderedDict

在字典中,关键字为模块名,值为模块本身与配置对象的二级字典,包含两个关键字, module 与 config

如,存在一个名为 my.py的模块文件,则加载后,session.modules[‘my’] 可以访问该模块有关信息。其中:

  • session.modules[‘my’][‘module’] 访问模块对象

  • session.modules[‘my’][‘config’] 访问该该模块文件中的Configuration类的实例(若有定义)

onConnected()[源代码]

当连接到服务器之后执行的操作。包括打印连接时间,执行自定义事件(若设置)等。

onDisconnected(protocol)[源代码]

当从服务器连接断开时执行的操作。包括保存变量(若设置)、打印断开时间、执行自定义事件(若设置)等。

open()[源代码]

创建到远程服务器的连接,同步方式。通过调用异步connect方法实现。

property plugins: DotDict

只读属性,为PYMUD插件的辅助点访问器

如,存在一个名为myplugin.py的插件文件并已正常加载,该文件中定义了 PLUGIN_NAME 为 “myplugin”,则可以通过本属性及插件名访问该插件

plugin = session.plugins.myplugin  # plugin为 Plugin类型的对象实例
async reconnect(timeout=15)[源代码]

重新连接到远程服务器,异步非阻塞方式。该方法在 Settings.client[‘auto_reconnect’] 设置为真时,断开后自动调用

参数:

timeout – 重连之前的等待时间,默认15s,可由 Settings.client[‘reconnect_wait’] 设置所覆盖

reload_module(module_names=None)[源代码]

模块重新加载函数。

一般使用 #reload 命令来重新加载模块,而不是在脚本中使用 reload_module 函数来重新加载模块

参数:

module_names – 要重新加载的模块清单。为元组/列表时,卸载指定名称的系列模块,当名称为字符串时,卸载单个模块。当不指定时,重新加载所有已加载模块。

remove_task(task: Task, msg=None)[源代码]

清除一个受本会话管理的任务。若任务未完成,则取消该任务。

由于加入会话管理的任务,在任务完成后会自动从管理队列中移除,因此该方法主要用来取消未完成的任务。

参数:
  • task – 由本会话管理的一个 asyncio.Task 对象

  • msg – 本意是用来反馈 task.cancel() 时的消息,但为了保持兼容低版本Python环境,该参数并未使用。

replace(newstr)[源代码]

将当前行内容显示替换为newstr。该方法仅在用于触发器的同步处置中才能正确相应

参数:

newstr – 替换后的内容

reset()[源代码]

复位:清除所有异步项和等待对象,卸载所有模块,清除所有会话有关对象。

setGlobal(name, value)[源代码]

设置一个全局变量的值,使用方式与会话变量variable相同

参数:
  • name – 全局变量的名称

  • value – 全局变量的值

setVariable(name, value)[源代码]

设置一个变量的值。可以使用vars快捷点访问器实现同样效果。

参数:
  • name – 变量名。变量名必须为一个字符串

  • value – 变量的值。变量值可以为任意 Python 类型。但为了要保存变量数据到硬盘,建议使用可序列化类型。

示例:
# 以下两种方式等价
session.setVariable("myvar1", "the value")
session.vars.myvar1 = "the value"
setVariables(names, values)[源代码]

同时设置一组变量的值。要注意,变量名称和值的数量要相同。当不相同时,抛出异常。

参数:
  • names – 所有变量名的元组或列表

  • values – 所有变量对应值的元祖或列表

示例:
hp_key   = ("qi", "jing", "neili", "jingli")
hp_value = [1000, 800, 1100, 1050]

session.setVariables(hp_key, hp_value)
set_exception(exc: Exception)[源代码]

由协议对象调用,处理异常。 脚本中无需调用。

参数:

exc – 异常对象

property status_maker

可读写属性,会话状态窗口的内容生成器,应为一个可返回 AnyFormattedText 对象的不带额外参数的方法

示例:
class Configuration:
    def __init__(self, session):
        self.session = session
        self.session.status_maker = self.mystatus

    def mystatus(self):
        '可返回AnyFormattedText类型的对象。具体参见 prompt_toolkit 。'
        return "this is a test status"
property timers

本会话的定时器辅助点访问器,可以通过timers+定时器id快速访问定时器

session.timers.mytimer.enabled = False
property tris

本会话的触发器的辅助点访问器,可以通过tris+触发器id快速访问触发器

session.tris.mytri.enabled = False
unload_module(module_names)[源代码]

模块卸载函数。卸载模块时,将自动调用模块中名称为Configuration类对象的unload方法。

一般使用 #unload 命令来卸载模块,而不是在脚本中使用 unload_module 函数来卸载模块

参数:

module_names – 要卸载的模块清单。为元组/列表时,卸载指定名称的系列模块,当名称为字符串时,卸载单个模块。

updateVariables(kvdict: dict)[源代码]

使用字典更新一组变量的值。若变量不存在将自动添加。

参数:

kvdict – 变量/值的字典

示例:
newvars = {"qi": 1000, "jing": 800, "neili": 1100, "jingli": 1050}
session.updateVariables(newvars)
property vars

本会话内变量的辅助点访问器,可以通过vars+变量名快速访问该变量值

# 以下两个获取变量值的方法等价
exp = session.vars.exp
exp = session.getVariable('exp')

# 以下两个为变量赋值的方法等价
session.vars.exp = 10000
session.setVariable('exp', 10000)
warning(msg, title='PYMUD WARNING', style='\x1b[33m')[源代码]

使用默认的WARN_STYLE(黄色)输出信息,并自动换行。信息格式类似 [title] msg

参数:
  • msg – 要输出的信息

  • title – 要显示在前面的标题,不指定时默认为 PYMUD WARNING

  • style – 要输出信息的格式(ANSI), 默认为 WARN_STYLE, 

write(data) None[源代码]

向服务器写入数据(RAW格式字节数组/字节串)。 一般不应在脚本中直接调用。

参数:

data – 向传输中写入的数据, 应为 bytes, bytearray, memoryview 类型

write_eof() None[源代码]

向服务器发送 eof 信息,即与服务器断开连接。 脚本中无需调用。

若要在脚本中控制断开与服务器的连接,请使用 session.disconnect()

writeline(line: str) None[源代码]

向服务器中写入一行,用于向服务器写入不经别名或命令解析时的数据。将自动在行尾添加换行符。

  • 如果line中包含分隔符(由Settings.client.seperator指定,默认为半角分号;)的多个命令,将逐行依次写入。

  • 当 Settings.cleint[“echo_input”] 为真时,向服务器写入的内容同时在本地缓冲中回显。

参数:

line – 字符串行内容

示例:
session.writeline("open door")
writetobuffer(data, newline=False)[源代码]

将数据写入到用于本地显示的缓冲中。 脚本中无需调用。

参数:
  • data – 写入的数据, 应为 str 类型

  • newline – 是否额外增加换行符

class pymud.CodeBlock(code)[源代码]

PyMUD中可以执行的代码块,可以进行命令、别名检测,以及完成变量替代。

但一般情况下,不需要手动创建 CodeBlock 对象,而是在 SimpleTrigger, SimpleAlias 等类型中直接使用字符串进行创建。或者在命令行输入文本将自动创建。

参数:

code – 代码块的代码本身。可以单行、多行、以及多层代码块

async async_execute(session, *args, **kwargs)[源代码]

以异步方式执行该 CodeBlock。参数与 execute 相同。

classmethod create_block(code: str) tuple[源代码]

创建代码块,并返回对象自身

execute(session, *args, **kwargs)[源代码]

执行该 CodeBlock。执行前判断 syncmode。 - 仅当 syncmode 为 sync 时,才使用同步方式执行。 - 当 syncmode 为其他值时,均使用异步方式执行 - 当 syncmode 为 conflict 时,同步命令失效,并打印警告

参数:
  • session – 命令执行的会话实例

  • args – 兼容与扩展所需,用于变量替代及其他用途

  • kwargs – 兼容与扩展所需,用于变量替代及其他用途

property syncmode

只读属性: 同步模式。在创建代码块时,根据代码内容自动判定模式。

该属性有四个可能值
  • dontcare: 同步异步均可,既不存在强制同步命令,也不存在强制异步命令

  • sync: 强制同步,仅存在强制同步模式命令及其他非同步异步命令

  • async: 强制异步,仅存在强制异步模式命令及其他非同步异步命令

  • conflict: 模式冲突,同时存在强制同步和强制异步命令

强制同步模式命令包括:
  • #gag

  • #replace

强制异步模式命令包括:
  • #wait

class pymud.objects.BaseObject(session, *args, **kwargs)[源代码]

MUD会话支持的对象基类。

参数:
  • session – 所属会话对象

  • args – 兼容与扩展所需

  • kwargs – 兼容与扩展所需

kwargs支持的关键字:
id:

唯一ID。不指定时,默认使用 __abbr__ + UniqueID 来生成

group:

所属的组名。不指定时,默认使用空字符串

enabled:

使能状态。不指定时,默认使用 True

priority:

优先级,越小优先级越高。不指定时,默认使用 100

timeout:

超时时间,单位为秒。不指定时,默认使用 10

sync:

同步模式。不指定时,默认为 True

oneShot:

仅执行一次标识。不指定时,默认为 False

onSuccess:

成功时的同步回调函数。不指定时,默认使用 self.onSuccess

onFailure:

失败时的同步回调函数。不指定时,默认使用 self.onFailure

onTimeout:

超时时的同步回调函数。不指定时,默认使用 self.onTimeout

class State(result, id, line, wildcards)
id

Alias for field number 1

line

Alias for field number 2

result

Alias for field number 0

wildcards

Alias for field number 3

debug(msg)[源代码]

在logging中记录debug信息

property enabled

可读写属性,使能或取消使能本对象

error(msg, *args)[源代码]

若session存在,session中输出error;同时在logging中输出error

info(msg, *args)[源代码]

若session存在,session中输出info;不存在则在logging中输出info

onFailure(*args, **kwargs)[源代码]

失败后执行的默认回调函数

onSuccess(*args, **kwargs)[源代码]

成功后执行的默认回调函数

onTimeout(*args, **kwargs)[源代码]

超时后执行的默认回调函数

warning(msg, *args)[源代码]

若session存在,session中输出warning;不存在则在logging中输出warning

class pymud.objects.MatchObject(session, patterns, *args, **kwargs)[源代码]

支持匹配内容的对象,包括Alias, Trigger, Command 等对象以及其子类对象。继承自 BaseObject

参数:
  • session – 同 BaseObject , 本对象所属的会话

  • patterns – 用于匹配的模式。详见 patterns 属性

  • args – 兼容与扩展所需

  • kwargs – 兼容与扩展所需

MatchObject 新增了部分 kwargs 关键字,包括:
ignoreCase:

忽略大小写,默认为 False

isRegExp:

是否是正则表达式,默认为 True

keepEval:

是否持续匹配,默认为 False

raw:

是否匹配含有VT100 ANSI标记的原始数据,默认为 False

match(line: str, docallback=True) State[源代码]

匹配函数。由 Session 调用。

参数:
  • line – 匹配的数据行

  • docallback – 匹配成功后是否执行回调函数,默认为 True

返回:

BaseObject.State 类型,一个包含 result, id, name, line, wildcards 的命名元组对象

async matched() State[源代码]

匹配函数的异步模式,等待匹配成功之后才返回。返回值 BaseObject.state

异步匹配模式用于 Trigger 的异步模式以及 Command 的匹配中。

property patterns

可读写属性, 本对象的匹配模式。该属性可以在运行时动态更改,改后即时生效。

  • 构造函数中的 patterns 用于指定初始的匹配模式。

  • 该属性支持字符串和其他可迭代对象(如元组、列表)两种形式。
    • 当为字符串时,使用单行匹配模式

    • 当为可迭代对象时,使用多行匹配模式。多行的行数由可迭代对象所确定。

reset()[源代码]

复位事件,用于async执行未等待结果时,对事件的复位

set()[源代码]

设置事件标记,用于人工强制触发

class pymud.Alias(session, patterns, *args, **kwargs)[源代码]

别名 Alias 类型,继承自 MatchObject。

其内涵与 MatchObject 完全相同,仅对缩写进行了覆盖。

class pymud.SimpleAlias(session, patterns, code, *args, **kwargs)[源代码]

简单别名 SimpleAlias 类型,继承自 Alias, 包含了 Alias 的全部功能, 并使用 CodeBlock 对象创建了 onSuccess 的使用场景。

参数:
  • session – 本对象所属的会话, 同 MatchObject

  • patterns – 匹配模式,同 MatchObject

  • code – str, 当匹配成功时执行的代码, 使用 CodeBlock 进行实现

onSuccess(id, line, wildcards)[源代码]

覆盖了基类的默认 onSuccess方法,使用 CodeBlock 执行构造函数中传入的 code 参数

class pymud.Trigger(session, patterns, *args, **kwargs)[源代码]

触发器 Trigger 类型,继承自 MatchObject。

其内涵与 MatchObject 完全相同,仅对缩写进行了覆盖,并增写了 triggered 异步方法。

async triggered()[源代码]

异步触发的可等待函数。内部通过 MatchObject.matched 实现

差异在于对创建的 matched 任务进行了管理。

class pymud.SimpleTrigger(session, patterns, code, *args, **kwargs)[源代码]

简单别名 SimpleTrigger 类型,继承自 Trigger, 包含了 Trigger 的全部功能, 并使用 CodeBlock 对象创建了 onSuccess 的使用场景。

参数:
  • session – 本对象所属的会话, 同 MatchObject

  • patterns – 匹配模式,同 MatchObject

  • code – str, 当匹配成功时执行的代码, 使用 CodeBlock 进行实现

onSuccess(id, line, wildcards)[源代码]

覆盖了基类的默认 onSuccess方法,使用 CodeBlock 执行构造函数中传入的 code 参数

class pymud.GMCPTrigger(session, name, *args, **kwargs)[源代码]

GMCP触发器 GMCPTrigger 类型,继承自 BaseObject。

GMCP触发器处于基于 GMCP 协议的数据,其使用方法类似于 Trigger 对象

但 GMCPTrigger 必定以指定name为触发,触发时,其值直接传递给对象本身

参数:
  • session – 本对象所属的会话

  • name – 触发对应的 GMCP 的 name

reset()[源代码]

复位事件,用于async执行

async triggered()[源代码]

异步触发的可等待函数。其使用方法和 Trigger.triggered() 类似,且参数与返回值均与之兼容。

class pymud.Timer(session, *args, **kwargs)[源代码]

定时器 Timer 类型,继承自 MatchObject。PYMUD 支持同时任意多个定时器。

参数:

session – 对象所属会话

Timer 中使用的 kwargs 均继承自 BaseObject,包括:
  • id: 标识

  • group: 组名

  • enabled: 使能状态

  • timeout: 定时时间

  • onSuccess: 定时到期执行的函数

property enabled

可读写属性,定时器使能状态

async onTimerTask()[源代码]

定时任务的调用方法,脚本中无需调用

reset()[源代码]

复位定时器,清除所创建的定时任务

startTimer()[源代码]

启动定时器

class pymud.SimpleTimer(session, code, *args, **kwargs)[源代码]

简单定时器 SimpleTimer 类型,继承自 Timer, 包含了 Timer 的全部功能, 并使用 CodeBlock 对象创建了 onSuccess 的使用场景。

参数:
  • session – 本对象所属的会话, 同 MatchObject

  • code – str, 当定时任务到期时执行的代码, 使用 CodeBlock 实现

onSuccess(id)[源代码]

覆盖了基类的默认 onSuccess方法,使用 CodeBlock 执行构造函数中传入的 code 参数

class pymud.Command(session, patterns, *args, **kwargs)[源代码]

命令 Command 类型,继承自 MatchObject。 命令是 PYMUD 的最大特色,它是一组归纳了同步/异步执行、等待响应、处理的集成对象。 要使用命令,不能直接使用 Command 类型,应总是继承并使用其子类,务必覆盖基类的 execute 方法。

有关 Command 的使用帮助,请查看帮助页面

参数:
  • session – 本对象所属的会话

  • patterns – 匹配模式

create_task(coro, *args, name=None)[源代码]

创建并管理任务。由 Command 创建的任务,同时也被 Session 所管理。 其内部是调用 asyncio.create_task 进行任务创建。

参数:
  • coro – 任务包含的协程或可等待对象

  • name – 任务名称, Python 3.10 才支持的参数

async execute(cmd, *args, **kwargs)[源代码]

命令调用的入口函数。该函数由 Session 进行自动调用。 通过 Session.exec 系列方法调用的命令,最终是执行该命令的 execute 方法。

子类必须实现并覆盖该方法。

remove_task(task: Task, msg=None)[源代码]

取消任务并从管理任务清单中移除。由 Command 取消和移除的任务,同时也被 Session 所取消和移除。

参数:
  • task – 要取消的任务

  • msg – 取消任务时提供的消息, Python 3.10 才支持的参数

reset()[源代码]

复位命令,并取消和清除所有本对象管理的任务。

class pymud.SimpleCommand(session, patterns, succ_tri, *args, **kwargs)[源代码]

对命令的基本应用进行了基础封装的一种可以直接使用的命令类型,继承自 Command。

SimpleCommand 并不能理解为 “简单” 命令,因为其使用并不简单。 只有在熟练使用 Command 建立自己的命令子类之后,对于某些场景的应用才可以简化代码使用 SimpleCommand 类型。

参数:
  • session – 本对象所属的会话

  • patterns – 匹配模式

  • succ_tri – 代表成功的响应触发器清单,可以为单个触发器,或一组触发器,必须指定

kwargs关键字参数特殊支持:
fail_tri:

代表失败的响应触发器清单,可以为单个触发器,或一组触发器,可以为 None

retry_tri:

代表重试的响应触发器清单,可以为单个触发器,或一组触发器,可以为 None

async execute(cmd, *args, **kwargs)[源代码]

覆盖基类的 execute 方法, SimpleCommand 的默认实现。

参数:

cmd – 执行时输入的实际指令

kwargs接受指定以下参数,在执行中进行一次调用:
onSuccess:

成功时的回调

onFailure:

失败时的回调

onTimeout:

超时时的回调

class pymud.DotDict[源代码]

可以通过点.访问内部key-value对的字典。此类型继承自dict。

  • 由于继承关系,此类型可以使用所有dict可以使用的方法

  • 额外增加的点.访问方法使用示例如下

示例:
mydict = DotDict()

# 以下写内容访问等价
mydict["key1"] = "value1"
mydict.key1 = "value1"

# 以下读访问等价
val = mydict["key1"]
val = mydict.key1
class pymud.extras.Plugin(name, location)[源代码]

插件管理类。对加载的插件文件进行管理。该类型由PyMudApp进行管理,无需人工创建。

有关插件的详细信息,请参见 插件

参数:
  • name – 插件的文件名, 如’myplugin.py’

  • location – 插件所在的目录。自动加载的插件包括PyMUD包目录下的plugins目录以及当前目录下的plugins目录

property desc

插件描述,由插件文件中的 PLUGIN_DESC 常量定义

property help

插件帮助,由插件文件中的文档字符串定义

property name

插件名称,由插件文件中的 PLUGIN_NAME 常量定义

onAppInit(app)[源代码]

PyMUD应用启动时对插件执行的操作,由插件文件中的 PLUGIN_PYMUD_START 函数定义

参数:

app – 启动的 PyMudApp 对象实例

onSessionCreate(session)[源代码]

新会话创建时对插件执行的操作,由插件文件中的 PLUGIN_SESSION_CREATE 函数定义

参数:

session – 新创建的会话对象实例

onSessionDestroy(session)[源代码]

会话关闭时(注意不是断开)对插件执行的操作,由插件文件中的 PLUGIN_SESSION_DESTROY 函数定义

参数:

session – 所关闭的会话对象实例

reload()[源代码]

加载/重新加载插件对象