diff --git a/src/dbus/NhekoDBusApi.cpp b/src/dbus/NhekoDBusApi.cpp
index 2367c27bb9b5810433bf9446a68c3bc436c02105..a58812efee34cbf9d65b7dd939777cb88da178fe 100644
--- a/src/dbus/NhekoDBusApi.cpp
+++ b/src/dbus/NhekoDBusApi.cpp
@@ -152,6 +152,15 @@ directChat(const QString &userId)
         interface.isValid())
         interface.call(QDBus::NoBlock, QStringLiteral("directChat"), userId);
 }
+
+void
+setStatusMessage(const QString &message)
+{
+    if (QDBusInterface interface{QStringLiteral(NHEKO_DBUS_SERVICE_NAME), QStringLiteral("/")};
+        interface.isValid())
+        interface.call(QDBus::NoBlock, QStringLiteral("setStatusMessage"), message);
+}
+
 } // nheko::dbus
 
 /**
diff --git a/src/dbus/NhekoDBusApi.h b/src/dbus/NhekoDBusApi.h
index 3995404ad6e8290dc0e217ce62b8d2c2d06e1c44..20316b649f502e2349254aefd03897a4a5539119 100644
--- a/src/dbus/NhekoDBusApi.h
+++ b/src/dbus/NhekoDBusApi.h
@@ -80,6 +80,9 @@ joinRoom(const QString &alias);
 //! desired).
 void
 directChat(const QString &userId);
+//! Sets the user's status message (if supported by the homeserver).
+void
+setStatusMessage(const QString &message);
 
 QDBusArgument &
 operator<<(QDBusArgument &arg, const RoomInfoItem &item);
diff --git a/src/dbus/NhekoDBusBackend.cpp b/src/dbus/NhekoDBusBackend.cpp
index 56fdfe8d375accb74a3578ad4a5b4e7cd1621451..a7fa2d744097a990e8e0aff09d5390d2b17bd404 100644
--- a/src/dbus/NhekoDBusBackend.cpp
+++ b/src/dbus/NhekoDBusBackend.cpp
@@ -100,6 +100,12 @@ NhekoDBusBackend::directChat(const QString &userId) const
     ChatPage::instance()->startChat(userId);
 }
 
+void
+NhekoDBusBackend::setStatusMessage(const QString &message)
+{
+    ChatPage::instance()->setStatus(message);
+}
+
 void
 NhekoDBusBackend::bringWindowToTop() const
 {
diff --git a/src/dbus/NhekoDBusBackend.h b/src/dbus/NhekoDBusBackend.h
index 6fb9dd729e91d8d4149d2b41a84a0fbf0ab68268..83562da2ee6f87f7ace77de327dd7399917cec23 100644
--- a/src/dbus/NhekoDBusBackend.h
+++ b/src/dbus/NhekoDBusBackend.h
@@ -37,6 +37,8 @@ public slots:
     //! Starts or activates a direct chat. It is your responsibility to ask for confirmation (if
     //! desired).
     Q_SCRIPTABLE void directChat(const QString &userId) const;
+    //! Sets the user's status message.
+    Q_SCRIPTABLE void setStatusMessage(const QString &message);
 
 private:
     void bringWindowToTop() const;