# Multi-User Chat

Mit Multi-User Chat (kurz MUC, deutsch Mehrbenutzerchat), auch Gruppenchat, werden bei XMPP die Chaträume bezeichnet, in denen sich mehrere Benutzer gleichzeitig unterhalten können.
Ähnlich wie im Internet Relay Chat (IRC) kann ein Chatraum verschiedene Status haben (sichtbar, versteckt, passwortgeschützt usw.) und die Beteiligten die Rolle des Teilnehmers, Besuchers oder Moderators einnehmen (ähnlich wie im IRC der Operator, Voice usw.).
Jedoch hat der MUC viele Vorteile gegenüber dem IRC. So geht man im MUC mit seinem weltweit einzigartigen Jabber Identifier online, der nicht von jemand anderem belegt sein kann. Dadurch benötigt der MUC keine umständlichen Dienste (wie z. B. NickServ) um Benutzer eindeutig identifizieren zu können. Zudem können im MUC Räume (Channels) ohne Umwege über Bots (wie z. B. ChanServ) registriert werden. Außerdem werden die unterschiedlichen Rechte von Benutzern in einem Raum (Besitzer, Operator, Redeberechtigt, Leseberechtigt, Verbannt) mit dem Jabber Identifier des jeweiligen Benutzers verknüpft, wodurch Räume nicht – wie im IRC – von anderen „übernommen“ werden oder verbannte Benutzer, nach Ändern des Hosts und des Nicknamens den Raum wieder betreten können. Ergänzend hat der MUC ein optionales Feature, um Gespräche serverseitig ohne einen Bot mitzuloggen. Um die Anonymität zu wahren, kann man sich im MUC (optional) einen beliebigen Namen aussuchen, der dann anstatt des Jabber Identifiers an normale Teilnehmer gesendet wird. Besitzer und Operatoren können den Jabber Identifier jedoch sehen, was auch nötig ist, um die Rechte eines Benutzers im Raum zu ändern. Nicknamen werden raumweise gewählt und gelten nicht netzwerkweit wie beim IRC.

## Entwicklung

MUC ist der letzte Spross einer Reihe von XMPP-Protokollen. Das ursprüngliche Groupchat-Protokoll, auf denen die heutigen Mehrbenutzerkonferenzen in gemeinsamen Räumen basieren, wurde um administrative Funktionen erweitert und Conference genannt. Diese nicht offiziell verabschiedete Erweiterung wurde überarbeitet und schließlich in einem XMPP Extension Protocol formuliert.
Damit neue Nutzer möglichst wenig Probleme im Chat haben, wurde zur Ausübung der Funktionen und Aktionen im XEP-0045: Multi-User Chat die Möglichkeit geschaffen, Kommandos im IRC-Stil (z. B. /msg, /kick, /join) zu implementieren oder über Kontextmenüs der Clients bereitstellen.

## Funktionen

MUC bietet verschiedene Funktionen. So ist es möglich, dass der Server auf Wunsch eine Logdatei über einen Raum erstellt. Unabhängig davon werden aber auch die letzten Nachrichten gespeichert und mit korrekten Zeitangaben an neue Besucher gesendet, sodass diese gleich sehen können, worüber sich gerade unterhalten wird.
Außerdem kann jeder Benutzer in einem Chat verschiedene Privilegien besitzen, so kann er abhängig von seinen Privilegien in einem Raum schreiben oder den Betreff/das Subject ändern. Außerdem können die Privilegien den Benutzern ermöglichen andere Benutzer zu kicken oder verbannen. Zudem kann eingestellt werden, welcher Benutzer die Jabber Identifier der anderen sehen kann. Und sollten die Rechte ausreichen, können diese Benutzer die Rechte der anderen Benutzer ändern, und ihnen somit zum Beispiel die Redeberechtigung entziehen.
Zusätzlich kann die Benutzerzahl in einem Chat beschränkt werden. Auch besteht ein Chat weiter ohne das Benutzer anwesend sind und zudem kann er versteckt oder mit einem Passwort geschützt werden. Und sollte ein Interner Chat eingerichtet werden, ist es zudem möglich anzugeben welche Benutzer beitreten können und welche nicht. Außerdem kann ein Chat anonym sein und somit die Jabber Identifier der anderen verstecken.

## Die Rolle und Rechte eines Anwesenden

Jeder in einem Chatraum besitzt eine Rolle (Role) in diesem. Die drei möglichen Rollen dabei sind: Besucher (Visitor), Teilnehmer (Participant) und Moderator. Ein Teilnehmer hat dabei alle Rechte, die auch ein Besucher besitzt. Der Moderator besitzt auch alle Rechte die ein Besucher oder ein Teilnehmer besitzt.
Betritt man einen Chatraum, so wird man automatisch einer Rolle zugeteilt. Die Rolle in einem Chatraum bleibt immer nur so lange erhalten, wie man sich in diesem Chatraum befindet. Verlässt man einen Chatraum, so werden alle Änderungen an der Rolle verworfen. (Ausnahmen von dieser Regel ergeben sich aus der Zugehörigkeit, die weiter unten erklärt wird.)

### Besucher

Der Status Besucher ist die unterste Ebene in einem Channel. So kann er nur Dinge tun, die für ihn von Bedeutung sind. So kann er sehen, was gerade im Raum geschrieben wird. Auch kann er seinen Status (Presence) oder Nicknamen ändern. Außerdem kann er anderen im Raum private Nachrichten schreiben oder Einladungen an andere senden und die Empfänger auffordern dem Channel beizutreten. Nachrichten im Raum (für alle sichtbar) kann er nur schreiben, wenn der Raum nicht den Status „moderiert“ besitzt.

### Teilnehmer

Ein Teilnehmer hat zusätzlich auch das Recht Nachrichten in einem moderierten Raum zu senden. Außerdem kann er den Betreff (das Subject) ändern, sofern dieses Recht nicht auf die Moderatoren eingeschränkt ist.

### Moderatoren

Der Moderator kann zusätzlich andere aus einem Raum werfen (Kick), sofern der andere kein Moderator ist. Zudem kann er Besucher zu Teilnehmern und Teilnehmer zu Besuchern machen. Außerdem sieht er die Jabber Identifier aller Anwesenden, auch wenn der Raum den Status anonym hat.

## Die Zugehörigkeit einer Person

Darüber hinaus besitzt jeder eine den Raum betreffende Zugehörigkeit (Affiliation). Im Gegensatz zur Rolle bleibt die Zugehörigkeit erhalten, wenn jemand einen Chatraum verlässt. Betritt er einen Raum erneut, so besitzt er also wieder die gleiche Zugehörigkeit wie zuvor.
Die folgenden Zugehörigkeiten existieren: Ausgeschlossener (Outcast), keine (besondere) Zugehörigkeit (no Affiliation), Mitglied (Member), Administrator (Admin) und Besitzer (Owner). Wie bei den Rollen besitzen alle höhergestellten Zugehörigkeiten auch alle Rechte der schwächeren Zugehörigkeiten.

### Ausgeschlossene

Ein Ausgeschlossener besitzt nicht das Recht den Chatraum zu betreten (er wurde gebannt).

### Keine Zugehörigkeit

Eine Person ohne (besondere) Zugehörigkeit kann einen Raum betreten (es sei denn dieser Raum ist als „nur für Mitglieder“ konfiguriert).

### Mitglieder

Ein Mitglied hat darüber hinaus kann auch Räume betreten die „nur für Mitglieder“ konfiguriert ist und bekommt im moderierten Raum mindestens die Rolle eines Teilnehmers und ist somit von Anfang an berechtigt Nachrichten in den Chatraum zu versenden.

### Administratoren

Ein Administrator kann zusätzlich die Zugehörigkeit zu anderen Mitgliedern ändern. Außerdem wird jeder Person, die der Administrator einlädt, in einen „nur für Mitglieder“ konfigurierten Raum die Zugehörigkeit als Mitglied zugeordnet. Dabei muss die Einladung nach den MUC-Protokoll erfolgen. Eine Einladung nach dem alten Protokoll hat diesen Effekt nicht. Zudem kann der Administrator andere, außer Administratoren oder Besitzer, zu Ausgeschlossene machen, sie also des Raumes verweisen (siehe Überschrift Ausgeschlossene). Zusätzlich hat er immer die Rolle eines Moderators und kann anderen die Rolle eines Moderators zuteilen oder nehmen.

### Besitzer

Ein Besitzer ist die höchste Zugehörigkeit. Sobald ein neuer Raum erstellt wird, ist normalerweise der Ersteller des Raumes sofort Besitzer. Er kann die Konfiguration des Chatraumes ändern und jemanden die Zugehörigkeit eines Administrators oder eines Besitzers zuordnen oder entfernen. Außerdem kann er den Raum wieder auflösen.

## Software
### Client

Nicht jeder XMPP-Client unterstützt alle oben aufgelisteten Funktionen. Hier eine Liste mit Clients, die MUC (fast) vollständig unterstützen:
* Coccinella (Windows/Linux/MAC OS X)
* Gajim (Windows/Linux)
* Psi (Windows/Linux/MAC OS X)
* Pidgin (Windows/Linux/MAC OS X) (FAQ)
* Conversations (Android)

### Server

* ejabberd (erlang / GPL)
* prosody (lua / MIT-Lizenz)
* Openfire Server (Java / Apache License 2.0)
* PSYCED (zugleich auch PSYC- und IRC-fähig)