summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard van der Hoff <1389908+richvdh@users.noreply.github.com>2023-02-15 11:47:57 +0000
committerGitHub <noreply@github.com>2023-02-15 11:47:57 +0000
commit5febf88b6c5194582f427142dc0850625547c0d9 (patch)
treee3a8c69949667254091f44dd50a2d104f264c933
parentFix order of partial state tables when purging (#15068) (diff)
downloadsynapse-5febf88b6c5194582f427142dc0850625547c0d9.tar.xz
Update the error code for duplicate annotation (#15075)
-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: