From a1fe705fd56c5a9153ec53079c67851c18be1599 Mon Sep 17 00:00:00 2001 From: zyzs <1007423165@qq.com> Date: Fri, 3 Jun 2022 16:49:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=9F=BA=E4=BA=8EWechaty=E7=9A=84=E5=A4=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=BC=82=E6=AD=A5=E6=B6=88=E6=81=AF=E6=A1=86?= =?UTF-8?q?=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jekyll/_contributors/zyzs.md | 16 ++ ...-interaction-framework-based-on-wechaty.md | 269 ++++++++++++++++++ .../11.png | Bin 0 -> 39813 bytes .../12.png | Bin 0 -> 35525 bytes .../13.png | Bin 0 -> 9118 bytes jekyll/assets/contributors/zyzs/avatar.webp | Bin 0 -> 13494 bytes 6 files changed, 285 insertions(+) create mode 100644 jekyll/_contributors/zyzs.md create mode 100644 jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.png create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/12.png create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/13.png create mode 100644 jekyll/assets/contributors/zyzs/avatar.webp diff --git a/jekyll/_contributors/zyzs.md b/jekyll/_contributors/zyzs.md new file mode 100644 index 0000000000..85b4e6969c --- /dev/null +++ b/jekyll/_contributors/zyzs.md @@ -0,0 +1,16 @@ +--- +name: zyzs +site: https://github.com/chenyuxiangg +avatar: /assets/contributors/zyzs/avatar.webp +bio: A Learner | A man +email: +twitter: +--- + +The world of the learner. + +## Contact me + +- Github: +- Email:<> +- Website: <> diff --git a/jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md b/jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md new file mode 100644 index 0000000000..5e16de5ba2 --- /dev/null +++ b/jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md @@ -0,0 +1,269 @@ +# 基于wechaty的简易多用户异步交互框架 + +## 背景介绍 + +最近在编写一个服务端的程序,由于程序运行于远端,为了便于实时监控程序运行状态以及处理结果,同时又不希望记录过多运行时日志,因此考虑使用基于wechaty作为人机交互接口的解决方案。 + + + +## 应用场景 + +该框架提供一种**人机交互的解决方案**,可应用的场景包括但不限于**流程控制**、**状态监测**以及**告警通报**。该框架支持**多用户分级管理**,让合适的用户获取合适的信息是一个比较常规的设计,防止过多接口暴露导致信息泄露;同时框架也支持**消息异步通知**,多用户场景下需要解决的一个重要问题就是冲突,框架提供一种简单的解决冲突的方式。 + + + +## 整体结构 + +
+ +
+
模块交互
+
+ + +用户与系统交互可以使用两条流来描述。用户下发指令到Wechaty机器人,机器人将指令封装后传递给框架解析(封装后的指令携带指令下发者信息),框架的LCUser模块辅助LCBotCmd对消息进行鉴权,如果用户没有权限执行该指令,指令下发将会终止,起到用户分级目的;反之如果用户有权执行该指令则LCBotCmd模块会解析指令并到目标模块获取结果,这条流称为**指令解析流**。目标模块将指令执行结果返回到存储到消息队列,Wechaty通过从消息队列周期性的获取消息分发给用户,从而实现多用户异步交互,这条流称为**消息响应流**。还有一些琐碎的事件没有在图中表现出来,比如指令注册与注销,用户添加与删除,用户提权与降权等,大家可以参考模块设计自行发挥。 + +## 模块设计 + +Frame框架共由三个子模块实现,为了简化设计我将MsgBuff模块固定实现为`queue.Queue(-1)`,其表示一个容量无穷大(理论上)的同步队列。LCBotCmd与LCUser模块见下: + +### LCBotCmd + +为了能够对指令类型和指令特权级进行区分,需要给每条指令绑定一个类型标志和特权标志,那么这两个标志可以这样定义: + +```python +class CMDTYPE(Enum): + C_GET = 0 + C_SET = 1 + C_QUIT = 2 + C_NONE = 3 + +class CMDPRI(IntEnum): + CP_ROOT = 0 + CP_ADMIN = 1 + CP_USER = 2 +``` + +之所以让`CMDTYPE`继承`Enum`而`CMDPRI`继承`IntEnum`是因为类型不涉及大小比较,而特权需要大小比较。 + +之后就可以对单个指令的属性进行配置了: + +```python +class CMD: + def __init__(self): + self.type = CMDTYPE.C_NONE + self.name = None + self.privilege = None + self.call_func = None + + self.username = None + self.extra = None +``` + +每一条指令有两个使用场景:**注册**和**解析**,因此我为指令增加了两种场景下所需的属性。其中`type`、`name`、`privilege`、`call_func`用于注册场景,`username`、`extra`、`privilege`用于指令解析场景,这里`extra`参数表示设置类指令需要携带的信息,`privilege`即用于注册场景也用于解析场景,用于注册时表示执行该指令需要的**最低特权**,用于解析时表示该**指令执行者的特权级**。 + +对于指令的两种场景,我们需要不同的方法构造他们: + +```python + @staticmethod + def construct_for_exec(cmd, extra, user): + c = CMD() + c.name = cmd + c.extra = extra + c.username = user.getName() + c.privilege = user.getPri() + return c + + @staticmethod + def construct_for_registe(type, cmd, privilege, func): + c = CMD() + c.type = type + c.name = cmd + c.privilege = privilege + c.call_func = func + return c +``` + +构造函数不依赖于对象,因此使用静态函数。 + +最后需要做的就是让指令执行起来: + +```python + def do(self, extra, username): + self.call_func(extra, username) +``` + +直接调用指令的回调让指令跑起来,`extra`对于非设置类指令为*None*,配置类指令时就是附加的信息。可能`extra`和`username`两个参数在这里会显得比较突兀,因为指令属性里边就带有这两个参数,我们本可以直接将回调函数中用到这两个参数的地方替换为`self.extra`和`self.username`,目前看来似乎传入这两个参数是多此一举的q1,别慌,继续往下看。 + +指令已经实现了,接下来就该实现指令集了: + +```python +class Cmdmanager: + _instance_lock = threading.Lock() + + def __init__(self): + self.cmds = {} + + # 注册命令 + def reg_cmd(self, cmd:CMD): + if cmd.type is None or cmd.privilege is None or cmd.call_func is None: + return + if cmd.name in self.cmds: + return + self.cmds[cmd.name] = cmd + + # 修改命令 + def update_cmd(self, cmd:CMD): + if cmd.type is None or cmd.privilege is None or cmd.call_func is None: + return + if cmd.name in self.cmds: + self.cmds[cmd.name] = cmd + + # 注销命令 + def unreg_cmd(self, name:str): + if name in self.cmds: + self.cmds.pop(name) + + # 执行命令 + def run_cmd(self, cmd:CMD): + if cmd.privilege > self.cmds[cmd.name].privilege or cmd.username is None: + return + if self.cmds[cmd.name].type == CMDTYPE.C_SET and cmd.extra is None: + return + func = self.cmds[cmd.name].do + work = threading.Thread(target=func, args=(cmd.extra,cmd.username,), daemon=False) + work.start() + + @classmethod + def instance(cls): + if not hasattr(Cmdmanager, "_instance"): + with Cmdmanager._instance_lock: # 为了保证线程安全在内部加锁 + if not hasattr(Cmdmanager, "_instance"): + Cmdmanager._instance = Cmdmanager() + return Cmdmanager._instance +``` + +实现一个指令管理类,简单的将注册的指令存放到一个字典中,方便对指令进行增删改,同时每个指令的执行都实现为在线程中执行,以达到消息异步响应的效果。同时,在函数`run_cmd`中就可以解决*q1*的疑问了:**因为注册到指令集中的指令跟实际执行的指令不是同一个!** + +### LCUser + +LCUser的模块设计就比较简单了,需要一个定义用户的类以及一个管理用户集的类(与LCBotCmd模块结构相似),一种可能的实现为: + +```python +class LCUser: + def __init__(self, name, right): + self.name = name + self.right = right + + def getName(self): + return self.name + + def setName(self, name): + self.name = name + + def updetePri(self, right): + self.right = right + + def getPri(self): + return self.right + +class UserManager: + _instance_lock = threading.Lock() + + def __init__(self, filepath): + self.users = {} + self.loadConfig(filepath) + + def loadConfig(self, filepath): + try: + file = open(filepath, 'rb') + jsonfile = json.load(file) + except Exception: + pass + for u in jsonfile: + name = u['name'] + right = CMDPRI(u['right']) + user = LCUser(name, right) + self.users[name] = user + + def getUsers(self): + return self.users + + @classmethod + def instance(cls): + if not hasattr(UserManager, "_instance"): + with UserManager._instance_lock: # 为了保证线程安全在内部加锁 + if not hasattr(UserManager, "_instance"): + UserManager._instance = UserManager("D:\\code\\git\\hpv\\LCUser\\userconfig.json") + return UserManager._instance +``` + +目前实现比较简单,通过加载配置文件的方式管理用户集,当然使用者可以通过定义增、删函数对用户进行管理,甚至可以用数据库来持久化数据。 + +### Wechaty如何集成框架 + +Wechaty拥有天然的优势,简单的接口为框架提供了基础设施,通过对接微信,相当于拥有一个自动用户管理的平台;通过事件循环提供及时准确的消息,更加方便用户与系统的交互。框架提供了简单的接口给Wechaty进行调用: + +```python +from wechaty import Wechaty + +class LcBot(Wechaty): + def __init__(self): + super(LcBot, self).__init__() + self.quit = False + + self.reg_cmd() + + def reg_cmd(self): + Cmdmanager.instance().reg_cmd(CMD.construct_for_registe(CMDTYPE.C_BREAK, 'quit', CMDPRI.CP_ROOT, self.die)) + + def die(self, extra, username): + self.quit = True + + async def on_message(self, msg): + content = msg.text().split(':') + talker = msg.talker() + if talker.name in UserManager.instance().getUsers(): + user = UserManager.instance().getUsers()[talker.name] + if len(content) > 1: + cmd = CMD.construct_for_exec(content[0], content[1], user) + else: + cmd = CMD.construct_for_exec(content[0], None, user) + Cmdmanager.instance().run_cmd(cmd) +``` + +这段简短的代码展示了框架的基本功能,`reg_cmd`函数调用框架的命令注册接口进行命令注册,类似的,其他模块也可以在需要的地方进行命令的注册。在`on_message`函数中,框架对指令执行者进行了初步鉴别,然后调用`construct_for_exec`函数生成待执行命令,最后送到`run_cmd`函数进行处理。整个流程就是这么简单,读者可以自行扩展。 + +## 效果展示 + +
+ +
+
命令响应
+
+ +
+ +
+
告警提示
+
+ + +## 篇末总结 + +多用户异步消息处理框架与Wechaty相辅相成,其设计简单小巧,虽然无法应对复杂多变的互联网,但复杂的东西我们总可以将他们抽象为逻辑过程交给计算机去完成,我们只需要监视并控制机器就行了,而Wechaty和多用户异步消息处理框架的配合达到了这个效果。 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.png b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.png new file mode 100644 index 0000000000000000000000000000000000000000..710ca9dcb9b00631e3f3020d47a3bbba9bb27348 GIT binary patch literal 39813 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 literal 0 HcmV?d00001 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/12.png b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/12.png new file mode 100644 index 0000000000000000000000000000000000000000..e3231c8b896701137a8cf8e65432e834143e313f GIT binary patch literal 35525 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 A;Q#;t literal 0 HcmV?d00001 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/13.png b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/13.png new file mode 100644 index 0000000000000000000000000000000000000000..6820728242bf6e29c1e80f7c546ac94ca3a6cebb GIT binary patch literal 9118 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 sqP~i#uOjNJi27G=u5=5|}+%bp4lq0}Y=uwg3PC literal 0 HcmV?d00001 diff --git a/jekyll/assets/contributors/zyzs/avatar.webp b/jekyll/assets/contributors/zyzs/avatar.webp new file mode 100644 index 0000000000000000000000000000000000000000..f6e0a652bc8113508d0a3566792e4f0652babee1 GIT binary patch literal 13494 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 literal 0 HcmV?d00001 From d2235e3574c7d3cb7d76d6ada3f0d9aa4906a50c Mon Sep 17 00:00:00 2001 From: zyzs <1007423165@qq.com> Date: Fri, 3 Jun 2022 16:49:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9F=BA=E4=BA=8EWechaty=E7=9A=84=E5=A4=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=BC=82=E6=AD=A5=E6=B6=88=E6=81=AF=E6=A1=86?= =?UTF-8?q?=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jekyll/_contributors/zyzs.md | 16 + ...-interaction-framework-based-on-wechaty.md | 281 ++++++++++++++++++ .../11.png | Bin 0 -> 39813 bytes .../11.webp | Bin 0 -> 17290 bytes .../12.png | Bin 0 -> 35525 bytes .../13.png | Bin 0 -> 9118 bytes jekyll/assets/contributors/zyzs/avatar.webp | Bin 0 -> 13494 bytes 7 files changed, 297 insertions(+) create mode 100644 jekyll/_contributors/zyzs.md create mode 100644 jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.png create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.webp create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/12.png create mode 100644 jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/13.png create mode 100644 jekyll/assets/contributors/zyzs/avatar.webp diff --git a/jekyll/_contributors/zyzs.md b/jekyll/_contributors/zyzs.md new file mode 100644 index 0000000000..85b4e6969c --- /dev/null +++ b/jekyll/_contributors/zyzs.md @@ -0,0 +1,16 @@ +--- +name: zyzs +site: https://github.com/chenyuxiangg +avatar: /assets/contributors/zyzs/avatar.webp +bio: A Learner | A man +email: +twitter: +--- + +The world of the learner. + +## Contact me + +- Github: +- Email:<> +- Website: <> diff --git a/jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md b/jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md new file mode 100644 index 0000000000..378b477ef4 --- /dev/null +++ b/jekyll/_posts/2022-06-03-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty.md @@ -0,0 +1,281 @@ +--- + title: "基于wechaty的简易多用户异步交互框架" + author: zyzs + categories: article + tags: + - python + - robot + - multi-user + - interaction + image: /assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.webp +--- + +# 基于wechaty的简易多用户异步交互框架 + +## 背景介绍 + +最近在编写一个服务端的程序,由于程序运行于远端,为了便于实时监控程序运行状态以及处理结果,同时又不希望记录过多运行时日志,因此考虑使用基于wechaty作为人机交互接口的解决方案。 + + + +## 应用场景 + +该框架提供一种**人机交互的解决方案**,可应用的场景包括但不限于**流程控制**、**状态监测**以及**告警通报**。该框架支持**多用户分级管理**,让合适的用户获取合适的信息是一个比较常规的设计,防止过多接口暴露导致信息泄露;同时框架也支持**消息异步通知**,多用户场景下需要解决的一个重要问题就是冲突,框架提供一种简单的解决冲突的方式。 + + + +## 整体结构 + +

+ +
+
模块交互
+
+ + +用户与系统交互可以使用两条流来描述。用户下发指令到Wechaty机器人,机器人将指令封装后传递给框架解析(封装后的指令携带指令下发者信息),框架的LCUser模块辅助LCBotCmd对消息进行鉴权,如果用户没有权限执行该指令,指令下发将会终止,起到用户分级目的;反之如果用户有权执行该指令则LCBotCmd模块会解析指令并到目标模块获取结果,这条流称为**指令解析流**。目标模块将指令执行结果返回到存储到消息队列,Wechaty通过从消息队列周期性的获取消息分发给用户,从而实现多用户异步交互,这条流称为**消息响应流**。还有一些琐碎的事件没有在图中表现出来,比如指令注册与注销,用户添加与删除,用户提权与降权等,大家可以参考模块设计自行发挥。 + +## 模块设计 + +Frame框架共由三个子模块实现,为了简化设计我将MsgBuff模块固定实现为`queue.Queue(-1)`,其表示一个容量无穷大(理论上)的同步队列。LCBotCmd与LCUser模块见下: + +### LCBotCmd + +为了能够对指令类型和指令特权级进行区分,需要给每条指令绑定一个类型标志和特权标志,那么这两个标志可以这样定义: + +```python +class CMDTYPE(Enum): + C_GET = 0 + C_SET = 1 + C_QUIT = 2 + C_NONE = 3 + +class CMDPRI(IntEnum): + CP_ROOT = 0 + CP_ADMIN = 1 + CP_USER = 2 +``` + +之所以让`CMDTYPE`继承`Enum`而`CMDPRI`继承`IntEnum`是因为类型不涉及大小比较,而特权需要大小比较。 + +之后就可以对单个指令的属性进行配置了: + +```python +class CMD: + def __init__(self): + self.type = CMDTYPE.C_NONE + self.name = None + self.privilege = None + self.call_func = None + + self.username = None + self.extra = None +``` + +每一条指令有两个使用场景:**注册**和**解析**,因此我为指令增加了两种场景下所需的属性。其中`type`、`name`、`privilege`、`call_func`用于注册场景,`username`、`extra`、`privilege`用于指令解析场景,这里`extra`参数表示设置类指令需要携带的信息,`privilege`即用于注册场景也用于解析场景,用于注册时表示执行该指令需要的**最低特权**,用于解析时表示该**指令执行者的特权级**。 + +对于指令的两种场景,我们需要不同的方法构造他们: + +```python + @staticmethod + def construct_for_exec(cmd, extra, user): + c = CMD() + c.name = cmd + c.extra = extra + c.username = user.getName() + c.privilege = user.getPri() + return c + + @staticmethod + def construct_for_registe(type, cmd, privilege, func): + c = CMD() + c.type = type + c.name = cmd + c.privilege = privilege + c.call_func = func + return c +``` + +构造函数不依赖于对象,因此使用静态函数。 + +最后需要做的就是让指令执行起来: + +```python + def do(self, extra, username): + self.call_func(extra, username) +``` + +直接调用指令的回调让指令跑起来,`extra`对于非设置类指令为*None*,配置类指令时就是附加的信息。可能`extra`和`username`两个参数在这里会显得比较突兀,因为指令属性里边就带有这两个参数,我们本可以直接将回调函数中用到这两个参数的地方替换为`self.extra`和`self.username`,目前看来似乎传入这两个参数是多此一举的q1,别慌,继续往下看。 + +指令已经实现了,接下来就该实现指令集了: + +```python +class Cmdmanager: + _instance_lock = threading.Lock() + + def __init__(self): + self.cmds = {} + + # 注册命令 + def reg_cmd(self, cmd:CMD): + if cmd.type is None or cmd.privilege is None or cmd.call_func is None: + return + if cmd.name in self.cmds: + return + self.cmds[cmd.name] = cmd + + # 修改命令 + def update_cmd(self, cmd:CMD): + if cmd.type is None or cmd.privilege is None or cmd.call_func is None: + return + if cmd.name in self.cmds: + self.cmds[cmd.name] = cmd + + # 注销命令 + def unreg_cmd(self, name:str): + if name in self.cmds: + self.cmds.pop(name) + + # 执行命令 + def run_cmd(self, cmd:CMD): + if cmd.privilege > self.cmds[cmd.name].privilege or cmd.username is None: + return + if self.cmds[cmd.name].type == CMDTYPE.C_SET and cmd.extra is None: + return + func = self.cmds[cmd.name].do + work = threading.Thread(target=func, args=(cmd.extra,cmd.username,), daemon=False) + work.start() + + @classmethod + def instance(cls): + if not hasattr(Cmdmanager, "_instance"): + with Cmdmanager._instance_lock: # 为了保证线程安全在内部加锁 + if not hasattr(Cmdmanager, "_instance"): + Cmdmanager._instance = Cmdmanager() + return Cmdmanager._instance +``` + +实现一个指令管理类,简单的将注册的指令存放到一个字典中,方便对指令进行增删改,同时每个指令的执行都实现为在线程中执行,以达到消息异步响应的效果。同时,在函数`run_cmd`中就可以解决*q1*的疑问了:**因为注册到指令集中的指令跟实际执行的指令不是同一个!** + +### LCUser + +LCUser的模块设计就比较简单了,需要一个定义用户的类以及一个管理用户集的类(与LCBotCmd模块结构相似),一种可能的实现为: + +```python +class LCUser: + def __init__(self, name, right): + self.name = name + self.right = right + + def getName(self): + return self.name + + def setName(self, name): + self.name = name + + def updetePri(self, right): + self.right = right + + def getPri(self): + return self.right + +class UserManager: + _instance_lock = threading.Lock() + + def __init__(self, filepath): + self.users = {} + self.loadConfig(filepath) + + def loadConfig(self, filepath): + try: + file = open(filepath, 'rb') + jsonfile = json.load(file) + except Exception: + pass + for u in jsonfile: + name = u['name'] + right = CMDPRI(u['right']) + user = LCUser(name, right) + self.users[name] = user + + def getUsers(self): + return self.users + + @classmethod + def instance(cls): + if not hasattr(UserManager, "_instance"): + with UserManager._instance_lock: # 为了保证线程安全在内部加锁 + if not hasattr(UserManager, "_instance"): + UserManager._instance = UserManager("D:\\code\\git\\hpv\\LCUser\\userconfig.json") + return UserManager._instance +``` + +目前实现比较简单,通过加载配置文件的方式管理用户集,当然使用者可以通过定义增、删函数对用户进行管理,甚至可以用数据库来持久化数据。 + +### Wechaty如何集成框架 + +Wechaty拥有天然的优势,简单的接口为框架提供了基础设施,通过对接微信,相当于拥有一个自动用户管理的平台;通过事件循环提供及时准确的消息,更加方便用户与系统的交互。框架提供了简单的接口给Wechaty进行调用: + +```python +from wechaty import Wechaty + +class LcBot(Wechaty): + def __init__(self): + super(LcBot, self).__init__() + self.quit = False + + self.reg_cmd() + + def reg_cmd(self): + Cmdmanager.instance().reg_cmd(CMD.construct_for_registe(CMDTYPE.C_BREAK, 'quit', CMDPRI.CP_ROOT, self.die)) + + def die(self, extra, username): + self.quit = True + + async def on_message(self, msg): + content = msg.text().split(':') + talker = msg.talker() + if talker.name in UserManager.instance().getUsers(): + user = UserManager.instance().getUsers()[talker.name] + if len(content) > 1: + cmd = CMD.construct_for_exec(content[0], content[1], user) + else: + cmd = CMD.construct_for_exec(content[0], None, user) + Cmdmanager.instance().run_cmd(cmd) +``` + +这段简短的代码展示了框架的基本功能,`reg_cmd`函数调用框架的命令注册接口进行命令注册,类似的,其他模块也可以在需要的地方进行命令的注册。在`on_message`函数中,框架对指令执行者进行了初步鉴别,然后调用`construct_for_exec`函数生成待执行命令,最后送到`run_cmd`函数进行处理。整个流程就是这么简单,读者可以自行扩展。 + +## 效果展示 + +
+ +
+
命令响应
+
+ +
+ +
+
告警提示
+
+ + +## 篇末总结 + +多用户异步消息处理框架与Wechaty相辅相成,其设计简单小巧,虽然无法应对复杂多变的互联网,但复杂的东西我们总可以将他们抽象为逻辑过程交给计算机去完成,我们只需要监视并控制机器就行了,而Wechaty和多用户异步消息处理框架的配合达到了这个效果。 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.png b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.png new file mode 100644 index 0000000000000000000000000000000000000000..710ca9dcb9b00631e3f3020d47a3bbba9bb27348 GIT binary patch literal 39813 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
F*Vo=)6uM5BFm|&x_+{w&@T{_O!@DP-W$r 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 literal 0 HcmV?d00001 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.webp b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/11.webp new file mode 100644 index 0000000000000000000000000000000000000000..9e4fb249b3d2013e23adacc462cef07b3594fcee GIT binary patch literal 17290 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 Te#h<;07%Y{DE-&&zn1?8f2V(v literal 0 HcmV?d00001 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/12.png b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/12.png new file mode 100644 index 0000000000000000000000000000000000000000..e3231c8b896701137a8cf8e65432e834143e313f GIT binary patch literal 35525 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 A;Q#;t literal 0 HcmV?d00001 diff --git a/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/13.png b/jekyll/assets/2022/06-a-simple-multi-user-asynchronous-interaction-framework-based-on-wechaty/13.png new file mode 100644 index 0000000000000000000000000000000000000000..6820728242bf6e29c1e80f7c546ac94ca3a6cebb GIT binary patch literal 9118 zcmeHNdo){Vzt-uro#}-tMU|LRMct|`il9o}ij2@fT~bxlohss%bVjF$ORAK*CDWFs zE{##dU8XcmQO&e2K}bkkN?f`TK_odb^R4rpb=FzuJL{Zv{_7uE$@_cve)qed-<$V& zp5NZ-KRVeQ+AqIfOib*MovjsAOzazwnAk4VcY8$<%Q4$uL|?n2p*EMq@E;WBM2&9) zEgUVx#A?w8wte@A+TTaodPIwf9l5jf*+maff{Tf%oU^mCaE1FUj=SAv{nWbWPZL@0 z-ShH})-JUrb>6W?si}xs-e3fhHZI<_ec0;W?!#iQRlf6S4Za$aVRbUCZjatJLnz=9 zcZ*#VN9_}Pkj303cJrBN;1P9@*hPb{q5oGT>YAAVZ<(ls;4L>>CNCR{*a})j2sUS@wy;v=EG$w` zA%0wRaPN^lQyez6TQ4xfzzxg{z7+f$qezv+n(i&QY;sgm(&L=7nP7XBGBsSMk0M{X zg0fMNR#sM~+HT({mQN&D1Mau%fHY!PdRm&7O4Oi={(5K@v-Z!2Oi5&ll%!0i-bu+{+%hdB3T&oP8miBJw;opPV0*57YUaI~*$^+&J zWo6GR!3!frpn$-kc!&`46Tf9nQIj@g(QTXmXzhBh-! zTJ1CJ=26PwX{Ep(v!L4K65XUHzreMg(LoUK+{y>HKrXVAzQ+1ll8_d z0jjSlTPU=VHjj^+!w9l=eB#K79Zx`5Z*(|-%LHYgriRww^3?}SP3P`T9l(` z)?!~+c=)ASioE&f#V#KWMFy^sJIyL+(SC2Fg9`|u)Zii&#FvWS6*5(+ef=qvTR*9;)!J|X0Kpl8=dSXBxkBRKS< zC9y#}1*vgz9X#_0Z+^^7p@=F?)m5dz5vISges56Z=pK;5)Nv3kYqbkY%L(2nj(nT_ zPo*l^JOjbEBPB~GIGeK@t53-FtxMy6#tmWP@ujij_5Kcy!CIq5qICzS+RrO$H^3)@ zlJGk@{cse`&dWxOs?`E-c45p48z2{5oH99-RP03Gdz07t*fbYhx-`u&l6joI9y`j_ zq_)PNRp(w|&i2K}pkpNoja7o2#|8Cph(=4r zTPKguaz>FAM;V{M^qU^bQ`_G1{vnRMS(0x)eGle@+~$71PD6&`OH(2OIYx2xl^pegg1`OmZVLcL7>gKLay$&5LYUn|)+)H1YxnmjOevd2=H z<=-7-92U6nUkw z4__#-o1VPs$`|IXCzG8rU(!%&x4Dfeu3PN0c{cyKK&To8 z)0LtrsNGxV-@xGfWgCwkNW&TuT7lvjOUy+;j;2I5Sp(5-^CFan+I7+a<@S&9rHKdk ztui!0G_ZItuVG*RWQi$3$BvT}A%l7%&D-=9=F!d=d?pjhsflfH2akd!vxAE`gMRwaj_+=@Z2qKO{ip3X&6>ieFLYlcTodf<0U~ z_|EEww~L{@Cb&&G{O0y(Pt;@iHu92^QR|XyxmT*)Y7NRF3ZcGkxizdYWEfs$W`&12 z-M4?8853`7Oem#yc>$>g`jl}N1gdC?V(OxG5ZI73~AWlQxc9AbP>rA)! zAUZJxMm*mIz==WVW<@gj6h(=s#A@EkB@evKa#G~j5WPiz{VKAZ{klUB+md!?i0Cs* z2ha23xKRt-R1+m?<2hds_tE}?I(`9AzmG%UO{Qe|Bnxehxq6}H>D@QjfSER$zdi6B z+RbcBE&a7rr~A(@Fz(%IUGk)7#(EA$-)9M9^$<{S+}Y~f4p_`Ds6z7hs^R91i&4Z! zP8%fS(&N`Zl$liwsuAjVev!NY1-BS$E@^l@OBT(9zxb(aa~a&cw5n-ZLpBx1(S>8c z;YLXE2ec|^b?dSC9GU1fJFqp-A4h%WLtNkPNrvfGnL0LSZV?3aWCf+vp~Y_gIYQ=~ zU6!TiYME%)@HeoxtaQ+l)V0ovAUJAQg#-iN6+A)tKBNU+!n?KBJd>2SRl=0i;l+-s7A8VH9^^1Tg6Ez)S+z^e zmADd3>-QD)5*nL3NZ?BUwHd1MBvqqed}}jUZF{Aop!9+tXfe6;^lqRoLFwMw#77uc z&^AhJ{xyirz=pRuC$G43Sd-<_D|h|2!=6I)*@l!aoMimqu@N$cPM5$jOfU9aqyggCb|h>Y^-? z*@(^Qf~hTZ{N_sea){`VK`A#AW&v$yy2YBH#JCZ+sf@I=dZ}_1AIrz`(F9un{%zE> ziul7eSgx+Ja-x0aiKwIe3a_~r8efg`|Dc4h1HH)5A~qHq8RA627W;WS98hi+xQLvu zQtD3Ni>Mo91yYGx;ENn$s#}eZD%$yO$cPt^_6g{Rn1|6R=E4#$Vf52GA}?z`I0u`G zlKR{D`W>B+|If~s6j7+`X`hD{si$-C@4u;b{M+T`w!V{*`t?H0KO;n3MyQ_1_5R0D zc}A#yg`dpzu)o&og7*LFcdIVQT(H5K6j^%RH$)e%$0guFyXwwm!v2-reMf(29I$JM zKw|>a1uzgjf&H?pIHF_Z$ex>7D^K8|rWA=dLy9;he7Qj4GlBOzA~KBkCAv;o$W0ZZRS zBRw6c@+pQ7L>^dzwidenhlfl?!q)QyA3b3pB^;fo8*35IC~oC-t-iTk#6El3lyURO z<==b+4`MBfj*)i5FU5L@Di35nKl#<2dyOKW`9+lIQ@GOLa3F0t$U~sN;SW6azAztJ z4+l>*AyzYNP7hwqE^cKJm2sUzr}vXCnnD#ml)E$HNvsp;G}JF^Unc6W1cU)A0ViX| zM3DWLHnEqu9|nBJX&vheLsji>-@G&94I61{M`GGm^fbDeIXVZQ#4z5}lM>=kHtbq^ zof^r1Ox29P)_-&I#k3ZvpddSq`H@n4VeAp@C~w+Ty|Vatkl>hqq|u;RQE-r?IzAli zm7^g=Vyz8lOQX}-O=}c`3YP5kuvRS)ED5;$Dstc{Jc-Ytb_d~#px_}5#he^wj$CE} z%P9u?1Pdu%Un@c-OoWQBk5kVKtRCBn*ChMbAFya{f0n|t?BTs_iwKWE??wnKE#J@T z?A<7-}!!-*-AdCaJQ(ScWNi&jI%lOQPR)RC0A>YwXc5`KJ-OXf_JxZ26}u60H_)GGR0 ze1;fyU~tL$2oh^EN@+cN&tJ**1T!mbl7fR8;crZQpj>Q7HCzixTln!l%4VyP71;sz zIvZ9vLV9*>W}5V@@b<-J-6|{-VpnmfVkW2MrTXEDn2@}mQ_mv|T)|uH5&k9|Q2#Uz zL+$%=Z-D^c{?a9p%4HylZeX*`sobj_b<;o%yabUFE|Ho3nt$QPh6A0d{g_u+rt@>e ziO^LYj)4KL3OU3(^J+M|GIT&BxOG2xm%|mL*jr~r#aQqO5hl*Y%pU7`%Qwu+IAE6_ zb$jZQRt+GxRY%HOiR`Y=T6hW1OOF8`TB*%)KDCtHKQ!%o%bU%6>)3}Z@MwhBixLQV zhZhwL)8WOTNhcF3?+iRmdh-Z<#jO2KHT+%`vC97i*fm9PE57OGs5QYAd?VgvE#LG( z%Y`v>>9m$R2W9VWq3lArKLVfe5Jx~vpc(57p6`@gzIiP1c$iy~uUFFW@WXFzpQ+$96k5bkiWdsvdXPxP> ziJoD+K7Y}I1v#Sj{Vpp~2UbBF8!U9-(QLf>4*;&vXgRhJ3hp$XR=EmRUbLuGD5;5r{xdWs%zPApteUz@sB)tIo2o?S@j@qEfl@(`kYyQtkY92uo)x9>+f9jyR z-u;%mv|da7bzslQaLCcTEr_nmA#Geiut{-0J}R^<+xu>V=^Qg^>DkBGqE+YlXp{|n zAObg@AR~=V_>*XrfXwH$bWo-^#^GH9^xp@|vOVuMXn+n;wLrd`v`|{gq|biaI&k%E zlBJIQ{Np|Dv|JsK^AVU%jac_NN_$Tpu5)thCLU>WaXj<}gTmB#H5P#9iRHl2p$=)UrKdgo0D z8cII>hrT)p{R2MfO*dkbI+fv-e_@?DU#zKkG5qV(hkx<(;j4)HDx$uMsIMaGtBCq4 sqP~i#uOjNJi27G=u5=5|}+%bp4lq0}Y=uwg3PC literal 0 HcmV?d00001 diff --git a/jekyll/assets/contributors/zyzs/avatar.webp b/jekyll/assets/contributors/zyzs/avatar.webp new file mode 100644 index 0000000000000000000000000000000000000000..f6e0a652bc8113508d0a3566792e4f0652babee1 GIT binary patch literal 13494 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 literal 0 HcmV?d00001