/This is a squash-commit - the following is a rough summary of all sub-commits, written in style of commit messages (not necessarily those commits themselves), ie. short and in present tense./
* Document design choice to not bridge Discord threads as Matrix threads [by directly quoting Cadence]
* Alter thread-to-announcement, so that it replies in-thread [with this, Matrix users will get a list of almost all (exl. those that don't branch from anything) open threads on a given channel, whereas before it wasn't possible. Also features slight alterations to the text]
* Notify the user, whenever an in-thread message on Matrix is sent, that this isn't how they're supposed to do threads on OOYE
* Detect /thread being ran as a reply or in-thread to branch the thread from the relevant message
* Handle various /thread errors [notably being ran without args (infer the title if ran in the context above, simply show help if not)]
* Whenever possible, direct the user to an already-existing thread-room [if /thread was ran as a reply or in-thread, or as part of the notification mentioned in point 3 (feat. a new utility method)]
AUXILIARY TYPE CHANGES (not always relevant to UX-improvement-related changes):
* Fix „boolean” being referred to as „bool” in types.d.ts
* Rename execute(event) in matrix-command-handler is now parseAndExecute(event) [and it is no longer of type CommandExecute, but has its own custom definition, because a) it has a different return now (returns what command was ran (needed for point 3 in section above) instead of always undefined and b) other params from CommandExecute (like ctx or words) weren't being used - quite the contrary, their values were only being created at that stage (as part of command parsing - hence the rename, too), so telling that they're values you pass into execute() was at least somewhat confusing]
* Further narrow-down the type of guard() in m2d event-dispatcher
TEST CHANGES:
* Create 7 new tests, all pass
* Update 4 existing threads, all pass
* Pass all other relevant tests [and almost all other tests, too - there are some issues with event2message for stickers, but given the fact that this commit does not touch the stickers subsystem in any way at all, it does not seem like they are any way related to my changes and they must've been failing before]
* Do extensive manual testing and debugging
Co-authored-by: Guzio <guzekk@protonmail.com>
Co-committed-by: Guzio <guzekk@protonmail.com>
* To better reflect reality ("m.in_reply_to" will not always be present - it's not (always?) found on "rel_type":"m.replace" relation-events)
* To support "rel_type":"m.replace" relation-events (added "m.replace" option to existing key "rel_type" and a new "is_falling_back" key)
AFFECTED TYPES: M_Room_Message, M_Room_Message_File, M_Room_Message_Encrypted_File
BREAKS: Nothing, as .d.ts files don't affect buisness logic. In terms of lint errors: Marking "m.in_reply_to" as optional is indeed technically a "breaking change" (TypeScript may complain about „is probably undefined” in places where it didn't before), but from early "testing" (ie. looking at VSCode's errors tab), it doesn't seem like anything broke, as no file that imports any of those 3 types (Or their Outer_ counterparts) has „lit up” with errors (unless I missed something). There was one type error found in m2d/converters/event-to-message.js, at line 1009, but that seemed unrelated to types.d.ts - nevertheless, that error was also corrected in this commit, by adding proper type annotations somewhere else in the affected file.
* The guard() function in m2d/event-dispatcher.js no longer takes (any, any), but a string and a function.
* m2d/send-event.js no longer complains that res.body has some missing fields. It would appear as though those missing fields weren't revelant to the fromWeb() function (into which res.body is passed), given that this code worked before and still contunes to work, so I just @ts-ignore'd res.body
This commit's developer's off-topic personal comment, related to this commit: This has nothing to do with improving thread UX, even tho this is what I was supposed to work on. However, in my attempts to discover in what file should I start, I stumbled upon those errors from m2d/send-event.js, so I fixed them. And after establishing that m2d/event-dispatcher.js is the file that I'm looking for, I also noticed that guard()'s @parm definitions could be improved, so I did that. Now - back to thread work...
- Autojoined child spaces are recorded as invited
- Update entry when reinvited
- Delete entry when uninvited or removed from room
- Allow linking with spaces you moderate, even if you didn't invite
- Store power levels immediately for new invited rooms
- Mark members as missing profile in this case
- Only delete from invite table if it left the space
Squashed commit of the following:
commit bd9fd5cd3c
Author: Elliu <elliu@hashi.re>
Date: Sat Nov 15 15:32:18 2025 +0900
Revert "fix matrix / db resource cleanup on space unlink"
This reverts commit ccc10564f1.
commit eec5592938
Author: Cadence Ember <cadence@disroot.org>
Date: Sat Nov 8 13:01:59 2025 +1300
Dependency inject snow for testing
commit b45eeb150e
Author: Elliu <elliu@hashi.re>
Date: Wed Nov 5 00:20:20 2025 +0900
manually revert 3597a3b: "Factorize some of the space link/unlink sanity checks"
commit 0f2e575df2
Author: Elliu <elliu@hashi.re>
Date: Wed Nov 5 00:04:38 2025 +0900
on unbriding room, also demote powel level of bridge user in matrix room
commit ccc10564f1
Author: Elliu <elliu@hashi.re>
Date: Wed Nov 5 00:04:13 2025 +0900
fix matrix / db resource cleanup on space unlink
commit f4c1ea7c7f
Author: Elliu <elliu@hashi.re>
Date: Tue Nov 4 23:54:41 2025 +0900
/unlink-space: properly leave guild and clean DB
commit 5f0ec3b2c8
Author: Cadence Ember <cadence@disroot.org>
Date: Sun Nov 2 22:31:14 2025 +1300
Improve HTML to a state I'm happy with
commit 16309f26b3
Author: Elliu <elliu@hashi.re>
Date: Sat Nov 1 22:24:51 2025 +0900
add tests from /unlink-space endpoint
commit 5aff6f9048
Author: Elliu <elliu@hashi.re>
Date: Sat Sep 6 20:05:18 2025 +0900
Add /api/unlink-space implementation
commit dfc61594f6
Author: Elliu <elliu@hashi.re>
Date: Sat Sep 6 19:59:44 2025 +0900
Extract /api/unlink code to its own function
commit 3597a3b5ce
Author: Elliu <elliu@hashi.re>
Date: Sat Sep 6 19:28:42 2025 +0900
Factorize some of the space link/unlink sanity checks
commit 05d788e263
Author: Elliu <elliu@hashi.re>
Date: Sat Sep 6 18:23:01 2025 +0900
Add button to unlink a space
Co-authored-by: Cadence Ember <cadence@disroot.org>
First time a PK member sends a message in the channel, Discord sends a
MESSAGE_UPDATE with the proper avatar data for them. OOYE's speedbump
means sending this message will actually take the edit message path.
The edit message path previously did not force a profile sync. This is
why the Matrix profile did always show up after their second message,
because that message was not updated and took the send path.
Right now this doesn't seem to show up on any clients because extensible
events is a total mess, but if you did want to code a client that shows
this fallback without bothering to code real support for polls, you are
easily able to do that. Just pretend the poll end event is a
m.room.message and render it like usual.