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进行更新覆盖,因此可以仅指定需替代的部分。
- copy(raw=False)[源代码]¶
复制会话中的选中内容
- 参数:
raw – 指定采取文本模式还是ANSI格式模式
注意: 复制的内容仅存在于运行环境的剪贴板中。若使用ssh远程,该复制命令不能访问本地剪贴板。
- 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的变量
创建世界子菜单,其中根据本地pymud.cfg中的有关配置创建会话有关子菜单
- 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
- property plugins¶
所有已加载的插件列表,快捷点访问器
- 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 : 需加载的脚本清单
- 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)
- addGMCP(gmcp: GMCPTrigger)[源代码]¶
向会话中增加一个GMCP触发器。
- 参数:
gmcp – 要增加的GMCP触发器对象,应为 GMCPTrigger 类型或其子类
- addGMCPs(gmcps: dict)[源代码]¶
向会话中增加多个GMCPTrigger。使用方法与 addAliases 类似。
- 参数:
gmcps – 多个GMCPTrigger的字典。字典 key 应为每个GMCPTrigger的 id。
- addTriggers(tris: dict)[源代码]¶
向会话中增加多个触发器。使用方法与 addAliases 类似。
- 参数:
tris – 多个触发器的字典。字典 key 应为每个触发器的 id。
- property alis¶
本会话的别名辅助点访问器,可以通过alis+别名id快速访问别名
session.alis.myali.enabled = False
- clean()[源代码]¶
清除会话有关任务项和事件标识,具体包括:
复位所有可能包含异步操作的对象,包括定时器、触发器、别名、GMCP触发器、命令
取消所有由本会话管理但仍未完成的任务
清空会话管理的所有任务
- property cmds¶
本会话的命令辅助点访问器,可以通过cmds+命令id快速访问命令
session.cmds.mycmd.enabled = False
- 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触发器自身的列表
- 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 或者触发器自身的列表
- 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, [31m
- 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_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 的唯一标识
- 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"])
- property globals¶
全局变量的辅助点访问器,可以通过globals+变量名快速访问该变量值
全局变量与会话变量的区别在于,全局变量在所有会话之间是共享和统一的
# 以下两个获取全局变量值的方法等价 hooked = session.globals.hooked hooked = session.getGlobal('hooked') # 以下两个为全局变量赋值的方法等价 session.globals.hooked = True session.setGlobal('hooked', True)
- property gmcp¶
本会话的GMCP辅助访问器
- 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:
模块名称
- 注意:
#reload只能重新加载#load方式加载的模块(包括在pymud.cfg中指定的),但不能重新加载import xxx导入的模块。
若加载的模块脚本中有语法错误,#reload可能无法生效。此时需要退出PyMUD重新打开
若加载时依次加载了不同模块,且模块之间存在依赖关系,那么重新加载时,应按原依赖关系顺序逐个重新加载,否则容易找不到依赖或依赖出错
- 示例:
#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: 保存当前会话变量
- 注意:
文件保存在当前目录下,文件名为 {会话名}.mud
变量保存使用了python的pickle模块,因此所有变量都应是类型自省的
虽然变量支持所有的Python类型,但是仍然建议仅在变量中使用可以序列化的类型。
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, [32m
- 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类的实例(若有定义)
- 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环境,该参数并未使用。
- 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)
- 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, [33m
- write(data) None [源代码]¶
向服务器写入数据(RAW格式字节数组/字节串)。 一般不应在脚本中直接调用。
- 参数:
data – 向传输中写入的数据, 应为 bytes, bytearray, memoryview 类型
- write_eof() None [源代码]¶
向服务器发送 eof 信息,即与服务器断开连接。 脚本中无需调用。
若要在脚本中控制断开与服务器的连接,请使用 session.disconnect()
- class pymud.CodeBlock(code)[源代码]¶
PyMUD中可以执行的代码块,可以进行命令、别名检测,以及完成变量替代。
但一般情况下,不需要手动创建 CodeBlock 对象,而是在 SimpleTrigger, SimpleAlias 等类型中直接使用字符串进行创建。或者在命令行输入文本将自动创建。
- 参数:
code – 代码块的代码本身。可以单行、多行、以及多层代码块
- 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
- property enabled¶
可读写属性,使能或取消使能本对象
- 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 用于指定初始的匹配模式。
- 该属性支持字符串和其他可迭代对象(如元组、列表)两种形式。
当为字符串时,使用单行匹配模式
当为可迭代对象时,使用多行匹配模式。多行的行数由可迭代对象所确定。
- 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 进行实现
- class pymud.Trigger(session, patterns, *args, **kwargs)[源代码]¶
触发器 Trigger 类型,继承自 MatchObject。
其内涵与 MatchObject 完全相同,仅对缩写进行了覆盖,并增写了 triggered 异步方法。
- class pymud.SimpleTrigger(session, patterns, code, *args, **kwargs)[源代码]¶
简单别名 SimpleTrigger 类型,继承自 Trigger, 包含了 Trigger 的全部功能, 并使用 CodeBlock 对象创建了 onSuccess 的使用场景。
- 参数:
session – 本对象所属的会话, 同 MatchObject
patterns – 匹配模式,同 MatchObject
code – str, 当匹配成功时执行的代码, 使用 CodeBlock 进行实现
- class pymud.GMCPTrigger(session, name, *args, **kwargs)[源代码]¶
GMCP触发器 GMCPTrigger 类型,继承自 BaseObject。
GMCP触发器处于基于 GMCP 协议的数据,其使用方法类似于 Trigger 对象
但 GMCPTrigger 必定以指定name为触发,触发时,其值直接传递给对象本身
- 参数:
session – 本对象所属的会话
name – 触发对应的 GMCP 的 name
- class pymud.Timer(session, *args, **kwargs)[源代码]¶
定时器 Timer 类型,继承自 MatchObject。PYMUD 支持同时任意多个定时器。
- 参数:
session – 对象所属会话
- Timer 中使用的 kwargs 均继承自 BaseObject,包括:
id: 标识
group: 组名
enabled: 使能状态
timeout: 定时时间
onSuccess: 定时到期执行的函数
- property enabled¶
可读写属性,定时器使能状态
- class pymud.SimpleTimer(session, code, *args, **kwargs)[源代码]¶
简单定时器 SimpleTimer 类型,继承自 Timer, 包含了 Timer 的全部功能, 并使用 CodeBlock 对象创建了 onSuccess 的使用场景。
- 参数:
session – 本对象所属的会话, 同 MatchObject
code – str, 当定时任务到期时执行的代码, 使用 CodeBlock 实现
- 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 方法。子类必须实现并覆盖该方法。
- class pymud.SimpleCommand(session, patterns, succ_tri, *args, **kwargs)[源代码]¶
对命令的基本应用进行了基础封装的一种可以直接使用的命令类型,继承自 Command。
SimpleCommand 并不能理解为 “简单” 命令,因为其使用并不简单。 只有在熟练使用 Command 建立自己的命令子类之后,对于某些场景的应用才可以简化代码使用 SimpleCommand 类型。
- 参数:
session – 本对象所属的会话
patterns – 匹配模式
succ_tri – 代表成功的响应触发器清单,可以为单个触发器,或一组触发器,必须指定
- kwargs关键字参数特殊支持:
- fail_tri:
代表失败的响应触发器清单,可以为单个触发器,或一组触发器,可以为 None
- retry_tri:
代表重试的响应触发器清单,可以为单个触发器,或一组触发器,可以为 None
- 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 常量定义
- onSessionCreate(session)[源代码]¶
新会话创建时对插件执行的操作,由插件文件中的 PLUGIN_SESSION_CREATE 函数定义
- 参数:
session – 新创建的会话对象实例