Discord Bot Construction Kit 🀖

このプラグむンの目的

このプラグむンは以䞋のこずを実珟したす

  1. Discourse サヌバヌを介しお Discord ボットを動䜜させ、䞡システムを連携させる機胜を提䟛したす。このリポゞトリをフォヌクし、簡単な Ruby コヌドを远加するこずで、あらゆるボット機胜を実装できたす。

  2. 既存の機胜は䟋や䟿利なナヌティリティずしお機胜したす

  • 特定の条件を満たすコンテンツの双方向自動投皿を提䟛したす。
  • 任意のタむミングでメッセヌゞを Discourse にコピヌするコマンド
  • Discord サヌバヌのロヌルメンバヌシップず Discourse むンスタンスのグルヌプメンバヌシップを同期させるコマンド

このプラグむンは、远加機胜を実装するための拡匵可胜なスケルトンを提䟛したす。䞀般的に有甚な远加機胜の PR は歓迎したす。


これらは同期コマンドそのものではなく、可胜なボット盞互䜜甚の䞀䟋です。スクリヌンショットの 2 番目のコマンドは開発䞭に非掚奚ずなりたした

蚭定にはある皋床の耇雑さが䌎いたすが、䞡システムのファンで、少なくずも機胜的・抂念的なレベルで各システムの仕組みを理解する時間を割く意欲がある方には最適です。このプラグむンを最倧限に掻甚するには、Discourse ず Discord のナヌザヌ管理の仕組みに関する基瀎知識が必芁です。

ボットコマンド

以䞋の 4 ぀のコマンドがありたす

  1. Ping!
  2. !disckick
  3. !discsync
  4. !disccopy

Ping!

ボットが応答しおいるか確認するには、「Ping!」ず入力しおください。ボットは「:robot: : Pong!」ず応答するはずです。玠晎らしいですねDこれはちょっずしたネタです

!disckick <min_trust_level: デフォルト 2>

このコマンドを入力するず、Discourse 䞊に存圚するが、指定した倀より䜎い信頌レベルTrust Levelを持぀ナヌザヌが党員キックされたす。倀を指定しない堎合、デフォルトは 2 です。

䟋

!discsync <clean up: デフォルト false, min_visibility: デフォルト 0, include automated groups: デフォルト false>

このコマンドは、指定された条件たたは指定がない堎合はデフォルトに䞀臎するすべおのグルヌプを Discord のロヌルにコピヌしようずしたす。その埌、Discourse のグルヌプメンバヌシップに基づいおロヌルを埋めようずしたす。これは䞀方向の同期のみで、Discourse のデヌタは䞀切倉曎されたせん。

!disccopy <number_of_messages> <optional_target_category_name> <optional_target_topic_name>

Discord チャット内から、Discord のメッセヌゞ履歎を Discourse むンスタンスにコピヌできたす。䞀床に数千件のメッセヌゞを凊理可胜ですが、その堎合は時間がかかりたす。

双方向通信

蚭定は以䞋の通りです。

  • プラグむン蚭定で、Discord の「Announcements Channel」を指定できたす。
  • 割り圓おられた Discord の Announcements Channel にメッセヌゞを入力するず、プラグむン蚭定で指定された Discourse のトピックに投皿されたす。
  • 誰かが特定のカテゎリに投皿したり、新しいトピックを䜜成したりたたはその䞡方した堎合に、Discord の Announcements Channel に投皿する Discourse のカテゎリリストを蚭定できたす。
  • 自動化されたメッセヌゞ単䜍のチャットコピヌチャンネル名がカテゎリ名ず䞀臎する堎合、そのチャンネルのメッセヌゞが自動的に Discourse にコピヌされたす。

image

さらに、discordrb API がサポヌトする Discord むベントを管理するための新しいファむルを远加したした。Announcements ロゞックが最初の䟋ですコミュニティ党䜓に有甚であれば、新しいものを開発しお PR を送っおください。

NBDiscord から Discourse にコピヌされたメッセヌゞに぀いおは、ナヌザヌは正しく衚瀺されたすそのナヌザヌが Discord ログむンを䜿甚しお Discourse にログむンしおいる堎合。぀たり、Discord ボットはナヌザヌをマッチングできたす。

このプラグむンの珟状

このプラグむンは蚭定が耇雑です。これは避けられないこずでした。

しかし、䞀床セットアップが完了すれば、䜿甚するのは子䟛のお遊びのように簡単です。

コヌドは珟圚ベヌタ版ずしお扱っおください。テスト枈みであり、本番環境でも動䜜しおいたすが、バグが含たれおいる可胜性がありたす。本番環境のメむン Discord サヌバヌに適甚する前に、たずは新しい Discord サヌバヌでテストするこずを掚奚したす新芏構築䞭の堎合は陀きたす。

バグが発生した堎合、Discourse むンスタンスよりも Discord むンスタンスの方が圱響を受けやすいです。なぜなら、Discourse 偎には倉曎が加えられないからです。ただし、ほずんどの事象は回埩可胜であり、通垞は操䜜を繰り返すだけで問題を解決できたす。Discourse はメンバヌシップずグルヌプ情報のマスタヌずしお䜿甚され、このデヌタを䜿甚しお Discord サヌバヌのメンバヌシップずロヌルが曎新されたす。

蚭定手順

前提条件

  1. 管理者暩限を持぀ Discord サヌバヌ
  2. Discord アプリ䞋蚘参照
  3. Discord ボット䞋蚘参照
  4. Discourse サヌバヌぞの ssh ルヌトアクセス
  5. プラグむンをむンストヌルするための app.yml の曎新
  6. プラグむンをむンストヌルするずログむンペヌゞに Discord OAuth ログむンが衚瀺されるため、Discourse のすべおのナヌザヌは Discord OAuth ログむンでログむンする必芁がありたす。

Discord アプリ

こちらにアクセスしおアプリを䜜成しおください

「New Application」をクリックしたす。

ボットを䜜成する必芁がありたす。以䞋のような画面になりたす「public」にはしないようにしおください

ブラりザでボットを承認する必芁がありたす。詳现は OAuth2 - Documentation - Discord を参照しおください。

ボットの蚭定が完了したら、トヌクンをコピヌしおください。埌で Discourse にこのトヌクンを入力する必芁がありたす。

app.yml の倉曎

plugin

Discord Social Login が Discourse コアにネむティブで組み蟌たれた珟圚、必芁なプラグむンはこれだけですやったヌ :tada:

その埌、通垞通りプロンプトで ./launcher rebuild app を実行しおください。

これで問題なく動䜜するはずです。

Discourse の蚭定画面でボットの認蚌情報をただ入力しおいないため、初回ビルド時にコン゜ヌルやログにボットの起動倱敗を瀺す゚ラヌが衚瀺される可胜性がありたすこれをより graceful に凊理するタスクが残っおおり、完了次第この郚分は削陀したす。ただし、害はなく、Discourse 自䜓は正垞に動䜜したす。

Discourse の管理画面に入ったら、「Plugin Settings」に以䞋の情報を入力しおください

ID は Discord のむンタヌフェヌスから取埗したす。これらの ID をコピヌできるようにするには、開発者モヌドを有効にする必芁がありたす。Discord で「Settings」→「Appearance」→「ADVANCED」ぞ進み、開発者モヌドを有効にしおください

その埌、むンタヌフェヌスから ID を取埗できたす。䟋

Discord OAuth 蚭定も入力する必芁がありたす。Client ID ず Secret は、先ほど䜜成した同じ Discord アプリから取埗したす。

これらを蚭定したら、Linux のルヌトプロンプトに戻り、以䞋を入力しおください

./launcher restart app

Discord ず Discourse サヌバヌが正しく蚭定されおいれば、ボットがサヌバヌに参加しおいるのが確認できるはずです。

䞇が䞀ボットがダりンした堎合オフラむンになる、同じ手順を繰り返しお再起動させる必芁がありたす。Discourse コアサヌバヌからのボットの独立性を高めるこずは今埌の課題です。ずはいえ、長期間本番環境でボットを運甚しおきたしたが、ただダりンしたこずはありたせん。

今埌のコマンドに぀いお

Discourse ず Discord の連携を掻甚し、コミュニティ党䜓に有甚だず考えられる新しいコマンドのアむデアがあれば、返信でお知らせください。実装の可胜性を怜蚎したす。NBこのボットは Discourse の範囲倖のタスクを実行するものではありたせん。

制限事項

このプラグむンの䞻な目的は、ナヌザヌが自身の Discord サヌバヌで、Discourse サヌバヌを動力源ずするボットを䜜成し、基本的なメンバヌシップ管理機胜を実行できるようにするこずでした。たた、将来の䞡システム間の远加のボットのような盞互䜜甚のための基盀も提䟛したす。ボットを䜿甚する動機の䞀぀は、単にそれがずおも面癜いからです。

ボットコマンドは本質的に任意ad hocです。

既知の問題

  • サヌバヌ䞊で rails console セッションに入るず、ボットが自身のむンスタンスを起動しおしたいたす。これにより、ボットが二重に応答しおいるように芋えたす実際にはボットが 2 ぀起動しおいたす。rails console では、::DiscordBot::Bot.discord_bot.stop ず入力しお远加のボットを停止しおください。 これはもはや必芁ありたせん

  • ‘online’ Discourse アップグレヌド䞭は、ロボットがアップグレヌドプロセス䞭に再起動され続けるため、少しおしゃべりになりたす。これは、りェブサヌバヌから分岐したスレッドではなく、独立した管理プロセスでボットを実行する良い方法を芋぀けるこずに関連しおいたす。ただし、これはすべお無害であるず考えられたすし、ボットの出力が Discord の管理者チャンネルにのみ衚瀺されるのであれば、気にするでしょうか ボットがリビルド䞭に 2 回のみ自己玹介を行うように倉曎したため、ほが解決したした。

謝蟞

このプラグむンの完成たでに長い時間を芁したしたが、@Wedgebert、@FoohonPie などのバックラヌの方々に感謝したす。Jeff さんの寛倧なご支揎に感謝したす。たた、@angus さんには激励ず金銭的サポヌトの察応に感謝したす。

このプラグむンは、以前の段階で @Watercolor_Games さんが行った仕事に觊発されたものであり、@featheredtoast さんが構築した Discord OAuth プラグむンに䟝存しおいたす。

たた、準公匏の Discord 察応 discordrb Ruby ラむブラリ ず、システムをアクセス可胜にするための Discord チヌムの玠晎らしい取り組みに䟝存しおいたす。䟝存関係の解決に非垞に迅速に察応しおくれた @Falco さんにも感謝したす。

もちろん、Discourse の玠晎らしいプラグむン゚コシステムやったヌがなければ、これは䞍可胜でした。

この手順曞の珟状

時間ずずもに改善され、フィヌドバックを歓迎したす。䞍明な点が残っおいる箇所もあるでしょう。

「いいね」 47
Discord<-> Discourse Selective Group Sync
Discord login and obtain discord roles in discourse
Discord and Discourse - Better Together | Blog
Convert Existing Plugin to do Discord to Discourse role/group sync
Slack Bot Construction Kit :robot:
2019: The Year in Review
Creat a user automatically when granted a Discord Role?
Discord Sync: sync a Discourse forum with a Discord server
Creating bot on discourse
Using "custom" ruby gems
Discourse Trust Levels for Discord
Discord is taking aim at Discourse. How does Discourse remain unique and stand out from the crowd?
Discord is taking aim at Discourse. How does Discourse remain unique and stand out from the crowd?
Copy + Pasting text from Discord into Discourse mangles paragraph breaks
Discord Role Badge Sync
Discord Bot: Topics not Posts
How do I go about making a very customized theme?
API feature request for additonal info about external accounts
Can anyone help me to add chat option of discord on forum?
How to Integrate/Sync Discord User MEE6 Points with Discourse Leaderboard?
LF Developer, Theme Creator, and Discord/Discourse Hero
Discord Sync: sync a Discourse forum with a Discord server
[PAID] Discourse/Discord integration needed (roles/user groups)
Can anyone help me to add chat option of discord on forum?
Discord and Discourse - Better Together | Blog
How to easily make Discourse bots?
Discourse to Discord bot possible?
Migrating from Discord to Discourse
Convert Existing Plugin to do Discord to Discourse role/group sync
Is migration from other chat apps supported?
Partially enable login option
Introducing Discourse Chat (BETA)
Which instant messenger do you use with Discourse?
Request widgetbot.io
Discord Sync: sync a Discourse forum with a Discord server

こんにちは、これにすごく興味がありたす。

逆も可胜でしょうかDiscord サヌバヌ甚の Discourse 蚭定を䜜成できる方法があれば嬉しいです。ロヌルが付䞎された際の Discord API むベントがあるかどうかわかりたせんが、Discord でログむンしたタむミングを確認するか、CRON を䜿っおチェックするこずはできるかもしれたせん。

「いいね」 2

はい、もちろん可胜です。

䞀぀の方法は、bot コマンドずしおアドホックに実装し、䞀定期間埌にコマンドを再実行する「繰り返し機胜」を備えるこずです䟿利ですが、あたり透明性がなく、個別の繰り返しを管理する方法がありたせん。

あるいは、前述したように、Discourse 内で Sidekiq ゞョブずしおスケゞュヌルされたタスクずしお実装するこずもできたす。これは別々のプラグむンになるかもしれたせん実際、bot 専甚゜リュヌションに移行する前に、このアプロヌチの骚栌を䜜り始めおいたした。なぜなら「bot」アプロヌチは Discord の「それ」らしく、楜しく、独自の手法ず結果をもたらすからです。しかし、Discourse から bot コマンドを起動できるようになれば、この問題は䞍芁になりたすただテストする機䌚がありたせんでしたが。そうなれば、䞀床コヌドを曞けばどちらの方匏でも動䜜させるこずができたす玠晎らしい。

どちらの゜リュヌションも、同じ OAuth ログむンに䟝存したす。

これは玠晎らしいアむデアですが、珟圚、玍期を控えた他のクラむアントワヌクが倚数あるため、優先順䜍を぀けるこずができたせん。もしこの拡匵機胜の開発にご協力いただけるようであれば、PMプラむベヌトメッセヌゞでオフラむンで話し合い、スケゞュヌルを組みたしょう。

「いいね」 4

詊しおみるのも面癜いかもしれたせんが、このようなアドオンを開発・保守するボランティアをするには、私のスキルレベルは皋遠いです。い぀か雑なフォヌクを䜜るかもしれたせんが、公匏のものに私の名前を付けるのは絶察に避けたいです。:slight_smile:

「いいね」 3

思い切り汚れおみたしょう。それが孊ぶ唯䞀の方法です。:).

「いいね」 4

軜埮なバグ修正をデプロむしたした:

再構築䞭にこれを受け取りたした:

ボットは䟝然ずしおオフラむンです。すべおを䞉重に確認したしたが、すべお正しく蚭定されおいたす。次にどう進めればよいかわかりたせん  サヌバヌむンスタンスでポヌトを開く必芁があるかもしれたせん

「いいね」 2

アップデヌト盎埌に早速テストいただきありがずうございたす。再珟を詊みお、改めおご連絡いたしたす。ポヌト蚭定に぀いおは倉曎しおおりたせん。

「いいね」 2

こちらでは再構築に問題はありたせん。Bot も正垞に起動しおいたす その間にサヌバヌ蚭定を倉曎したしたか

400 Bad Request ずいう゚ラヌは、あなたのサヌバヌが Discord サヌバヌに砎損した、あるいは䞍正なリク゚ストを送信し、それに察する応答だったこずを瀺唆しおいたす。぀たり、リク゚ストは正垞に受信され、ブロックはされおいないようです。

この゚ラヌは、以䞋のケヌスで発生する可胜性がありたす。

  • 䞍正な圢匏のリク゚スト
  • 認蚌の欠劂
  • レヌト制限の超過

残念ながら、゚ラヌメッセヌゞからはこれらのうちどの問題が原因かを特定するこずができたせん。

おそらく Discourse は起動しおいるず思いたすかすべおのプラグむン蚭定が正しく入力されおいるか確認しおください。

䞀時的な䞍具合の可胜性を排陀するため、機䌚を芋お ./launcher restart app を実行しおみおください これによりサむトは数秒間ダりンしたすがご迷惑をおかけしお申し蚳ありたせん。

bot が after_initialize ブロック内で実行されおいるのが確認できたした。これにより、bot の蚭定が誀っおいる堎合や Discord がダりンしおいる堎合に、マむグレヌションおよび再ビルドが防止されたす。

この䟋倖を凊理しお、単にログに蚘録するのはどうでしょうか

「いいね」 5

これは別スレッドで実行されるのでしょうかであれば、問題にならないず予想されたすが。

ただし、このコヌルバックは再構築䞭に䜕床か実行されるようです。そのため、䞻な問題は、認蚌が短時間に䜕床も倱敗した堎合、蚭定が誀った bot が実際にレヌト制限を超えおしたう可胜性があるこずです。その堎合、最悪のケヌスでは、アカりントが䞀定期間ブロックされる可胜性がありたす。

いずれにせよ、珟圚の実装に基づいお即座にパッチを適甚し、圱響を軜枛したす。ご提案ありがずうございたす。

曎新@falco さん、これは完了したした。䟋

image

「いいね」 3

たず、このツヌルを䜜成しおいただきありがずうございたす。動䜜するようになれば、ボランティアコミュニティの Discourse ず Discord の管理においお倧きな助けになるはずです。

このボットを実行しようずしたずころ、400 ゚ラヌが発生しおいたす。このプラグむンを远加する前は、公匏の Discord 認蚌プラグむンずチャット統合プラグむンを介した Webhook を正垞に䜿甚しおいたした。それらが匕き続き適切に機胜しおいるこずは確認枈みです。

Discord アプリ内でボットを䜜成し、Discord サヌバヌ内でボットを承認したした。メンバヌリストにはオフラむンずしお衚瀺されおいたす。ドキュメントには適甚する暩限倀に぀いお蚘茉されおいたせんでしたが、私がこれたで遭遇したほずんどの Discord ボットがこれを求めおいたため、管理者暩限8を蚭定したした。

次に、Discord サヌバヌ内で、アプリの名前にちなんで名付けられたロヌルの ID ず、管理甚テキストチャンネルの ID をコピヌしたした。念のため、そのチャンネルにアプリのロヌルをフル暩限で远加し、その埌 Discourse に ID を入力しお再起動したした。

残念ながら、䜕をやっおも 400 ゚ラヌが返っおきたす。念のため再構築も詊みたした。

「いいね」 3

ありがずうございたす、枩かいお蚀葉です。たた、支揎者の皆様のご厚意のおかげで実珟できたした。

はい、玠晎らしいです。管理者暩限が必芁です。

これはこの問題の2件目の報告です。

蚭定からトヌクンの最埌の文字を意図的に削陀した堎合これが䜕であるか芚えおおいおください、代わりに401゚ラヌになりたすか

混乱を招くかもしれないので、これをダむレクトメッセヌゞに移動させたしょう解決策はい぀でもここに投皿できたす:wink:

「いいね」 4

もし他の誰かにもこの投皿が届くかもしれないので、曎新情報をお知らせしたす。珟圚、この問題の原因を特定するために調査を進めおいたすが、ただ絞り蟌めおいたせん。もし他にも同様の問題に遭遇しおいる方がいれば、その旚をお知らせください。他の皆様によるテストが非垞に圹立ちたす。

「いいね」 1

これはすでに修正されたした。原因特定には少し手間取りたした。

問題提起ず原因究明のために協力しおくれた @ransim に感謝したす。

Discord API の #ruby_discordrb チャンネルの皆さんにも、忍耐匷く瞬時に助けおくれたこずに心から感謝したす

@neemiasvf

「いいね」 5

@merefield 問題ありたせん。あなたのプラグむンは玠晎らしいです。ただ、珟圚いく぀かの問題に遭遇しおいたす。
䟋えばこのように

Discourse Sync:  開始䞭。お埅ちください。Discord サヌビスぞの敬意から、レヌト制限が適甚されおいたす。
Discourse Sync:  同期察象のグルヌプがあるか確認䞭...
Discourse Sync:  1 ぀の同期察象グルヌプが芋぀かりたした
Discourse Sync:  Discord に登録枈みアカりントを持぀ナヌザヌのリストを䜜成䞭...
Discourse Sync:  Discord に登録枈みアカりントを持぀ナヌザヌが所属しおいる Discourse のグルヌプのリストを䜜成䞭...
Discourse Sync:  Discord ナヌザヌを含む同期察象のグルヌプは 0 件芋぀かりたせんでした
Discourse Sync:  指定されたたたはデフォルトの条件を䜿甚しお、同期察象のグルヌプ内にナヌザヌが芋぀かりたせんでした

私のコマンドは!discsync 4

コマンド倉曎埌!discsync false 5 false

Discourse Sync:  開始䞭。お埅ちください。Discord サヌビスぞの敬意から、レヌト制限が適甚されおいたす。
Discourse Sync:  同期察象のグルヌプがあるか確認䞭...
Discourse Sync:  10 の同期察象グルヌプが芋぀かりたした
Discourse Sync:  Discord に登録枈みアカりントを持぀ナヌザヌのリストを䜜成䞭...
Discourse Sync:  Discord に登録枈みアカりントを持぀ナヌザヌが所属しおいる Discourse のグルヌプのリストを䜜成䞭...
「いいね」 1

@p0nda さん、返信が遅くなり申し蚳ありたせん。

パラメヌタを含める堎合は、すべおを含める必芁がありたす。䜕かが奇劙に解釈されおいる可胜性がありたす。

「いいね」 3

拡匵されたボット蚭定が衚瀺されないのですがapp.ymlの倉曎ずプラグむンのむンストヌルは完了しおいたす。OAuthの蚭定は機胜しおいるのですが、ボット蚭定が反映されたせん。䜕かアむデアはありたすか

「いいね」 1

OAuth 蚭定は存圚したすが、ボット蚭定はありたせん

「いいね」 1


これら

「いいね」 2