从端¶
从端更像是对即时通讯 API 的封装,它将来自通讯平台的消息封装到对应的对象中并将其传递给主端。
尽管我们建议从属通道应该和即使通讯平台适配,但你可以尝试适配任何适宜的系统模型:该系统可以将数据以消息方式发送,同时可以有一个有限的用于收发消息的终端列表。
在大多数情况下,从端应该被看作为一个来自即时通讯平台的普通用户,而不是一个机器人。你只应在如下情况下为从端使用机器人:
该平台不对用户和机器人做特别区分,或者
该平台上的机器人可以实现与用户同等或更多的功能,并且机器人相对比一般用户账户更容易创建
附加功能¶
通过 附加功能,从端能够提供 EFB 没有要求的更多功能,例如创建组群组,搜索好友等。
用户可以通过和 CLI 类似的方式来访问这些功能。「附加功能」方法除 self
之外只能(MUST)接受一个字符串参数,并使用 extra()
装饰器将其封装。该装饰器接受两个参数:name
表示功能的名称,以及 desc
表示功能的描述及其用法。
desc
应该(SHOULD)描述功能的用途以及用法。它更像是 CLI 程序的帮助文本。由于调用这些功能的方法依赖于主端的实现方式,因此 desc
中应(SHOULD)使用 "{function_name}"
代替用法中的名称,根据实现方式的不同,主端会使用适合名称来替代它。
方法在结束时必须(MUST)返回一个字符串或 None
。字符串会被作为运行结果显示给用户,None
代表后续将会有进一步的交互。根据这个特性的具体功能,输出可能只是一个简单的成功消息,或者是一个很长的结果。
该函数不可(MUST NOT)抛出任何异常。任何发生的异常都应该被 expect
并处理。
出于兼容性考虑,该类功能的方法名称具有比一般 Python 3 标识符名称更严格的限制。附加功能函数的调用名称须(MUST):
区分大小写
只包含大小写字母,数字,和下划线。
不以数字开头。
长度为 1 到 20字符(含)
越短越精确越好,但是要容易被理解
用正则表达式表示则为:
^[A-Za-z][A-Za-z0-9_]{0,19}$
示例如下:
@extra(name="Echo",
desc="返回与输入内容相同的字符串。\n"
"用法:\n"
" {function_name} 文本")
def echo(self, arguments: str = "") -> str:
return arguments
消息命令¶
消息命令通常由从端发送,以允许用户对于要求特殊操作的消息做出回应。
消息命令的使用场景示例:
添加推荐联系人为好友。
接受或拒绝好友请求。
向投票消息进行投票.
一条消息可以附加到在 list
之中附加一系列命令,其中的每个命令有:
面向用户的名称,
方法名称,
位置指定参数(
*args
) 的list
列表,以及关键字参数(
**kwargs
)的dict
字典
当用户单击按钮时,将会调用相应的信道方法并传递指定的参数。
注意:作为对用户操作的响应,所有这样的方法必须(MUST)返回一个 str
,且不可(MUST NOT)抛出任何异常。任何发生的异常都必须(MUST)被 expect
并被处理。
消息传递¶
从端应该(SHOULD)发送 IM 提供的所有消息,包括用户在没有通过改从端发送的消息。但用户通过主端发出的消息不应(SHOULD NOT)再传回主端。
实现细节¶
参见 SlaveChannel
。