From 41cf118a248844c586197fb811c40f0db6c2e91d Mon Sep 17 00:00:00 2001
From: nexy7574 <git@nexy7574.co.uk>
Date: Wed, 23 Apr 2025 01:51:52 +0100
Subject: [PATCH 1/4] Inject reason into federated leave request membership

---
 src/api/client/membership.rs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/api/client/membership.rs b/src/api/client/membership.rs
index b1b85b81..2424fd3b 100644
--- a/src/api/client/membership.rs
+++ b/src/api/client/membership.rs
@@ -1855,7 +1855,7 @@ pub async fn leave_room(
 
 	// Ask a remote server if we don't have this room and are not knocking on it
 	if dont_have_room.and(not_knocked).await {
-		if let Err(e) = remote_leave_room(services, user_id, room_id).boxed().await {
+		if let Err(e) = remote_leave_room(services, user_id, room_id, reason.clone()).boxed().await {
 			warn!(%user_id, "Failed to leave room {room_id} remotely: {e}");
 			// Don't tell the client about this error
 		}
@@ -1940,6 +1940,7 @@ async fn remote_leave_room(
 	services: &Services,
 	user_id: &UserId,
 	room_id: &RoomId,
+	reason: Option<String>,
 ) -> Result<()> {
 	let mut make_leave_response_and_server =
 		Err!(BadServerResponse("No remote server available to assist in leaving {room_id}."));
@@ -2056,6 +2057,12 @@ async fn remote_leave_room(
 				.expect("Timestamp is valid js_int value"),
 		),
 	);
+	// Inject the reason key into the event content dict if it exists
+	if let Some(reason) = reason {
+		if let Some(CanonicalJsonValue::Object(content)) = leave_event_stub.get_mut("content") {
+			content.insert("reason".to_owned(), CanonicalJsonValue::String(reason));
+		}
+	}
 
 	// room v3 and above removed the "event_id" field from remote PDU format
 	match room_version_id {

From c842a1a5ffa218bbe7d3201cfe9653ab213e9613 Mon Sep 17 00:00:00 2001
From: nexy7574 <git@nexy7574.co.uk>
Date: Wed, 23 Apr 2025 17:21:59 +0100
Subject: [PATCH 2/4] Bump ruwuma to 652cc48

---
 Cargo.lock | 22 +++++++++++-----------
 Cargo.toml |  2 +-
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index afaa5622..216114af 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3652,7 +3652,7 @@ dependencies = [
 [[package]]
 name = "ruma"
 version = "0.10.1"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "assign",
  "js_int",
@@ -3672,7 +3672,7 @@ dependencies = [
 [[package]]
 name = "ruma-appservice-api"
 version = "0.10.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3684,7 +3684,7 @@ dependencies = [
 [[package]]
 name = "ruma-client-api"
 version = "0.18.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "as_variant",
  "assign",
@@ -3707,7 +3707,7 @@ dependencies = [
 [[package]]
 name = "ruma-common"
 version = "0.13.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "as_variant",
  "base64 0.22.1",
@@ -3739,7 +3739,7 @@ dependencies = [
 [[package]]
 name = "ruma-events"
 version = "0.28.1"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "as_variant",
  "indexmap 2.8.0",
@@ -3764,7 +3764,7 @@ dependencies = [
 [[package]]
 name = "ruma-federation-api"
 version = "0.9.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "bytes",
  "headers",
@@ -3786,7 +3786,7 @@ dependencies = [
 [[package]]
 name = "ruma-identifiers-validation"
 version = "0.9.5"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "js_int",
  "thiserror 2.0.12",
@@ -3795,7 +3795,7 @@ dependencies = [
 [[package]]
 name = "ruma-identity-service-api"
 version = "0.9.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3805,7 +3805,7 @@ dependencies = [
 [[package]]
 name = "ruma-macros"
 version = "0.13.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "cfg-if",
  "proc-macro-crate",
@@ -3820,7 +3820,7 @@ dependencies = [
 [[package]]
 name = "ruma-push-gateway-api"
 version = "0.9.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3832,7 +3832,7 @@ dependencies = [
 [[package]]
 name = "ruma-signatures"
 version = "0.15.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=fa3c868e5a1c049dc9472310dc4955289a96bb35#fa3c868e5a1c049dc9472310dc4955289a96bb35"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
 dependencies = [
  "base64 0.22.1",
  "ed25519-dalek",
diff --git a/Cargo.toml b/Cargo.toml
index 1517cfc1..c0f857c6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -350,7 +350,7 @@ version = "0.1.2"
 [workspace.dependencies.ruma]
 git = "https://forgejo.ellis.link/continuwuation/ruwuma"
 #branch = "conduwuit-changes"
-rev = "fa3c868e5a1c049dc9472310dc4955289a96bb35"
+rev = "652cc4864203ab7ca60cf9c47b931c0385304cc7"
 features = [
     "compat",
     "rand",

From 62d7c74c9e7b2123b6b0eb8308ea29aabac01eed Mon Sep 17 00:00:00 2001
From: Tom Foster <tom@tcpip.uk>
Date: Wed, 23 Apr 2025 22:47:45 +0100
Subject: [PATCH 3/4] Suggested community guidelines changes

---
 docs/SUMMARY.md       |   2 +-
 docs/community.md     | 139 ++++++++++++++++++++++++++++++++++++++++++
 docs/conduwuit_coc.md |  93 ----------------------------
 3 files changed, 140 insertions(+), 94 deletions(-)
 create mode 100644 docs/community.md
 delete mode 100644 docs/conduwuit_coc.md

diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index ad0f8135..473c9e74 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -19,4 +19,4 @@
   - [Contributing](contributing.md)
   - [Testing](development/testing.md)
   - [Hot Reloading ("Live" Development)](development/hot_reload.md)
-- [conduwuit Community Code of Conduct](conduwuit_coc.md)
+- [Community (and Guidelines)](community.md)
diff --git a/docs/community.md b/docs/community.md
new file mode 100644
index 00000000..a6852c0f
--- /dev/null
+++ b/docs/community.md
@@ -0,0 +1,139 @@
+# Continuwuity Community Guidelines
+
+Welcome to the Continuwuity commuwunity! We're excited to have you here. Continuwuity is a
+continuation of the conduwuit homeserver, which in turn is a hard-fork of the Conduit homeserver,
+aimed at making Matrix more accessible and inclusive for everyone.
+
+This space is dedicated to fostering a positive, supportive, and welcoming environment for everyone.
+These guidelines apply to all Continuwuity spaces, including our Matrix rooms and any other
+community channels that reference them. We've written these guidelines to help us all create an
+environment where everyone feels safe and respected.
+
+For code and contribution guidelines, please refer to the
+[Contributor's Covenant](https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CODE_OF_CONDUCT.md).
+Below are additional guidelines specific to the Continuwuity community.
+
+## Our Values and Expected Behaviors
+
+We strive to create a community based on mutual respect, collaboration, and inclusivity. We expect
+all members to:
+
+1. **Be Respectful and Inclusive**: Treat everyone with respect. We're committed to a community
+   where everyone feels safe, regardless of background, identity, or experience. Discrimination,
+   harassment, or hate speech won't be tolerated. Remember that each person experiences the world
+   differently; share your own perspective and be open to learning about others'.
+
+2. **Be Positive and Constructive**: Engage in discussions constructively and support each other.
+   If you feel angry or frustrated, take a break before participating. Approach disagreements with
+   the goal of understanding, not winning. Focus on the issue, not the person.
+
+3. **Communicate Clearly and Kindly**: Our community includes neurodivergent individuals and those
+   who may not appreciate sarcasm or subtlety. Communicate clearly and kindly. Avoid ambiguity and
+   ensure your messages can be easily understood by all. Avoid placing the burden of education on
+   marginalized groups; please make an effort to look into your questions before asking others for
+   detailed explanations.
+
+4. **Be Open to Improving Inclusivity**: Actively participate in making our community more inclusive.
+   Report behaviour that contradicts these guidelines (see Reporting and Enforcement below) and be
+   open to constructive feedback aimed at improving our community. Understand that discussing
+   negative experiences can be emotionally taxing; focus on the message, not the tone.
+
+5. **Commit to Our Values**: Building an inclusive community requires ongoing effort from everyone.
+   Recognise that addressing bias and discrimination is a continuous process that needs commitment
+   and action from all members.
+
+## Unacceptable Behaviors
+
+To ensure everyone feels safe and welcome, the following behaviors are considered unacceptable
+within the Continuwuity community:
+
+* **Harassment and Discrimination**: Avoid offensive comments related to background, family status,
+  gender, gender identity or expression, marital status, sex, sexual orientation, native language,
+  age, ability, race and/or ethnicity, caste, national origin, socioeconomic status, religion,
+  geographic location, or any other dimension of diversity. Don't deliberately misgender someone or
+  question the legitimacy of their gender identity.
+
+* **Violence and Threats**: Do not engage in any form of violence or threats, including inciting
+  violence towards anyone or encouraging self-harm. Posting or threatening to post someone else's
+  personally identifying information ("doxxing") is also forbidden.
+
+* **Personal Attacks**: Disagreements happen, but they should never turn into personal attacks.
+  Don't insult, demean, or belittle others.
+
+* **Unwelcome Attention or Contact**: Avoid unwelcome sexual attention, inappropriate physical
+  contact (or simulation thereof), sexualized comments, jokes, or imagery.
+
+* **Disruption**: Do not engage in sustained disruption of discussions, events, or other
+  community activities.
+
+* **Bad Faith Actions**: Do not intentionally make false reports or otherwise abuse the reporting
+  process.
+
+This is not an exhaustive list. Any behaviour that makes others feel unsafe or unwelcome may be
+subject to enforcement action.
+
+## Matrix Community
+
+These Community Guidelines apply to the entire
+[Continuwuity Matrix Space](https://matrix.to/#/#space:continuwuity.org) and its rooms, including:
+
+### [#continuwuity:continuwuity.org](https://matrix.to/#/#continuwuity:continuwuity.org)
+
+This room is for support and discussions about Continuwuity. Ask questions, share insights, and help
+each other out while adhering to these guidelines.
+
+We ask that this room remain focused on the Continuwuity software specifically: the team are
+typically happy to engage in conversations about related subjects in the off-topic room.
+
+### [#offtopic:continuwuity.org](https://matrix.to/#/#offtopic:continuwuity.org)
+
+For off-topic community conversations about any subject. While this room allows for a wide range of
+topics, the same guidelines apply. Please keep discussions respectful and inclusive, and avoid
+divisive or stressful subjects like specific country/world politics unless handled with exceptional
+care and respect for diverse viewpoints.
+
+General topics, such as world events, are welcome as long as they follow the guidelines. If a member
+of the team asks for the conversation to end, please respect their decision.
+
+### [#dev:continuwuity.org](https://matrix.to/#/#dev:continuwuity.org)
+
+This room is dedicated to discussing active development of Continuwuity, including ongoing issues or
+code development. Collaboration here must follow these guidelines, and please consider raising
+[an issue](https://forgejo.ellis.link/continuwuation/continuwuity/issues) on the repository to help
+track progress.
+
+## Reporting and Enforcement
+
+We take these Community Guidelines seriously to protect our community members. If you witness or
+experience unacceptable behaviour, or have any other concerns, please report it.
+
+**How to Report:**
+
+* **Alert Moderators in the Room:** If you feel comfortable doing so, you can address the issue
+  publicly in the relevant room by mentioning the moderation bot, `@rock:continuwuity.org`, which
+  will immediately alert all available moderators.
+* **Direct Message:** If you're not comfortable raising the issue publicly, please send a direct
+  message (DM) to one of the room moderators.
+
+Reports will be handled with discretion. We will investigate promptly and thoroughly.
+
+**Enforcement Actions:**
+
+Anyone asked to stop unacceptable behaviour is expected to comply immediately. Failure to do so, or
+engaging in prohibited behaviour, may result in enforcement action. Moderators may take actions they
+deem appropriate, including but not limited to:
+
+1. **Warning**: A direct message or public warning identifying the violation and requesting
+   corrective action.
+2. **Temporary Mute**: Temporary restriction from participating in discussions for a specified
+   period.
+3. **Kick or Ban**: Removal from a room (kick) or the entire community space (ban). Egregious or
+   repeated violations may result in an immediate ban. Bans are typically permanent and reviewed
+   only in exceptional circumstances.
+
+Retaliation against those who report concerns in good faith will not be tolerated and will be
+subject to the same enforcement actions.
+
+Together, let's build and maintain a community where everyone feels valued, safe, and respected.
+
+— The Continuwuity Moderation Team
diff --git a/docs/conduwuit_coc.md b/docs/conduwuit_coc.md
deleted file mode 100644
index 9a084150..00000000
--- a/docs/conduwuit_coc.md
+++ /dev/null
@@ -1,93 +0,0 @@
-# Continuwuity Community Code of Conduct
-
-Welcome to the Continuwuity community! We’re excited to have you here. Continuwuity is
-a hard-fork of the Conduit homeserver, aimed at making Matrix more accessible
-and inclusive for everyone.
-
-This space is dedicated to fostering a positive, supportive, and inclusive
-environment for everyone. This Code of Conduct applies to all Continuwuity spaces,
-including any further community rooms that reference this CoC. Here are our
-guidelines to help maintain the welcoming atmosphere that sets Continuwuity apart.
-
-For the general foundational rules, please refer to the [Contributor's
-Covenant](https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CODE_OF_CONDUCT.md).
-Below are additional guidelines specific to the Continuwuity community.
-
-## Our Values and Guidelines
-
-1. **Respect and Inclusivity**: We are committed to maintaining a community
-   where everyone feels safe and respected. Discrimination, harassment, or hate
-speech of any kind will not be tolerated. Recognise that each community member
-experiences the world differently based on their past experiences, background,
-and identity. Share your own experiences and be open to learning about others'
-diverse perspectives.
-
-2. **Positivity and Constructiveness**: Engage in constructive discussions and
-   support each other. If you feel angry, negative, or aggressive, take a break
-until you can participate in a positive and constructive manner. Process intense
-feelings with a friend or in a private setting before engaging in community
-conversations to help maintain a supportive and focused environment.
-
-3. **Clarity and Understanding**: Our community includes neurodivergent
-   individuals and those who may not appreciate sarcasm or subtlety. Communicate
-clearly and kindly, avoiding sarcasm and ensuring your messages are easily
-understood by all. Additionally, avoid putting the burden of education on
-marginalized groups by doing your own research before asking for explanations.
-
-4. **Be Open to Inclusivity**: Actively engage in conversations about making our
-   community more inclusive. Report discriminatory behavior to the moderators
-and be open to constructive feedback that aims to improve our community.
-Understand that discussing discrimination and negative experiences can be
-emotionally taxing, so focus on the message rather than critiquing the tone
-used.
-
-5. **Commit to Inclusivity**: Building an inclusive community requires time,
-   energy, and resources. Recognise that addressing discrimination and bias is
-an ongoing process that necessitates commitment and action from all community
-members.
-
-## Matrix Community
-
-This Code of Conduct applies to the entire [Continuwuity Matrix
-Space](https://matrix.to/#/#space:continuwuity.org) and its rooms,
-including:
-
-### [#continuwuity:continuwuity.org](https://matrix.to/#/#continuwuity:continuwuity.org)
-
-This room is for support and discussions about Continuwuity. Ask questions, share
-insights, and help each other out.
-
-### [#offtopic:continuwuity.org](https://matrix.to/#/#offtopic:continuwuity.org)
-
-For off-topic community conversations about any subject. While this room allows
-for a wide range of topics, the same CoC applies. Keep discussions respectful
-and inclusive, and avoid divisive subjects like country/world politics. General
-topics, such as world events, are welcome as long as they follow the CoC.
-
-### [#dev:continuwuity.org](https://matrix.to/#/#dev:continuwuity.org)
-
-This room is dedicated to discussing active development of Continuwuity. Posting
-requires an elevated power level, which can be requested in one of the other
-rooms. Use this space to collaborate and innovate.
-
-## Enforcement
-
-We have a zero-tolerance policy for violations of this Code of Conduct. If
-someone’s behavior makes you uncomfortable, please report it to the moderators.
-Actions we may take include:
-
-1. **Warning**: A warning given directly in the room or via a private message
-   from the moderators, identifying the violation and requesting corrective
-action.
-2. **Temporary Mute**: Temporary restriction from participating in discussions
-   for a specified period to allow for reflection and cooling off.
-3. **Kick or Ban**: Egregious behavior may result in an immediate kick or ban to
-   protect other community members. Bans are considered permanent and will only
-be reversed in exceptional circumstances after proven good behavior.
-
-Please highlight issues directly in rooms when possible, but if you don't feel
-comfortable doing that, then please send a DM to one of the moderators directly.
-
-Together, let’s build a community where everyone feels valued and respected.
-
-— The Continuwuity Moderation Team

From 7a6be9a28bc343bdd297d7cf555c3ee036c35162 Mon Sep 17 00:00:00 2001
From: nexy7574 <git@nexy7574.co.uk>
Date: Thu, 24 Apr 2025 02:35:46 +0100
Subject: [PATCH 4/4] WIP: implement user_may_invite callback

---
 Cargo.lock               | 22 +++++++++++-----------
 Cargo.toml               |  2 +-
 src/api/server/invite.rs | 25 ++++++++++++++++++-------
 3 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 216114af..d3c39aca 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3652,7 +3652,7 @@ dependencies = [
 [[package]]
 name = "ruma"
 version = "0.10.1"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "assign",
  "js_int",
@@ -3672,7 +3672,7 @@ dependencies = [
 [[package]]
 name = "ruma-appservice-api"
 version = "0.10.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3684,7 +3684,7 @@ dependencies = [
 [[package]]
 name = "ruma-client-api"
 version = "0.18.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "as_variant",
  "assign",
@@ -3707,7 +3707,7 @@ dependencies = [
 [[package]]
 name = "ruma-common"
 version = "0.13.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "as_variant",
  "base64 0.22.1",
@@ -3739,7 +3739,7 @@ dependencies = [
 [[package]]
 name = "ruma-events"
 version = "0.28.1"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "as_variant",
  "indexmap 2.8.0",
@@ -3764,7 +3764,7 @@ dependencies = [
 [[package]]
 name = "ruma-federation-api"
 version = "0.9.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "bytes",
  "headers",
@@ -3786,7 +3786,7 @@ dependencies = [
 [[package]]
 name = "ruma-identifiers-validation"
 version = "0.9.5"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "js_int",
  "thiserror 2.0.12",
@@ -3795,7 +3795,7 @@ dependencies = [
 [[package]]
 name = "ruma-identity-service-api"
 version = "0.9.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3805,7 +3805,7 @@ dependencies = [
 [[package]]
 name = "ruma-macros"
 version = "0.13.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "cfg-if",
  "proc-macro-crate",
@@ -3820,7 +3820,7 @@ dependencies = [
 [[package]]
 name = "ruma-push-gateway-api"
 version = "0.9.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "js_int",
  "ruma-common",
@@ -3832,7 +3832,7 @@ dependencies = [
 [[package]]
 name = "ruma-signatures"
 version = "0.15.0"
-source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=652cc4864203ab7ca60cf9c47b931c0385304cc7#652cc4864203ab7ca60cf9c47b931c0385304cc7"
+source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=b3cb85becae3c1ecabe2c93138312ebb3632b728#b3cb85becae3c1ecabe2c93138312ebb3632b728"
 dependencies = [
  "base64 0.22.1",
  "ed25519-dalek",
diff --git a/Cargo.toml b/Cargo.toml
index c0f857c6..c5e70762 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -350,7 +350,7 @@ version = "0.1.2"
 [workspace.dependencies.ruma]
 git = "https://forgejo.ellis.link/continuwuation/ruwuma"
 #branch = "conduwuit-changes"
-rev = "652cc4864203ab7ca60cf9c47b931c0385304cc7"
+rev = "b3cb85becae3c1ecabe2c93138312ebb3632b728"
 features = [
     "compat",
     "rand",
diff --git a/src/api/server/invite.rs b/src/api/server/invite.rs
index f53e1a15..d6f925f1 100644
--- a/src/api/server/invite.rs
+++ b/src/api/server/invite.rs
@@ -4,13 +4,8 @@ use base64::{Engine as _, engine::general_purpose};
 use conduwuit::{
 	Err, Error, PduEvent, Result, err, pdu::gen_event_id, utils, utils::hash::sha256, warn,
 };
-use ruma::{
-	CanonicalJsonValue, OwnedUserId, UserId,
-	api::{client::error::ErrorKind, federation::membership::create_invite},
-	events::room::member::{MembershipState, RoomMemberEventContent},
-	serde::JsonObject,
-};
-
+use ruma::{CanonicalJsonValue, OwnedUserId, UserId, api::{client::error::ErrorKind, federation::membership::create_invite}, events::room::member::{MembershipState, RoomMemberEventContent}, serde::JsonObject, RoomId, OwnedRoomId};
+use ruma::api::OutgoingRequest;
 use crate::Ruma;
 
 /// # `PUT /_matrix/federation/v2/invite/{roomId}/{eventId}`
@@ -113,6 +108,22 @@ pub(crate) async fn create_invite_route(
 
 	invite_state.push(pdu.to_stripped_state_event());
 
+	// Check the invite against any user_may_invite callbacks
+	// let mut user_may_invite = UserMayInvitePayload {
+	// 	inviter: sender.to_owned(),
+	// 	invitee: invited_user,
+	// 	room_id: body.room_id.clone(),
+	// };
+	for appservice in services.appservice.read().await.values() {
+		if let Some(callbacks) = &appservice.registration.callbacks {
+			if callbacks.user_may_invite.is_some() {
+				// let resp = services.sending.send_appservice_request(appservice.registration.clone(),
+				// &user_may_invite
+				// );
+			}
+		}
+	}
+
 	// If we are active in the room, the remote server will notify us about the
 	// join/invite through /send. If we are not in the room, we need to manually
 	// record the invited state for client /sync through update_membership(), and