Sorry everyone I know how much you love the attention she gives you, but I’ve implemented some quick and dirty filtering for private messaging.

We now have the ability to automatically mark PM’s as deleted or read, depending on content inside of them. If we accidentally filter something you legitimately wanted (ie, not Nicole) please let me know.

If any other instances would like to implement this, here’s the code. Note that you’ll need to set your hostname at the top here for some reason I haven’t exactly identified.

SET lemmy.protocol_and_hostname = 'https://lemmy.ca/';

CREATE TABLE private_message_filters (
    id SERIAL PRIMARY KEY,
    phrase TEXT NOT NULL,
    behavior VARCHAR(10) NOT NULL CHECK (behavior IN ('delete', 'mark_read'))
);

CREATE OR REPLACE FUNCTION filter_private_messages()
RETURNS trigger AS $$
DECLARE
    banned_phrase_record private_message_filters%ROWTYPE;
BEGIN
    FOR banned_phrase_record IN 
        SELECT * FROM private_message_filters
    LOOP
        IF LOWER(TRIM(NEW.content)) ILIKE '%' || LOWER(TRIM(banned_phrase_record.phrase)) || '%' THEN
            IF banned_phrase_record.behavior = 'delete' THEN
                NEW.deleted := true;
                RETURN NEW;
            ELSIF banned_phrase_record.behavior = 'mark_read' THEN
                NEW.read := true;
                RETURN NEW;
            END IF;
        END IF;
    END LOOP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_filter_private_messages
AFTER INSERT ON private_message
FOR EACH ROW
EXECUTE FUNCTION filter_private_messages();

To add filter words:

insert into private_message_filters (behavior, phrase) values ('delete', 'spamtestdelete');
insert into private_message_filters (behavior, phrase) values ('mark_read', 'spamtestread');

If you want to quickly disable / enable filtering while testing:

ALTER TABLE private_message DISABLE TRIGGER trg_filter_private_messages;
ALTER TABLE private_message ENABLE TRIGGER trg_filter_private_messages;

I’ll leave it up to you to figure out what phrases to filter on. MAKE SURE YOU TEST. If there’s an error, private messaging could break completely. You should not get an error message from the UI while sending a message with a banned word.

      • ShadowOPMA
        link
        fedilink
        English
        arrow-up
        36
        ·
        4 days ago

        I actually only got one today for the very first time. I was insulted it took her so long to get to me, so I wrote this

        • fxomt@lemmy.dbzer0.com
          link
          fedilink
          English
          arrow-up
          4
          ·
          4 days ago

          I’ve only had one, and it was the first ever wave; for some reason, i never got another one. I scared her away :(

          • doingthestuff@lemy.lol
            link
            fedilink
            English
            arrow-up
            2
            ·
            2 days ago

            I got my third yesterday also. It’s not terribly annoying but I could see how spam messages could easily get out of hand.

    • lemmy689@lemmy.sdf.org
      link
      fedilink
      English
      arrow-up
      9
      ·
      edit-2
      4 days ago

      I love her, she loves me

      I’m her he, she’s my she

      Though for looks she’s only fair

      And her figure isn’t there

      Her figure is much bigger in the bank, well I declare

      Her papa, he has dough, he has dough, and

      And she’s his only child, and she’s awfully wild

      So I love her and she loves me