@@ -146,26 +146,43 @@ async def get_dynamics(page: int = 1) -> Dynamics:
146146
147147
148148async def broadcast (dynamic : Dynamic ):
149+ uids = {str (dynamic ["modules" ]["module_author" ]["mid" ])}
150+
151+ if dynamic ["type" ] in (
152+ "DYNAMIC_TYPE_DRAW" ,
153+ "DYNAMIC_TYPE_WORD" ,
154+ "DYNAMIC_TYPE_FORWARD" ,
155+ ):
156+ if dynamic ["type" ] == "DYNAMIC_TYPE_FORWARD" :
157+ nodes = dynamic ["modules" ]["module_dynamic" ]["desc" ]["rich_text_nodes" ]
158+ else :
159+ nodes = dynamic ["modules" ]["module_dynamic" ]["major" ]["opus" ]["summary" ][
160+ "rich_text_nodes"
161+ ]
162+
163+ for node in nodes :
164+ if node ["type" ] == "RICH_TEXT_NODE_TYPE_AT" :
165+ uids .add (node ["rid" ])
166+
167+ sessions = {sub .session for uid in uids for sub in dynamic_subs .get (uid , ())}
168+
169+ if not sessions :
170+ return
171+
149172 screenshot , url = await gather (
150173 render_screenshot (dynamic ),
151174 get_share_click (dynamic ["id_str" ], "dynamic" , "dt.dt-detail.0.0.pv" ),
152175 )
153- await gather (
154- * [
155- send_message (
156- sub .session .session ,
157- plugin_config .template .format (
158- name = dynamic ["modules" ]["module_author" ]["name" ],
159- action = dynamic ["modules" ]["module_author" ]["pub_action" ]
160- or plugin_config .types [dynamic ["type" ]],
161- screenshot = Image (raw = screenshot ),
162- url = url ,
163- ),
164- )
165- for sub in dynamic_subs [str (dynamic ["modules" ]["module_author" ]["mid" ])]
166- ]
176+ message = plugin_config .template .format (
177+ name = dynamic ["modules" ]["module_author" ]["name" ],
178+ action = dynamic ["modules" ]["module_author" ]["pub_action" ]
179+ or plugin_config .types [dynamic ["type" ]],
180+ screenshot = Image (raw = screenshot ),
181+ url = url ,
167182 )
168183
184+ await gather (* (send_message (sess .session , message ) for sess in sessions ))
185+
169186
170187@backoff .on_exception (backoff .constant , TimeoutError , max_tries = 3 )
171188async def render_screenshot (dynamic : Dynamic ) -> bytes :
0 commit comments