annotate libervia/backend/plugins/plugin_xep_0444.py @ 4094:c3b68fdc2de7

component AP gateway: fix handling of XMPP comments authors: the gateway was supposing that comments where emitted from PEP of author. While this is the case for most blog posts, it's not for comments. Instead the component is now using `author_jid` which is retrieved by XEP-0277 plugin, and reject the item if the auhor is not verified (i.e. if `publisher` attribute is not set by XMPP service).
author Goffi <goffi@goffi.org>
date Mon, 12 Jun 2023 14:50:43 +0200
parents 4b842c1fb686
children 04cdcb3fd713
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python3
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
2
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 # Libervia plugin for XEP-0444
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 from typing import List, Iterable
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from copy import deepcopy
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
21
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from twisted.words.protocols.jabber import jid, xmlstream
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from twisted.words.xish import domish
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from twisted.internet import defer
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from wokkel import disco, iwokkel
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from zope.interface import implementer
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
27
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4051
diff changeset
28 from libervia.backend.core.constants import Const as C
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4051
diff changeset
29 from libervia.backend.core.i18n import _
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4051
diff changeset
30 from libervia.backend.core.log import getLogger
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4051
diff changeset
31 from libervia.backend.core import exceptions
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4051
diff changeset
32 from libervia.backend.core.core_types import SatXMPPEntity
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4051
diff changeset
33 from libervia.backend.memory.sqla_mapping import History
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 log = getLogger(__name__)
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
36
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 PLUGIN_INFO = {
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 C.PI_NAME: "Message Reactions",
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 C.PI_IMPORT_NAME: "XEP-0444",
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 C.PI_TYPE: C.PLUG_TYPE_XEP,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 C.PI_MODES: C.PLUG_MODE_BOTH,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 C.PI_PROTOCOLS: ["XEP-0444"],
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 C.PI_DEPENDENCIES: ["XEP-0334"],
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 C.PI_MAIN: "XEP_0444",
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 C.PI_HANDLER: "yes",
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 C.PI_DESCRIPTION: _("""Message Reactions implementation"""),
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 }
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
48
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 NS_REACTIONS = "urn:xmpp:reactions:0"
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
50
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
51
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 class XEP_0444:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
53
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 def __init__(self, host):
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 log.info(_("Message Reactions initialization"))
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
56 host.register_namespace("reactions", NS_REACTIONS)
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 self.host = host
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 self._h = host.plugins["XEP-0334"]
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
59 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
60 "message_reactions_set",
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
61 ".plugin",
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 in_sign="ssas",
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 out_sign="",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
64 method=self._reactions_set,
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 async_=True,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 )
4051
c23cad65ae99 core: renamed `messageReceived` trigger to `message_received`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
67 host.trigger.add("message_received", self._message_received_trigger)
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
68
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
69 def get_handler(self, client):
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 return XEP_0444_Handler()
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
71
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
72 async def _message_received_trigger(
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 self,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 client: SatXMPPEntity,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 message_elt: domish.Element,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 post_treat: defer.Deferred
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 ) -> bool:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 return True
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
79
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
80 def _reactions_set(self, message_id: str, profile: str, reactions: List[str]) -> None:
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
81 client = self.host.get_client(profile)
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 return defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
83 self.set_reactions(client, message_id)
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 )
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
85
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
86 def send_reactions(
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 self,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 client: SatXMPPEntity,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 dest_jid: jid.JID,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 message_id: str,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 reactions: Iterable[str]
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 ) -> None:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 """Send the <message> stanza containing the reactions
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
94
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 @param dest_jid: recipient of the reaction
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 @param message_id: either <origin-id> or message's ID
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 see https://xmpp.org/extensions/xep-0444.html#business-id
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 """
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
99 message_elt = domish.Element((None, "message"))
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
100 message_elt["from"] = client.jid.full()
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
101 message_elt["to"] = dest_jid.full()
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
102 reactions_elt = message_elt.addElement((NS_REACTIONS, "reactions"))
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
103 reactions_elt["id"] = message_id
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
104 for r in set(reactions):
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 reactions_elt.addElement("reaction", content=r)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
106 self._h.add_hint_elements(message_elt, [self._h.HINT_STORE])
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 client.send(message_elt)
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
108
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
109 async def add_reactions_to_history(
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 self,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
111 history: History,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
112 from_jid: jid.JID,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 reactions: Iterable[str]
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 ) -> None:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
115 """Update History instance with given reactions
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
116
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 @param history: storage History instance
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 will be updated in DB
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 "summary" field of history.extra["reactions"] will also be updated
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 @param from_jid: author of the reactions
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 @param reactions: list of reactions
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
122 """
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
123 history.extra = deepcopy(history.extra) if history.extra else {}
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 h_reactions = history.extra.setdefault("reactions", {})
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 # reactions mapped by originating JID
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 by_jid = h_reactions.setdefault("by_jid", {})
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 # reactions are sorted to in summary to keep a consistent order
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 h_reactions["by_jid"][from_jid.userhost()] = sorted(list(set(reactions)))
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 h_reactions["summary"] = sorted(list(set().union(*by_jid.values())))
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 await self.host.memory.storage.session_add(history)
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
131
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
132 async def set_reactions(
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
133 self,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
134 client: SatXMPPEntity,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 message_id: str,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
136 reactions: Iterable[str]
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 ) -> None:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 """Set and replace reactions to a message
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
139
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
140 @param message_id: internal ID of the message
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
141 @param rections: lsit of emojis to used to react to the message
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
142 use empty list to remove all reactions
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
143 """
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
144 if not message_id:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
145 raise ValueError("message_id can't be empty")
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
146 history = await self.host.memory.storage.get(
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
147 client, History, History.uid, message_id,
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
148 joined_loads=[History.messages, History.subjects]
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
149 )
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
150 if history is None:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
151 raise exceptions.NotFound(
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
152 f"message to retract not found in database ({message_id})"
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 )
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
154 mess_id = history.origin_id or history.stanza_id
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 if not mess_id:
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
156 raise exceptions.DataError(
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 "target message has neither origin-id nor message-id, we can't send a "
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 "reaction"
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
160 await self.add_reactions_to_history(history, client.jid, reactions)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3886
diff changeset
161 self.send_reactions(client, history.dest_jid, mess_id, reactions)
3886
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
162
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
163
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 @implementer(iwokkel.IDisco)
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 class XEP_0444_Handler(xmlstream.XMPPHandler):
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
166
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 def getDiscoInfo(self, requestor, service, nodeIdentifier=""):
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 return [disco.DiscoFeature(NS_REACTIONS)]
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
169
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
170 def getDiscoItems(self, requestor, service, nodeIdentifier=""):
1f88ca90c3de plugin XEP-0444: Message Reactions implementation:
Goffi <goffi@goffi.org>
parents:
diff changeset
171 return []