summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/15075.feature2
-rw-r--r--synapse/api/errors.py4
-rw-r--r--synapse/handlers/message.py6
3 files changed, 11 insertions, 1 deletions
diff --git a/changelog.d/15075.feature b/changelog.d/15075.feature
new file mode 100644
index 0000000000..d25a7567a4
--- /dev/null
+++ b/changelog.d/15075.feature
@@ -0,0 +1,2 @@
+Update the error code returned when user sends a duplicate annotation.
+
diff --git a/synapse/api/errors.py b/synapse/api/errors.py
index 9235ce6536..e1737de59b 100644
--- a/synapse/api/errors.py
+++ b/synapse/api/errors.py
@@ -108,6 +108,10 @@ class Codes(str, Enum):
 
     USER_AWAITING_APPROVAL = "ORG.MATRIX.MSC3866_USER_AWAITING_APPROVAL"
 
+    # Attempt to send a second annotation with the same event type & annotation key
+    # MSC2677
+    DUPLICATE_ANNOTATION = "M_DUPLICATE_ANNOTATION"
+
 
 class CodeMessageException(RuntimeError):
     """An exception with integer code and message string attributes.
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index 8f5b658d9d..aa90d0000d 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -1337,7 +1337,11 @@ class EventCreationHandler:
                 relation.parent_id, event.type, aggregation_key, event.sender
             )
             if already_exists:
-                raise SynapseError(400, "Can't send same reaction twice")
+                raise SynapseError(
+                    400,
+                    "Can't send same reaction twice",
+                    errcode=Codes.DUPLICATE_ANNOTATION,
+                )
 
         # Don't attempt to start a thread if the parent event is a relation.
         elif relation.rel_type == RelationTypes.THREAD: