pieartsy 2b31cc2ae9 perf: Merge develop into main (#36)
* Update dockerfile for standalone deployment (#23)

* Add files via upload

* Update Docker image for pluralflux service

* removing unnecessary network and container name definitions

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* Converting ES6 back to CJS (#25)

converting back to cjs

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* Fix: Further converting ES6 to CJS - Making exports named instead of default (#26)

* adding to git ignore

* making imports named not default to not break all my tests

* adjusted setup for memberhelper test

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* feat: add db migrations with typeORM (#28)

* adding typescript packages for typeORM

* add typeORM initial files

* updating package scripts

* updating compose.yaml to have an exposed port for the postgres

* modifying setup for typeORM

* update database stuff and and package.json to help generate migrations

* made models and migrations in typeORM

* delete unneeded database.js

* made database pattern ignored by jest

* remove sequelize

* separate member repo from member helper

* not sure why i made everything numbers in the model but it's fixed now

* edited package.json script

* remove unused index.ts

* adjusted files to reference repository correctly and appdatasource

* made appdatasource export as named

* removed start-db script

* added init to appdatasource in bot.js

* migrations finally!

* new migration matching model names I want

* updating tests

* removing testpathignore patterns since it seems to be unecessary?

* adjusting migrations to match current schema

* removed reference to secrets file

* delete old migration

* Revert "delete old migration"

This reverts commit db1efa39a7a80d8976878856250ccaac6a753ab2.

* Revert "adjusting migrations to match current schema"

This reverts commit ef89a83f6a2ef0643d6ace0a3fcf9c40f4bc6dd6.

* just deleted system creation since it's got nothing in it anyway

* renamed memberRepository to memberRepo for consistency

* added await back to parseMemberCommand call to memberArgumentHandler

* changed call to memberHelper.getMembersByAuthor to memberRepo

* renamed repo updateMemberValue to updateMemberField

* removed throw references in repo docstrings

* remove unneeded subscriber directory ref

* changed createdAt and updatedAt columns to be auto-generated

made member table have timezone

* changed casing of isInitialized in mock for bot.js

* removed % from ILike query so that it doesn't match substrings/wildcard

* renamed some stray updateMemberValue in mocks -> updateMemberField

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* feat: Add migration to migrate existing data to new member table (#29)

added migration to fill new Member table with data from Members

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* fix: update message helper reference hotfix (#30)

* forgot to update a reference in messageHelper to memberRepo instead of memberHelper

* turned off data-source logging

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* fix: update dockerfile to run npm start (#31)

fix: update dockerfile to run npm start (which runs ts-node) instead of node

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* added .env with examples, updated data-source to be access a docker container instead of relying on loopback

* i forgot to git add data-source.ts 🤦

* fix: changed property reference for createMember in repo (#32)

fix for createMember object references (was referencing non-existent properties)

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* fix: memberRepo methods syntax (#35)

* rearranged update member field and remove member to match expected structure in typeORM

* update docstring

* change insert to save in memberRepo

* added command in package.json

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* Delete duplicate members migration (#33)

* add migration to delete duplicates that currently exist in the db

* added a name attribute for consistency

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* Add unique index migration (#34)

* add migration to delete duplicates that currently exist in the db

* change model and migration to add a unique index constraint to id and name

* renamed unique index name to be readable

* redid model and migration to use @Unique instead of @Index

* remove //Here comment

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>

* why wont these workflows stay up gahdamn

---------

Co-authored-by: Laika Bozhko <63646916+LaikaBzko@users.noreply.github.com>
Co-authored-by: Aster Fialla <asterfialla@gmail.com>
Co-authored-by: laika <laika@sanya.gay>
2026-03-09 09:00:15 -04:00
2026-03-09 09:00:15 -04:00
2026-03-09 09:00:15 -04:00
2026-02-24 12:42:23 -05:00
2026-02-24 12:42:23 -05:00
2026-03-09 09:00:15 -04:00
2026-02-24 09:16:55 -05:00
2026-03-09 09:00:15 -04:00
2026-02-22 11:57:12 -05:00
2026-02-24 12:42:23 -05:00

PluralFlux

PluralFlux is a proxybot akin to PluralKit and Tupperbox, but for Fluxer. It is written with the Fluxer.js library.

Invite it to your server.

Join the support server

Sponsor the project

If it's not running at the moment, it's because my computer crashed or something. I'm looking to move running it to a somewhat more permanent solution.

Commands

All commands are prefixed by pf;. Currently only a few are implemented.

  • pf;help - Sends the current list of commands.

  • pf;import - Imports from PluralKit using the JSON file provided by their export command. Importing from other proxy bots is TBD. pf;import and attach your JSON file to the message. This will only save the fields that are present in the bot currently, not anything else like birthdays or system handles (yet?). Only one proxy can be set per member currently."

  • pf;member - Accesses the sub-commands related to editing proxy members. The available subcommands are:

    • new - Creates a new member to proxy with, for example: pf;member new jane. The member name should ideally be short so you can write other commands with it easily. The order of values is pf;member new [name] [displayname] [proxy] [propic], without brackets. The name is required, but the rest are optional. Usage notes:

      • If anything has spaces, put it in quotes: "Jane Doe"
      • If anything is unset, and you want to set something after it (for ex: you haven't set a display name, but you want to add a proxy), put the unset value in empty quotes in the same position: "" If you leave it out, the bot will set things wrong.
      • The maximum length of a display name is 32 characters.
      • You can't use the same proxy for two different members.
      • You can also upload an image directly instead of using a url. Examples:
      • Full example: pf;member new jane "Jane Doe" J:text https://cdn.pixabay.com/photo/2023/10/20/19/07/aster-8330078_1280.jpg
      • Example with gaps: `pf;member new bob "Bob he/him" "" https://cdn.pixabay.com/photo/2016/05/09/11/09/tennis-1381230_1280.jpg
    • remove - Removes a member based on their name, for example: pf;member remove jane.

    • name - Updates the name for a specific member based on their current name, for ex: pf;member john name jane. The member name should ideally be short so you can write other commands with it easily.

    • list - Lists all members in the system.

    • displayname - Updates the display name for a specific member based on their name, for example: pf;member jane "Jane Doe | ze/hir".This can be up to 32 characters long. If it has spaces, put it in double quotes.

    • propic - Updates the profile picture for the member. Must be in JPG, PNG, or WEBP format and less than 10MB. The two options are:

      1. Pass in a direct remote image URL, for example: pf;member jane propic <https://cdn.pixabay.com/photo/2020/05/02/02/54/animal-5119676_1280.jpg>. You can upload images on sites like https://imgbb.com/.
      2. Upload an attachment directly. NOTE: Fluxer does not save your attachments forever, so option #1 is recommended.
    • proxy Updates the proxy tag for a specific member based on their name. The proxy must be formatted with the tags surrounding the word 'text', for example: pf;member jane proxy Jane:text or pf;member amal proxy A{text} This is so the bot can detect what the proxy tags are. Only one proxy can be set per member currently.

Upcoming

Check for, and add, feature requests in the Issues tracker.

LLM note

I do not use LLMs or other GenAI to generate code, nor do I ever plan to. Very rarely, I ask questions of LLMs to troubleshoot bugs after search engines/StackOverflow/friends' knowledge has failed me, but that should lessen even more over time. As well, I used the Docker "Gordon" LLM to fix the many errors in my initial docker compose, but now that I have a devops person helping me, that should never happen again.

Description
No description provided
Readme 828 KiB
Languages
JavaScript 96.9%
TypeScript 2.9%
Dockerfile 0.2%