From 2915a7fa75525828d26f88b671e051125414f537 Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Wed, 21 Oct 2026 00:44:05 -0400 Subject: [PATCH] Added readrow, saverow and filters to ensure deduplication --- plugins/rmass/actions/synapseassignavatar.py | 29 ++++++++++-- .../rmass/actions/synapseassignusername.py | 25 ++++++++++ plugins/rmass/actions/synapsecreatedmroom.py | 47 ++++++++++++++++++- plugins/rmass/actions/synapsepushmessages.py | 42 ++++++++++++++++- plugins/rmass/actions/synapseregister.py | 28 ++++++++++- 5 files changed, 163 insertions(+), 8 deletions(-) diff --git a/plugins/rmass/actions/synapseassignavatar.py b/plugins/rmass/actions/synapseassignavatar.py index bfacb1d..f8ebb84 100644 --- a/plugins/rmass/actions/synapseassignavatar.py +++ b/plugins/rmass/actions/synapseassignavatar.py @@ -6,14 +6,12 @@ kind = "action" showstatus = True -#astoken = os.environ["AS_TOKEN"] - resolve = { "get": { "sender": ["messageheaders", "userCard", "id"], "avatar": ["uploadimage"], "username": ["messageheaders", "userCard", "username"], - #"username": ["pullmessages", 0, "userCard", "username"], + "avatar_hash": ["useravatar_hash"], }, "construct": { "matrixuser": [ @@ -50,3 +48,28 @@ headers = { "Content-Type": "application/json", } +readrow = { + "table": "user_profiles", + "columns": [ + {"rmass_user_id": "INTEGER PRIMARY KEY"}, + {"rmass_username": "TEXT NOT NULL UNIQUE"}, + {"rmass_dm_room": "TEXT NOT NULL UNIQUE"}, + {"rmass_avatar_hash": "TEXT"}, + ], + "searchcolumn": "rmass_avatar_hash", + "rowsearchvalue": [ + {"resolved": "avatar_hash"}, + {"resolved": "sender"}, + ], + "columnnumber": 3, +} + +filters = [ + { + "filterkey": "avatar_hash", + "operator": "==", + "filtervalue": {"outputs": "databasetarget"}, + "print": "User avatar up to date. Continuing...", + }, +] + diff --git a/plugins/rmass/actions/synapseassignusername.py b/plugins/rmass/actions/synapseassignusername.py index de0e735..6e7b182 100644 --- a/plugins/rmass/actions/synapseassignusername.py +++ b/plugins/rmass/actions/synapseassignusername.py @@ -33,6 +33,8 @@ keys = [ }, ] +isrequest = True + method = "PUT" path = [ @@ -50,3 +52,26 @@ headers = { "Content-Type": "application/json", } +readrow = { + "table": "user_profiles", + "columns": [ + {"rmass_user_id": "INTEGER PRIMARY KEY"}, + {"rmass_username": "TEXT NOT NULL UNIQUE"}, + {"rmass_dm_room": "TEXT NOT NULL UNIQUE"}, + {"rmass_avatar_hash": "TEXT"}, + ], + "searchcolumn": "rmass_username", + "rowsearchvalue": [ + {"resolved": "username"}, + ], + "columnnumber": 1, +} + +filters = [ + { + "filterkey": "username", + "operator": "==", + "filtervalue": {"outputs": "databasetarget"}, + "print": "Username up to date. Continuing...", + }, +] \ No newline at end of file diff --git a/plugins/rmass/actions/synapsecreatedmroom.py b/plugins/rmass/actions/synapsecreatedmroom.py index 63560f4..7a65c85 100644 --- a/plugins/rmass/actions/synapsecreatedmroom.py +++ b/plugins/rmass/actions/synapsecreatedmroom.py @@ -10,7 +10,6 @@ resolve = { "get": { "sender": ["messageheaders", "userCard", "id"], "location": ["profile", "location"], - #"username": ["messageheaders", "username"], "username": ["messageheaders", "userCard", "username"], }, "construct": { @@ -59,7 +58,10 @@ keys = [ }, { "keytitle": "invite", - "keyvalue": ["@lyncoln:loxthelion.com"], + "keyvalue": [ + "@lyncoln:loxthelion.com", + #"@rmass_bridge:loxthelion.com", + ], }, #{ #"keytitle": "power_level_content_override", @@ -91,3 +93,44 @@ headers = { outputs = { "room_id": "room_id", } + + +saverow = { + "table": "user_profiles", + "columns": [ + {"rmass_user_id": "INTEGER PRIMARY KEY"}, + {"rmass_username": "TEXT NOT NULL UNIQUE"}, + {"rmass_dm_room": "TEXT NOT NULL UNIQUE"}, + {"rmass_avatar_hash": "TEXT"}, + ], + "rowitems": [ + {"resolved": "sender"}, + {"resolved": "username"}, + {"resolved": "matrixdm"}, + {"outputs" : "useravatar_hash"}, + ], +} + +readrow = { + "table": "user_profiles", + "columns": [ + {"rmass_user_id": "INTEGER PRIMARY KEY"}, + {"rmass_username": "TEXT NOT NULL UNIQUE"}, + {"rmass_dm_room": "TEXT NOT NULL UNIQUE"}, + {"rmass_avatar_hash": "TEXT"}, + ], + "searchcolumn": "rmass_dm_room", + "rowsearchvalue": [ + {"resolved": "matrixdm"}, + ], + "columnnumber": 2, +} + +filters = [ + { + "filterkey": "matrixdm", + "operator": "==", + "filtervalue": {"outputs": "databasetarget"}, + "print": "DM Room already created. Continuing...", + }, +] diff --git a/plugins/rmass/actions/synapsepushmessages.py b/plugins/rmass/actions/synapsepushmessages.py index 1d5867b..312535b 100644 --- a/plugins/rmass/actions/synapsepushmessages.py +++ b/plugins/rmass/actions/synapsepushmessages.py @@ -1,4 +1,4 @@ -#import os +from . import synapsenotify name = "Synapse Message Push" @@ -34,6 +34,8 @@ resolve = { }, } +isrequest = True + keys = [ { "keytitle": "msgtype", @@ -85,4 +87,42 @@ headers = { "Content-Type": "application/json", } +outputs = { + "event_id": "event_id" +} + +saverow = { + "table": "message_mapping", + "columns": [ + {"rmass_message_id": "INTEGER PRIMARY KEY"}, + {"matrix_event_id": "TEXT NOT NULL UNIQUE"}, + ], + + "rowitems": [ + {"resolved": "message_id"}, + {"outputs": "event_id"}, + ], +} + +readrow = { + "table": "message_mapping", + "columns": [ + {"rmass_message_id": "INTEGER PRIMARY KEY"}, + {"matrix_event_id": "TEXT NOT NULL UNIQUE"}, + ], + "searchcolumn": "rmass_message_id", + "rowsearchvalue": [ + {"resolved": "message_id"}, + ], + "columnnumber": 0, +} + +filters = [ + { + "filterkey": "message_id", + "operator": "==", + "filtervalue": {"outputs": "databasetarget"}, + "print": "Message already forwarded. Continuing...", + }, +] diff --git a/plugins/rmass/actions/synapseregister.py b/plugins/rmass/actions/synapseregister.py index eda2b22..fbb82d9 100644 --- a/plugins/rmass/actions/synapseregister.py +++ b/plugins/rmass/actions/synapseregister.py @@ -9,9 +9,7 @@ showstatus = True resolve = { "get": { "sender": ["messageheaders", "userCard", "id"], - #"sender": ["pullmessages", 0, "userCard", "id"], "username": ["messageheaders", "userCard", "username"], - #"username": ["pullmessages", 0, "userCard", "username"], } } keys = [ @@ -32,6 +30,8 @@ keys = [ }, ] +isrequest = True + method = "POST" path = "https://loxthelion.com/_matrix/client/v3/register" @@ -47,3 +47,27 @@ headers = { outputs = { "user_id": "user_id", } + +readrow = { + "table": "user_profiles", + "columns": [ + {"rmass_user_id": "INTEGER PRIMARY KEY"}, + {"rmass_username": "TEXT NOT NULL UNIQUE"}, + {"rmass_dm_room": "TEXT NOT NULL UNIQUE"}, + {"rmass_avatar_hash": "TEXT"}, + ], + "searchcolumn": "rmass_user_id", + "rowsearchvalue": [ + {"resolved": "sender"}, + ], + "columnnumber": 0, +} + +filters = [ + { + "filterkey": "sender", + "operator": "==", + "filtervalue": {"outputs": "databasetarget"}, + "print": "User already registered. Continuing...", + }, +] \ No newline at end of file