Schlagwort: Discord

Discord: Tutorial – Rechtemanagement leicht gemacht

Discord: Tutorial – Rechtemanagement leicht gemacht

Das Discord Rechtesystem ist ein mächtiges Werkzeug, wenn man weiß, wie man es richtig konfiguriert. Dieses Tutorial soll Dir helfen deinen Server nicht in einem Berechtigungswirrwar versinken zu lassen, bei dem man im schlimmsten Fall am Ende selbst nicht mehr durchblickt.

In jedem Falle sollte man sich bei dem Einstellen der Berechtigungen Zeit nehmen. Die richtige Konfiguration ist keine Sache, von der man erwarten sollte, dass sie in wenigen Minuten abgeschlossen ist.

Zunächst sollte man sich ein Konzept überlegen, wie der Server aufgebaut sein soll und welche Nutzergruppe in welchem Channel welche Rechte bekommen soll.

Danach kann man mit der Umsetzung beginnen.

Zum grundlegenden Verständnis der Funktionsweise der Rechteverwaltung.

Auf der untersten Ebene stehen die Basisberechtigungen jeder Rolle. Diese findet ihr in der Rollenverwaltung.
Hier könnt ihr mittels „Schaltern“ einer Nutzergruppe die grundlegenden Berechtigungen gewähren.

Man muss wissen, dass diese Berechtigungen auf einander aufbauen. Das Fundament bietet hier immer die „everyone“ Rolle. Das sind die Berechtigungen, die jedem zur Verfügung stehen.

Möchte man nun zum Beispiel verschiedenen Nutzern eine spezielle Rolle für eine Farbe zuweisen, die aber nicht mehr können soll, als ohnehin jeder schon kann, muss man bei dieser Rolle keinerlei Rechte aktivieren, da die Nutzer ja schon von der „everyone“ Rolle die nötigen Rechte haben.

Diese Vorgehensweise kann ich nur wärmmstens empfehlen. Bei der Rechteverwaltung gibt es in meinen Augen eine wichtige Regel: „Weniger ist meh“.

Man muss keine Berechtigungen mehrfach zuweisen. Das hat einen Hintergrund. Will man die Rechte irgendwann mal begrenzen, muss man nur die niedrigste Ebene dieser Rechte aufrufen und den Schalter umlegen.

Hat man diese Rechte allerdings in allen Rollen erneut vergeben, muss man jede Rolle prüfen, ob die Rechte aktiv sind oder nicht.
Das ist extrem unnötige Arbeit und kann durchaus bei sehr komplexen Rollengeflechten, sehr unübersichtlich werden.

Macht diesen Schritt wirklich gewissenhaft, denn er bietet das Fundamen für alle weiteren Rechtevergaben.

Overwrites, wenn das Chaos meist beginnt.

Wie es in der Überschrift schon steht sind Overwrites meist der Punkt, an dem viele Serverbesitzer so richtig Chaos stiften und am Ende selbst nicht mehr durchblicken.

Auch hier gilt die Regel, weniger ist mehr. Ein kkleines Beispiel, was auf sehr vielen Servern der Fall ist. Man möchte die Channel zunächst für neue Nutzer verstecken, bis diese die Regeln des Servers akzeptiert haben.

Was ich sehr oft gesehen habe is folgendes Vorgehen:

Zunächst wird die Channel Struktur angelegt, dann denken sich die Serverbesitzer Gut, nun möchte ich von meinen 10 Channels 9 verstecken, nur 1 Channel soll sichtbar bleiben, in denen ich die Regeln veröffentliche.

Sie gehen also in die Overwrites der besagten 9 Channels, was ja zunächst nicht grundlegend falsc ist, aber dann geht es meist los:

Es soll ja alle Nutzer betreffen, logisch ist die „everyone“ Rolle. Perfekt, das war ja einfach, weiter geht’s. Was soll der Nutzer nicht können? Ok schauen wir mal:

  • Channels soll er nicht sehen

  • Schreiben soll er nicht dürfen

  • Ach ja, den Nachrichtenverlauf soll er auch nicht lesen dürfen
  • Und zu Sprachkanälen verbinden schonmal gar nicht!
  • Und …

STOP!!!!!!

Genau so beginnt das Chaos! Denn genau das ist falsch.

Wie ich bereits sagte, denkt minimalistisch und möglichst so, dass man ohne viele Handgriffe Dinge ändern kann.
Was wollt ihr also? 9 von 10 Channels verstecken, OK. Wo setzt man dafür an? An der „everyone“ Rolle, das war im Beispiel korrekt.
Dennoch, warum in 9 Channels Overwrites einrichten, wenn man die „View Channels“ Rechte auch global in der „everyone“ Rolle entfernen kann und dann EINEN overwrite für den Regeln Channel einrichtet, der nur dort die Sichtbarkeit zulässt.

Warum außerdem Schreiben, Lesen, Sprechen, etc verbieten? Das ist absolut unnötig! Wie soll man diese Rechte nutzen, wenn man die Channels gar nicht sehen kann?

Um das Szenario im Beispiel simpel zu lösen wäen also folgende Schritte nötig:

  • Man nimmt der „everyone“ Rolle global die „View Channels“ Rechte
  • Man erstellt im Regel Channel einen Overwrite, der der „everyone“ Rolle NUR die „View Channels“ Rechte gibt (und vielleicht die Schreibrechte verbietet, denn man möchte dort ja sicher keinen Chat)
  • Man erstellt eine „Regel akzeptiert“ Rolle, die als Basis die „View Channels“ Rechte hat (und zwar NUR diese, denn alle anderen Reche bekommen die Nutzer ja über die „everyone“ Rolle)
  • Man installiert einen Bot der Wahl, der beim Akzeptieren der Regeln die entsprechende Rolle vergibt.

Fertig. Einfach und übersichtlich.

Doch was passiert hier im Detail?

Wie bereits erwähnt sind die Rechte der „everyone“ Rolle die Basisrechte, die Jeder Nutzer unabhängig von Zusatzrollen hat.
Durch das Deaktivieren der „View Channels“ Rechte nimmt man zunächst jedem Nutzer die Möglichkeit irgend einen Channel zu sehen.

Alles Andere kann wie gesagt bestehen bleiben, denn ohne sichtbare Channels nutzen die Rechte zunächst nichts.
Da neue User aber den Regel Channel sehen sollen, brauchen wir diesen kleinen Channelspezifischen Overwrite, der die Basisrechte der Rolle überschreibt.
Was soll der everyone Nutzer nun im Regelchannel abweichend tun können? Er soll ihn 1. sehen können und 2. nicht schreiben dürfen. Mehr nicht.
Als nächstes kommt die Zusatzrolle „Regeln akzeptiert“. Was soll diese zusätzlich gewähren? Eigentlich nur die Channels sichtbar machen, denn alles Andere bekommen die Nutzer ja schon von der „everyone“ Rolle.

Nun hat man ohne viele Verstrickungen und ohne Doppelvergaben von Rechten, das Ziel erreicht.

Solltet ihr selbst vor der Herausvorderung eines eigenen Servers stehen und nicht ganz sicher sein, wie ihr diesen am besten einrichtet, zögert nicht mich zu kontaktieren, Wenn ich Zeit habe, stehe ich gerne helfend zur Seite.
Kontaktiert mich einfach in den Kommentaren oder auf meinem Server.

Discord: Vorsicht beim Einrichten

Discord: Vorsicht beim Einrichten

Vor Kurzem ist mir aufgefallen, dass bei einem Discord Server, den ich moderiere, die Email Verifizierung nicht funktionierte.

Das Verifizierungslevel ist auf medium gesetzt, dennoch konnten Nutzer direkt nach Erstellen eines Accounts, ohne Abwarten der 10 Minuten und ohne Verifikation der Email Adresse den Server betreten, schreiben und die Voice Channels nutzen.

Nach einigem Suchen habe ich dann den Fehler gefunden. Auf dem Server läuft ein Bot, der jedem neuen Nutzer direkt eine Rolle automatisch zuweist.
Nun scheint es aber so, dass sich das Verifizierungslevel von Discord selbst nur auf die @everyone Rolle, also auf Nutzer komplett ohne zusätzliche Rolle, bezieht.

Weist ihr einem Nutzer nun manuell oder über einen Bot eine Rolle zu, wertet Discord diesen User als „von euch verifiziert“ und ignoriert damit die eigene Sicherheitsrichtlinie.

Wer das nicht weiß, der bastelt sich sehr schnell ein Schlupfloch für Spammer und Trolls.

Daher rate ich von einem automatischen Zuweisen von Rollen für neue Nutzer ausdrücklich ab. Allgemein sehe ich das aber als einen Fehler im Discord Rechtesystem an, die irgendwann hoffentlich nachgebessert wird.

D.JS: Herausfiltern von Discord Invites & Informationen des Zielservers

D.JS: Herausfiltern von Discord Invites & Informationen des Zielservers

Die neuste Erweiterung meines The Cycle Discord Bots sollte ein Filter sein, der Discord Einladungen automatisch löscht bzw. mit einer Whitelist abgleicht, ob ein Link zugelassen ist..

Die Idee war recht simpel, doch in der Umsetzung stand ich auf einmal vor dem Problem einen Discord Link überhaupt zu identifizieren, auch wenn er in einen Text verpackt ist.
Als wäre das nicht schon Aufgabe genug, gibt es ja zig Variationen diese Links. Zusätzlich wollte ich ja dann auch nicht nur den Link selbst auf eine Whitelist setzen, sondern bestenfalls den Zielserver, sodass letztlich alle generierten Links zu einem solchen Server zugelassen sind.

Meine Suche verlief jedoch zunächst nicht sehr erfolgreich. Viele gefundene Ansätze passte nicht wirklich in mein Konzept. Im letzten Schritt kontaktierte ich dann auf dem offiziellen Discord von D.JS die Community und hatte innerhalb von 2 Minuten doch tatsächlich einen brauchbaren Ansatz, der letztlich auch eine Lösung lieferte.

Um vielleicht Anderen, die vor dem gleichen Problem stehen, die Suche zu vereinfachen, hier ein Auszug, wie ich das gelöst habe.

Zur Identifikation des Links in einer Nachricht verwendet man RegEx (Regular Expression) das genaue Suchmuster für Discord Links wurde mir glücklicher Weise direkt von einem Communitymitglied mit geliefert.

Letztlich sieht dann die Suche wie folgt aus:

let DiscordInvite = /(https:\/\/)?(www\.)?(discord\.gg|discord\.me|discordapp\.com\/invite|discord\.com\/invite)\/([a-z0-9-.]+)?/i;
DiscordInvite = DiscordInvite.exec(message.content);

Dies gibt in dann in DiscordInviteein Array mit diversen Informationen zum gefundenen Link aus. Der Link selbst befindet sich dabei auf Position 0.

discordInvite = discordInvite[0];

Der Erste Teil meines Ziels war somit Erreicht. Möchte man übrigens nur feststellen, ob ein Link vorhanden ist, kann man auch einfach nur

DiscordInvite = DiscordInvite.test(message.content);

nutzen. Hier bekommt man dann ein true bzw. false.

Die letztlichen Informationen über den Zielserver kann man dann über

client.fetchInvite(discordInvite).then(invite => { }

abrufen. invite.guild.id liefert dann zum Beispiel die ID des Zielservers, invite.guild.name den Namen, und so weiter.

Ich hoffe ich konnte mit diesem kurzen Abriss dem Einen oder Anderen helfen. In diesem Sinne viel Spaß mit eurem Discord Bot.

WordPress: Discord Embed und der Autorenname

WordPress: Discord Embed und der Autorenname

Discord bzw. WordPress hat mich gestern mal wieder fast zur Verzweiflung gebracht.

Schickt man einen Link zu einer WordPress Seite über Discord, werden ein Teil der Informationen der Seite als „Embed“ in Discord angezeigt.
Eine wunderbare Funktion, wie ich finde.

Allerdings musste ich feststellen, dass bei der Verlinkung von fixen Seiten immer wieder der Name des Autors auftauchte, obwohl er auf der Seite selbst komplett ausgeblendet ist.

So sollte die Darstellung nicht aussehen.

Bei Blogeinträgen ist das ja verständlich und auch nachvollziehbar, aber bei festen Unterseiten des Blogs möchte ich das nicht.

Doch weder im Code, noch in Funktionen war diese Einblendung vorhanden. Zumindest habe ich nichts gefunden.

Dabei wollte ich nur, dass Verlinkungen zu diesen Seiten so aussehen:

Lange Rede, kurzer Sinn, ich habe mir fast die Finger wund gesucht. Ständig wurden Eingriffe in den Code beschrieben, die allerdings nach jedem update wieder neu erfolgen müssten.

Nachdem ich mich gefühlt durch 100 Weiterverlinkungen durch diverse Foren geklickt hatte, wurde ich dann aber doch noch fündig.

Es war im Grunde so einfach. Es wurde dort gesagt, ich solle einfach nur das Plugin „Disable Embeds“ installieren. – So einfach sollte das sein? – Naja mal ausprobieren und siehe da

So möchte ich es haben.

Ein Traum! Der einzige Nachteil ist, dass die Embeds auch für die eigene Seite deaktiviert sind.
Es wird also keine kleine Vorschau von Links mehr in den Artikel geladen, wenn man Links einbindet.

Ich hoffe ich konnte hiermit dem Ein oder Anderen die Sucherei ersparen. 

Archive

Kategorien