|
48 | 48 | MessagesFlagChange, |
49 | 49 | PrivateComposition, |
50 | 50 | PrivateMessageUpdateRequest, |
| 51 | + ReactionEvent, |
51 | 52 | RealmEmojiData, |
52 | 53 | RealmUser, |
53 | 54 | StreamComposition, |
@@ -479,18 +480,22 @@ def has_user_reacted_to_message(self, message: Message, *, emoji_code: str) -> b |
479 | 480 | for reaction in message["reactions"]: |
480 | 481 | if reaction["emoji_code"] != emoji_code: |
481 | 482 | continue |
482 | | - # The reaction.user_id field was added in Zulip v3.0, ZFL 2 so we need to |
483 | | - # check both the reaction.user.{user_id/id} fields too for pre v3 support. |
484 | | - user = reaction.get("user", {}) |
485 | | - has_user_reacted = ( |
486 | | - user.get("user_id", None) == self.user_id |
487 | | - or user.get("id", None) == self.user_id |
488 | | - or reaction.get("user_id", None) == self.user_id |
489 | | - ) |
490 | | - if has_user_reacted: |
| 483 | + user_id = self.get_user_id_from_reaction(reaction) |
| 484 | + if user_id == self.user_id: |
491 | 485 | return True |
492 | 486 | return False |
493 | 487 |
|
| 488 | + def get_user_id_from_reaction( |
| 489 | + self, reaction: Union[Dict[str, Any], ReactionEvent] |
| 490 | + ) -> int: |
| 491 | + # The reaction.user_id field was added in Zulip v3.0, ZFL 2 so we need to |
| 492 | + # check both the reaction.user.{user_id/id} fields too for pre v3 support. |
| 493 | + user = reaction.get("user", {}) |
| 494 | + assert isinstance(user, dict) |
| 495 | + user_id = user.get("id") or user.get("user_id") or reaction.get("user_id") |
| 496 | + assert isinstance(user_id, int) |
| 497 | + return user_id |
| 498 | + |
494 | 499 | def session_draft_message(self) -> Optional[Composition]: |
495 | 500 | return deepcopy(self._draft) |
496 | 501 |
|
@@ -1859,16 +1864,8 @@ def _handle_reaction_event(self, event: Event) -> None: |
1859 | 1864 | message["reactions"].append(reactions_entry) |
1860 | 1865 | else: |
1861 | 1866 | for reaction in message["reactions"]: |
1862 | | - reaction_user_id = ( |
1863 | | - reaction["user"]["id"] |
1864 | | - if "user" in reaction |
1865 | | - else reaction["user_id"] |
1866 | | - ) |
1867 | | - event_user_id = ( |
1868 | | - event["user"]["user_id"] |
1869 | | - if event.get("user") and isinstance(event["user"], dict) |
1870 | | - else event["user_id"] |
1871 | | - ) |
| 1867 | + reaction_user_id = self.get_user_id_from_reaction(reaction) |
| 1868 | + event_user_id = self.get_user_id_from_reaction(event) |
1872 | 1869 | if ( |
1873 | 1870 | reaction["emoji_code"] == event["emoji_code"] |
1874 | 1871 | and reaction_user_id == event_user_id |
|
0 commit comments