dispatcher
feishu.events.dispatcher
¶
EventDispatcher
¶
将飞书事件按类型分发给已注册的异步处理函数。
通过 on 装饰器按事件类型注册处理函数,
使用 "*" 注册可匹配所有事件的兜底处理函数。
dispatch 会先运行精确匹配的处理函数,
再运行兜底处理函数。
单个处理函数抛出的异常会被捕获并记录,不会中断其余处理函数(含 "*" 兜底);可通过
on_error 注册全局异常处理函数集中上报。
若构造时传入 SeenStore,分发前会基于 Event.event_id 去重,避免飞书重试导致重复处理。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
SeenStore | None
|
事件去重存储;为 |
None
|
|
Logger | None
|
处理函数异常的日志器;缺省使用名为 |
None
|
飞书文档
示例:
源代码位于: feishu/events/dispatcher.py
| Python | |
|---|---|
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | |
on
¶
on(event_type: str) -> Callable[[Handler], Handler]
注册指定事件类型的处理函数(装饰器)。
同一类型可注册多个处理函数,按注册顺序执行。使用 "*" 注册兜底处理函数,
它会在所有事件的精确匹配处理函数之后执行。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
事件类型,如 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Callable[[Handler], Handler]
|
接收处理函数并将其注册的装饰器;原函数会被原样返回。 |
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/events/dispatcher.py
on_error
¶
on_error(handler: ErrorHandler) -> ErrorHandler
注册全局异常处理函数(仿 Slack Bolt 的 @app.error)。
当任一事件处理函数抛出异常时,框架会先记录日志,再调用此处理函数用于集中上报或返回兜底结果。
处理函数接收异常与对应事件;若其返回非 None 值且本次分发尚无其他结果,则作为返回值
(例如卡片回调可借此返回错误 toast)。后注册的会覆盖先注册的。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ErrorHandler
|
形如 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ErrorHandler
|
原处理函数(便于作装饰器使用)。 |
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/events/dispatcher.py
dispatch
async
¶
将事件分发给匹配的处理函数并返回结果。
先执行与 event.event_type 精确匹配的处理函数,
再执行以 "*" 注册的兜底处理函数。若配置了去重存储且事件已处理过,则直接返回 None,
不执行任何处理函数。
单个处理函数抛出的异常会被捕获、记录,并交由可选的全局异常处理函数处理,随后继续执行其余 处理函数,确保一个出错的处理函数不会中断其他处理函数或丢失卡片回调的 ACK。
返回值取第一个非 None 的处理函数结果,通常用于卡片回调返回 {"toast": ..., "card": ...}。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Event
|
待分发的事件。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
dict | None
|
首个非 |
示例: