|
3 | 3 |
|
4 | 4 | from framework.im.adapter import IMAdapter |
5 | 5 | from framework.im.manager import IMManager |
6 | | -from framework.im.message import IMMessage |
| 6 | +from framework.im.message import IMMessage, MessageElement, TextMessage |
7 | 7 | from framework.im.sender import ChatSender |
8 | 8 | from framework.ioc.container import DependencyContainer |
9 | 9 | from framework.workflow.core.block import Block, Input, Output, ParamMeta |
@@ -53,9 +53,58 @@ def execute( |
53 | 53 | if not self.im_name: |
54 | 54 | adapter = self.container.resolve(IMAdapter) |
55 | 55 | else: |
56 | | - adapter = self.container.resolve(IMManager).get_adapter(self.im_name) |
| 56 | + adapter = self.container.resolve( |
| 57 | + IMManager).get_adapter(self.im_name) |
57 | 58 | loop: asyncio.AbstractEventLoop = self.container.resolve( |
58 | 59 | asyncio.AbstractEventLoop |
59 | 60 | ) |
60 | 61 | loop.create_task(adapter.send_message(msg, target or src_msg.sender)) |
61 | 62 | # return {"ok": True} |
| 63 | + |
| 64 | +# IMMessage 转纯文本 |
| 65 | + |
| 66 | + |
| 67 | +class IMMessageToText(Block): |
| 68 | + """IMMessage 转纯文本""" |
| 69 | + |
| 70 | + name = "im_message_to_text" |
| 71 | + container: DependencyContainer |
| 72 | + inputs = {"msg": Input("msg", "IM 消息", IMMessage, "IM 消息")} |
| 73 | + outputs = {"text": Output("text", "纯文本", str, "纯文本")} |
| 74 | + |
| 75 | + def execute(self, msg: IMMessage) -> Dict[str, Any]: |
| 76 | + return {"text": msg.content} |
| 77 | + |
| 78 | + |
| 79 | +# 纯文本转 IMMessage |
| 80 | +class TextToIMMessage(Block): |
| 81 | + """纯文本转 IMMessage""" |
| 82 | + |
| 83 | + name = "text_to_im_message" |
| 84 | + container: DependencyContainer |
| 85 | + inputs = {"text": Input("text", "纯文本", str, "纯文本")} |
| 86 | + outputs = {"msg": Output("msg", "IM 消息", IMMessage, "IM 消息")} |
| 87 | + |
| 88 | + def __init__(self, split_by: Annotated[Optional[str], ParamMeta(label="分段符")] = None): |
| 89 | + self.split_by = split_by |
| 90 | + |
| 91 | + def execute(self, text: str) -> Dict[str, Any]: |
| 92 | + if self.split_by: |
| 93 | + return {"msg": IMMessage(sender=ChatSender.get_bot_sender(), message_elements=[TextMessage(line) for line in text.split(self.split_by)])} |
| 94 | + else: |
| 95 | + return {"msg": IMMessage(sender=ChatSender.get_bot_sender(), message_elements=[TextMessage(text)])} |
| 96 | + |
| 97 | +# 补充 IMMessage 消息 |
| 98 | +class AppendIMMessage(Block): |
| 99 | + """补充 IMMessage 消息""" |
| 100 | + |
| 101 | + name = "concat_im_message" |
| 102 | + container: DependencyContainer |
| 103 | + inputs = { |
| 104 | + "base_msg": Input("base_msg", "IM 消息", IMMessage, "IM 消息"), |
| 105 | + "append_msg": Input("append_msg", "新消息片段", MessageElement, "新消息片段"), |
| 106 | + } |
| 107 | + outputs = {"msg": Output("msg", "IM 消息", IMMessage, "IM 消息")} |
| 108 | + |
| 109 | + def execute(self, base_msg: IMMessage, append_msg: MessageElement) -> Dict[str, Any]: |
| 110 | + return {"msg": IMMessage(sender=base_msg.sender, message_elements=base_msg.message_elements + [append_msg])} |
0 commit comments