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:
|