Discord Bot Bausatz đŸ€–

Super. Übrigens wĂŒrde ich gerne jede nĂŒtzliche allgemeine Verbesserung fĂŒr dieses Plugin in Betracht ziehen, falls du wieder mit dem Codieren beginnst :wink:

2 „GefĂ€llt mir“

Okay, lass uns langsam starten. Ich habe gerade meinen ersten Pull Request in dieses Repo eingereicht :smile:.

4 „GefĂ€llt mir“

merged :slight_smile: danke!

4 „GefĂ€llt mir“

Hey! Ich versuche gerade, ein Plugin zu finden, das Benutzern in Discord basierend auf ihren Abzeichen auf ihrem Discourse-Profil eine Rolle zuweist. Ist das mit deinem Plugin möglich? Falls nicht, ist es ĂŒberhaupt möglich? Danke!

2 „GefĂ€llt mir“

Derzeit nicht, aber es spricht nichts dagegen, dass Sie es forken und einen entsprechenden Befehl hinzufĂŒgen, um das umzusetzen!

Wenn es gut umgesetzt ist, wĂŒrde ich einen PR mergen. Es könnte jedoch fĂŒr den allgemeinen Gebrauch etwas zu spezifisch sein, da Sie vermutlich eine Art Zuordnung pflegen mĂŒssten, es sei denn, die Badge-Namen entsprechen den Rollennamen? In jedem Fall mĂŒssten Sie die meisten davon herausfiltern? Das könnte fĂŒr den allgemeinen Gebrauch unĂŒbersichtlich werden. Wenn Sie einen wirklich sauberen Weg finden, das zu verwalten, der auch fĂŒr allgemeine Benutzer des Plugins funktioniert, lassen Sie es mich wissen.

Aber forken Sie ruhig, machen Sie sich breit!

2 „GefĂ€llt mir“

Ich wĂŒrde definitiv gerne sehen, ob das möglich ist. Das wĂŒrde mein Interesse an diesem Plugin noch steigern. :smiley:

1 „GefĂ€llt mir“

Nur eine kleine Frage: MĂŒssen wir !discsync jedes Mal manuell ausfĂŒhren, wenn wir Rollen aktualisieren wollen, oder lĂ€uft das automatisch?

2 „GefĂ€llt mir“

Leider ja. Es wĂ€re zwar eine schöne Erweiterung, einen Parameter ‚Wiederholung in x Stunden’ hinzuzufĂŒgen (PRs sind willkommen, oder Sie können mich beauftragen, dies umzusetzen), aber wie ich bereits in diesem Thema erwĂ€hnt habe, wĂ€re es besser, wenn jemand ein neues Plugin unter Verwendung ihrer API entwickelt und einige geplante Sidekiq-Jobs erstellt, um dies zu erledigen. Ein Bot ist eine unterhaltsame Lösung, aber nicht die beste Architektur fĂŒr geplante Synchronisierungen.

2 „GefĂ€llt mir“

Oh, danke trotzdem. Ja, wir haben bereits ĂŒber eine mögliche Alternative nachgedacht

Wir wollten Discourse-Gruppen mit Discord-Rollen synchronisieren, aber es scheint keine perfekte Lösung zu geben, die passt.

Jetzt werden wir eine Art Bot mit Webhooks erstellen: Discourse löst einen Webhook aus, wenn die Gruppen eines Benutzers aktualisiert werden (oder auch bei einer Änderung des Benutzernamens) an eine benutzerdefinierte Lösung, die dann Rollen in Discord zuweist. Wir werden weiterhin die Discord-OAuth-Option verwenden, um Gilden zu erhalten, und durch Erstellen einer benutzerdefinierten Data-Explorer-Abfrage können wir diese Gilden ĂŒber die API abrufen.

Es wĂŒrde ungefĂ€hr so aussehen:

  1. Benutzer Àndert Gruppen oder Benutzernamen
  2. Ein Webhook an die benutzerdefinierte Lösung wird ausgelöst
  3. Diese benutzerdefinierte Lösung ruft die Data-Explorer-API mit einer benutzerdefinierten Abfrage auf, die die Gilden des Benutzers zurĂŒckgibt
  4. Mit dieser Gilde rufen wir Discord zurĂŒck, um die Rollen zu aktualisieren
2 „GefĂ€llt mir“

Ein ordentlicher Batch-Job wÀre besser, damit die DatenintegritÀt nicht durch einmalige Ereignisfehler beeintrÀchtigt wird. Beide wÀren perfekt.

2 „GefĂ€llt mir“

Nun, ich bin nicht auf diesem Weg gegangen
 :sweat_smile:
Ich habe dein Repository forkt und ein neues Plugin erstellt, das unseren BedĂŒrfnissen entspricht:

Es synchronisiert im Grunde alle Gruppen mit Discord-Rollen, und zwar automatisch. Wenn ein Benutzer zu einer Gruppe hinzugefĂŒgt oder daraus entfernt wird, wird ein Synchronisationsauftrag ausgefĂŒhrt und die Rollen entsprechend den öffentlichen Gruppen aktualisiert. Außerdem habe ich eine Einstellung hinzugefĂŒgt, um eine „verifizierte Rolle

7 „GefĂ€llt mir“

@barreeeiroo Das wirklich Interessante an deinem Fork war die Nutzung von DiscourseEvents-Hooks.

Ich hatte angenommen, dass das nicht möglich ist, da der Bot in einem separaten Thread lĂ€uft. Wie du jedoch festgestellt hast, scheint es möglich zu sein, auf Ereignisse zu reagieren und den Bot zu beeinflussen. Vielen Dank dafĂŒr – das ist eine wichtige Erkenntnis, die wir weiterentwickeln können.

Deshalb habe ich begonnen, diese Technik im Haupt-Repository zu ĂŒbernehmen, beginnend mit der Möglichkeit, Überwachungen fĂŒr neue BeitrĂ€ge oder Themen einzurichten, die im Discord-Admin-Kanal angekĂŒndigt werden.

Die FunktionalitĂ€t mag derzeit von geringem Nutzen sein, aber sie demonstriert das Konzept fĂŒr andere, um es zu nutzen.

5 „GefĂ€llt mir“

OK, ich habe das Plugin etwas weiterentwickelt und einen Proof of Concept fĂŒr eine bidirektionale Kommunikation umgesetzt:

Hier sind die neuen Einstellungen:

  • Sie können einen AnkĂŒndigungs-Kanal auf Discord in den Plugin-Einstellungen festlegen.

  • Sie können nun in den zugewiesenen Discord-AnkĂŒndigungs-Kanal tippen, und Ihre Nachricht wird im zugewiesenen Discourse-Thema in den Plugin-Einstellungen veröffentlicht.

  • Sie können eine Liste von Kategorien in Discourse einrichten, um Nachrichten an den AnkĂŒndigungs-Kanal auf Ihrem Discord zu senden, wenn dort gepostet wird oder ein neues Thema erstellt wird (entweder, beides oder beides).

ZusĂ€tzlich habe ich eine neue Datei hinzugefĂŒgt, um von der discordrb-API unterstĂŒtzte Discord-Ereignisse zu verwalten, wobei die Logik fĂŒr AnkĂŒndigungen das erste Beispiel ist (Sie können gerne neue entwickeln und einen Pull Request einreichen, wenn sie fĂŒr die Community allgemein nĂŒtzlich sind).

Außerdem habe ich die Änderungen entfernt, die in der app.yml erforderlich waren, um libsodium-dev zu installieren, da dies nun optional ist. Die AbhĂ€ngigkeiten wurden aktualisiert und es wird derzeit nicht fĂŒr das Plugin benötigt (keine Notwendigkeit, Voice zu verarbeiten). Dies wird die Installation erheblich vereinfachen.

9 „GefĂ€llt mir“

Ich habe die Installationsanweisungen befolgt und alles lief reibungslos bis zum Neustart. Der Bot ist dem Raum nicht beigetreten, also habe ich /logs ĂŒberprĂŒft:

Bezieht sich das auf den discord_bot_token? Er ist ausgefĂŒllt und ich habe den Wert ĂŒberprĂŒft. Irgendwelche Hinweise?

3 „GefĂ€llt mir“

Mark, Entschuldigung, das habe ich irgendwie ĂŒbersehen.

Haben Sie das Problem entdeckt?

Können Sie bitte das Update durchfĂŒhren und die neue Version ausprobieren, dann sehen wir weiter.

2 „GefĂ€llt mir“

Ein bedeutendes Update, finanziert vom Discourse-Team :tada:

FEATURES: new message auto-copy and history copy command by merefield · Pull Request #4 ·
merefield/discourse-discord-bot (github.com)

  1. Ein neuer Befehl !disccopy \u003cAnzahl der Nachrichten\u003e \u003coptionaler Zielkategorie-Name\u003e \u003coptionaler Zielthema-Name\u003e, mit dem Sie den Discord-Nachrichtenverlauf (in diesem Kanal) von Ihrem Discord-Chat aus in Ihre Discourse-Instanz kopieren können. Dies kann problemlos Tausende von Nachrichten auf einmal verarbeiten (wird aber bei diesem Volumen Zeit in Anspruch nehmen).

  2. Automatisches Kopieren von Chats pro Nachricht, nach Kanal in jede gleichnamige Kategorie auf Discourse: Wenn der Kanalname mit dem Kategorienamen ĂŒbereinstimmt, wird die Nachricht in Discourse kopiert, wenn dies eingestellt ist:
    image

  3. Bei jeder Nachricht, die von Discord in Discourse kopiert wird, wird der Benutzer jetzt korrekt angezeigt, wenn sich dieser Benutzer mit dem Discord-Login bei Discourse angemeldet hat (damit der Discord-Bot die Benutzerkonten abgleichen kann).

  4. LokalisierungsunterstĂŒtzung fĂŒr viele Funktionen hinzugefĂŒgt.

Vielen Dank an @erlend_sh & das Discourse-Team fĂŒr die Spezifikation & das Sponsoring dieser Arbeit!! :pray:

Mehr Bot-Sachen kommen :wink: :robot:

5 „GefĂ€llt mir“

Wenn sie sich mit Discourse-Authentifizierung oder einer anderen Authentifizierung als Discord OAuth anmelden, wĂŒrde dieses Plugin sie einfach ignorieren?

1 „GefĂ€llt mir“

Ignoriert sie nicht, es kann den Benutzer nur nicht mit der Person im anderen System abgleichen. Daher erscheinen kopierte Nachrichten von „System“.

2 „GefĂ€llt mir“

Werden Threads unterstĂŒtzt?

4 „GefĂ€llt mir“

Noch nicht, Klaus, aber es ist potenziell in der Pipeline. Wir warten auf die Aktualisierung der Ruby-API (Blocker) und dann darauf, dass ein Backer diese Funktion hinzufĂŒgt.

2 „GefĂ€llt mir“