見出し画像

簡易的なDiscordの認証BOTを作った話

2024/05/24現在、サーバーがお亡くなりになってしまい使えません!
復旧時期は未定です、、、

Discord.js v14で簡易的な認証BOTを作りました!
https://discord.com/api/oauth2/authorize?client_id=1234056990398087189&permissions=8&scope=bot%20applications.commands
名前は「たこくらぶ」です。
ちなみにこの名前は僕のフレンドの「いかくらぶ」が名付けました。
prefixは、記事執筆時点では「rn!」です(/helpで表示されます)
※コマンドは管理者のみ有効です(一部コマンド除く)
↓サポートサーバー↓
https://discord.gg/AnVyWgzyMg


機能紹介

簡易認証機能

簡易認証機能って何、、、?
簡易なので大した認証ボタンではないのですが、セルフBOTか人かを分けるためのものです。(分けれてるかはわからない。)

認証メッセージ

上の画像の緑色のverifyというボタンを押すと、事前に指定したロールをつけます。
※事前にロールを指定していない場合は認証機能が使えません
(指定するコマンドは /verifysettings )
このBOTでは、認証時に使用するデータベースが二種類あります。
1つ目は、Globalデータベースで、このデータベースを使用することにより、GlobalBANされている人はロールがつかないようになります。
まあGlobalBANって言ってもそんなに大したことはないですが、、、
BANって書いてますが、GlobalBANされてる人が押してもBANするわけではありません。
2つ目は、Serverデータベースで、このデータベースはサーバーごとにデータベースを分けています。
GlobalBAN機能は使えません。
デフォルト設定はServerになっています。
また、アカウントの作成日が指定した期間以内のユーザーに別のロールをつけることも出来ます。(デフォルトでは期間は30日)
期間を変更するコマンドはまだありません、、、
(Globalデータベースを使用する場合は強制的に30日に固定されます。)
関連コマンド
・[prefix]verifybutton
・/verifymessage
・/verifysettings
・/showstatus

VC入退室ログ

名前の通りボイスチャンネルの入退室ログを指定したチャンネルに送信します。
こちらは事前にログを送信するチャンネルをしておく必要があります。
(指定するコマンド /setvoicenoticechannel )
また、デフォルトで無効になっているので、チャンネルを指定しても動くわけではないです。
(ログの取得を有効にするコマンド /voicenotice )

入退室ログの例

入室、移動、退室をログとして表示します。
VCでの活動が活発なサーバーにおすすめです!
関連コマンド
・/setvoicenoticechannel
・/voicenotice
・/showstatus

自動管理機能

自動管理とか言ってますが、そんなに大したものじゃないです。
機能としては、
・Discord招待URL削除機能
・クラッシュGIF削除機能
・スパム疑惑のあるメッセージ削除機能
です。
デフォルトで全て無効になっています。
有効にしても、メッセージを送信したユーザーに管理者権限がある場合はすべての機能で除外されます。
(有効無効を管理するコマンド /botsettings )

Discordの招待URL削除機能は、Discordの招待URLが送信されたら削除する機能です。
短縮URLなどにも対応はしていますが、discord.gg/[文字列]など、招待URLにhttpが含まれていないものは検知しません。(修正するかもしれないししないかもしれない)

クラッシュGIF削除機能は、クラッシュGIFが送信されたら削除する機能です。
というか、メッセージ削除ついでに送信したユーザーをBANする機能です。
開発者が、クラッシュGIFを送信されてスマホがクソ重くなってブチギレたのでBANすることにしました。
4ヶ月ほどこの機能使ってますが、今のところは誤検知ありません。
(ただ、自分としては一番誤検知が多いんじゃないかなと思ってます。)
コミュニティサーバーにおすすめです。
(身内鯖とかのほうが誤検知発生しやすいかも)

スパム疑惑のあるメッセージ削除機能は、その名の通りスパム疑惑のあるメッセージを検知したら削除する機能です。
(削除ついでにユーザーを12時間タイムアウトします。)
これも身内鯖だと誤検知するかもしれません。
対策されたら困るので、仕組みは言えませんが、結構有能な機能だと自分では思っています。

BOTが違いますが、こんな感じになります。(スパム疑惑のあるメッセージ削除機能)

まあ全て誤検知の可能性があるので有効にする場合は自己責任って感じです。
(誤検知したらmaka_7264までお願いします。修正できるものは修正するかもしれません。)(サポートサーバー https://discord.gg/AnVyWgzyMg )
Discordの招待URL削除機能は、これから「一部のチャンネルだけ除外する機能」と「指定した招待URLだけは除外する機能」をつけようと思っています。
スパム疑惑のあるメッセージ削除機能は、一部メッセージ削除されないので、いつか修正しようと思っています。
(時間がないんだ、、、)
これらの機能は、検知時に事前に指定したチャンネルにログを送信する機能があります。(必須ではありませんが、指定することを推奨します。)
(チャンネルを指定するコマンド /serversettings )
関連コマンド
・/botsettings
・/serversettings
・/showstatus

注意事項

認証機能は、事前にロールを指定しないと、エラーが出て認証できません。
また、指定したロールが、ボットについてる最上級のロールよりも権限が上にある場合ロールを付けられず、エラーが出るので注意が必要です。

VC入退室ログ機能は、チャンネルを指定していない場合は出力されません。
また、機能を有効にしていない場合も出力されません。

自動管理機能は誤検知する可能性があるβ版の機能です。
有効にする場合は自己責任でお願いします。
誤検知した場合はできればmaka_7264まで報告お願いします。
(サポートサーバー https://discord.gg/AnVyWgzyMg )
また、検知ログを送信するチャンネルを指定していない場合はログは出力されません。

コマンド説明

[prefix]verifybutton

認証メッセージを、コマンドを送信したチャンネルに送信します。

認証メッセージの例

[prefix]timeout 時間(h) 理由(スペース開けずに) タイムアウトするユーザーをメンション

メンションしたメンバーを指定した時間指定した理由でタイムアウトします。
実際にやったことはないですが、時間のところを0にしたら多分タイムアウト解除されます。

[prefix]kick 理由(スペース開けずに) kickするユーザーをメンション

メンションしたメンバーを指定した理由でkickします。

[prefix]ban メッセージを削除する期間(0~7) 理由(スペース開けずに) banするユーザーをメンション

メンションしたメンバーを指定した期間のメッセージを削除し指定した理由でbanします。
メッセージを削除する期間というのは、banするユーザーの現時点からいつまでのメッセージを削除するかを指定する機能です。
日数で指定してください。

[prefix]unban 理由(スペース開けずに) unbanするユーザーのidを指定

idで指定したメンバーをunbanします。
メンションでは出来ません。

[prefix]inq (記事執筆時点では使用できません。)

サーバー内でお問い合わせ機能が使用できるようになるコマンドです。
記事執筆時点で内部のコードが7割ほどしか出来ていないのでこのコマンドは使用できません。
使用できるようになったらX(旧Twitter)でお知らせします。
多分この記事も編集されます。

/ban banするユーザー (理由) (メッセージを削除する期間)

指定したメンバーを指定した期間のメッセージを削除し指定した理由でbanします。
()は任意のオプションです。
スラッシュコマンドです。

/botsettings 有効・無効にする機能 有効・無効

自動管理機能の設定です。
指定した機能を有効・無効にします。
デフォルトで全て無効になっているので、有効にしたい機能がある場合はこれを使用してください。
スラッシュコマンドです。

/contact

このコマンドは開発者にメールでお問い合わせができます。
メールアドレスは開発者名義のものになっています、、、
このコマンドを送信すると、モーダルウインドウが開きます。
モーダルウインドウで件名と知らせたいことを入力して送信を押すと、開発者にメールが届きます。
スラッシュコマンドです。

モーダルウインドウの例

/help

スラッシュコマンド以外のコマンドのヘルプを表示します。
スラッシュコマンドのヘルプはこの記事を参考にしてください。
スラッシュコマンドです。

/kick kickするユーザー (理由)

指定したメンバーを指定した理由でkickします。
()は任意のオプションです。
スラッシュコマンドです。

/mcserver ipアドレス JavaかBEか

指定したipアドレスのマインクラフトのサーバーステータスを表示します。
Java版かBE版かを選択してください。
ちなみにちゃんと動くかはわかりません。(???)
スラッシュコマンドです。

/ping

botのサーバーからdiscordのサーバーまでのpingの値を返します。
スラッシュコマンドです。

/register 登録・解除

スラッシュコマンドの登録、解除です。
多分使う場面無いです。
登録すると、スラッシュコマンドの量が倍になります。(?)
スラッシュコマンドです。

/serversettings 管理情報(一般向け)を表示するチャンネル 管理情報(モデレーター向け)を表示するチャンネル

自動管理機能のログを表示するチャンネルを指定するコマンドです。
一般向けには誰がどういう措置を取られたかのログを流します。
モデレーター向けには詳細を表示します。
スラッシュコマンドです。

/setvoicenoticechannel VC入退室ログを表示するチャンネル

VC入退室ログを表示するチャンネルを指定するコマンドです。
これを指定しただけではログは表示されません。
表示するコマンドは /voicenotice です。
スラッシュコマンドです。

/showstatus DiscordサーバーかBOTサーバーか

ステータスを表示します。
Discordサーバーを指定した場合、コマンドを送信したサーバーの設定情報を表示します。
認証データベースがtrueの場合はGlobal、falseの場合はServerです。
サポート番号は、お問い合わせの際に必要になるかもしれないものです。

/showstatusの例

BOTサーバーを指定した場合、BOTの現在のステータスを表示します。
するはずだったんですが、、、力尽きでコードかけなかったのでまだ使えません。
気分が乗ったらコード書きます。
スラッシュコマンドです。

/timeout タイムアウトするユーザー 時間(day) [時間(hour)] [時間(min)] [時間(sec)] [理由] [解除する(解除する場合に指定)]

[]は任意のオプションです。
指定したユーザーを指定した時間指定した理由でタイムアウトします。
時間の合計が7週間以上は指定できません。
また、解除指定した場合は必須オプションの時間(day)はなにに指定しても大丈夫です。
スラッシュコマンドです。

/unban unbanするユーザーのid

idで指定したユーザーをBan解除します。
スラッシュコマンドです。

/verifymessage

認証メッセージを送信したチャンネルに送信します。
スラッシュコマンドです。

/verifysettings 本認証時につけるロール (仮認証時につけるロール) (データベース)

()は任意のオプションです。
認証の設定です。
仮認証とは、アカウントの作成日が指定した期間以内のユーザーにつけるロールです。
データベースはGlobalとServerがあります。
デフォルトはServerです。
スラッシュコマンドです。

/voicenotice

VC入退室ログのオンオフをします。
このコマンドでログの取得をオンにしても、ログを送信するチャンネルを指定していない場合はログが出力されません。
(チャンネルを指定するコマンド /setvoicenoticechannel )

よくある(ありそうな)質問

認証機能でエラーが出てロールがつきません!どうしたらいい?

サーバーの設定を見直してみてください。
BOTについているロールの中で最上級(ロールの位置が一番上)のロールよりも下にあるロールのみBOTはロールを付与できます。

「インタラクションに失敗しました」って出る!なにこれ?

「インタラクションに失敗しました」が出る条件は、
・BOTからDiscordに向けて何かしらのデータが3秒以内に送信されなかった場合
・Discord側でエラーが出た場合
の2つのどちらかの場合です。
2つ目のDiscord側でエラーが出た場合はどうすることも出来ないので、もう一回試してみるか、discordが対処するまで待つしかありません。
1つ目の、BOTからdiscordに向けてデータが送信されなかった場合については、
・BOT内部でエラーが出てデータが送信されなかった
・BOTを動かしているサーバーが再起動している
・BOTを動かしているサーバーが起動していない
・BOT内部に処理コードがない
・処理はできたがBOTがDiscordに3秒以内にデータを送信できなかった・しなかった
のどれかです。
ただ、僕が作ったBOTは、BOT内部でエラーが出た場合、エラーが出た旨を知らせるようにしているので原因は他の4つのうちどれかになります。
だいたい2つ目、3つ目のBOTを動かしているサーバーが再起動している・起動していないのどちらかだと思うので、時間をおいて再度試してみてください。
尚BOTが長時間(5分以上)オフラインの場合はサポートサーバーまでご報告お願いします。

エラーが出たとのメッセージが出た!何をすればいい?

エラーが出た場合、BOTからエラーが出た旨を知らせるメッセージを表示します。
メッセージにはエラーの内容は出ませんが、StopCodeが表示されます。

認証機能ででたエラーメッセージの例

認証機能でエラーが出た場合は権限を見直してみてください。
それ以外でエラーが出た場合は、サポートサーバーまでお願いします。
また、エラーを開発者に知らせる場合はStopCodeを一緒に知らせてください。
StopCodeがあると、エラーが出た時点で開発者向けのエラーメッセージが表示されていますので、解決策を提示または修正ができます。

エラーが出た場合に開発者に知らせるメッセージ

StopCodeが表示されないエラーに関してはサポート対象外(というかだいたい権限がないだけ)なので、エラーメッセージを参考にサーバーの設定を見直してみてください。

ソースコードがほしいんだけど

一部機能、荒らし防止のために使用しているコードが有り、対策防止の為に公開していません。
その他の部分のコードは公開するつもりではありますが、忙しくてできていません、、、
時間があるときに公開できるよう準備しておきます。

追加して欲しい機能があるんだけど

サポートサーバーまでお願いします。
便利そう、良さげだと思った機能は追加します。
忙しいので機能を追加するのが遅れるかもしれませんがご了承ください。
「技術的には可能です」と言われたら無理だと思ってください。

スラッシュコマンドのインタラクションに失敗した!使える人もいるのになぜ?

あなたにそのサーバーでの管理者権限がありません。

スラッシュコマンド見にくい!

開発者も思っています。
なんか提案があればサポートサーバーまでお願いします。
ちなみに開発者は指示厨は大嫌いなので指示するのはやめてください最悪BOT使えなくします。
「こここういう表示の仕方にしたら良さげじゃないですか?」みたいな感じでお願いします。

レスポンスが遅い!/pingしても遅くないのになんで?

サーバーのスペックが足りません。
諦めてください。
あまりにも遅かったりエラーでまくったり落ちまくったりしたら対処します。
あとは大体DiscordAPIのせいなので文句はDiscordにおねがいします。

BOT入れられないんだけど!

BOTが所属しているサーバーが100サーバーに達した場合、開発者がDiscordに認証手続きをしないとそれ以上サーバーに追加することが出来ません。
あまりにも需要が多い場合は認証手続き行うつもりです。

なんでBOT入れるときに管理者権限あげないといけないの?

個別の設定がめんどくさかったからです。
管理者権限オフにしても、KickとかBANとかメッセージ履歴を見るなどの権限があれば使えます。
管理者権限オフにしてエラーが出た場合サポート対象外とします。
まあサポート対象外と言っておきながらエラーは開発者に送信されるのでサポートサーバーで言ってみる価値はあるかもしれません。
管理者権限があるからと言って荒らしたりはしないので安心してください。(信頼できない場合は使ってもらわなくて結構です。)

認証機能に弾かれた!

あなたBANされてます諦めて
異議申し立てはそのサーバーの主に言うか、サポートサーバーまで。
また、クラッシュGIFを一度でも送信した場合、開発者が死ぬほどクラッシュGIF嫌いなのでGlobalBAN解除しません。
誤検知の場合は解除しますので申し訳ございませんがお問い合わせください。

開発者からの応答がない!なんで?

忙しすぎて死んでるんだと思います多分しらんけど
急用であれば/contactでメールでメッセージを送信するか、開発者のX(Twitter)のDMまでお願いします。

明らかにスパム疑惑のあるメッセージなのに検知しないんだけど

自動管理機能有効していない場合は有効にしてください。
また、ただの連投や画像でのスパムは対応してないのでProBotとかと併用して対策してください。

BOTのサーバー設定を初期化したい!

サポートサーバーでその旨お伝えください。
なんとかします。

最後に(宣伝含む)

コメント

依頼があって「たこくらぶ」BOTを作ってみました。
開発始めてプログラミングしてたらいつの間にか10時間立ってました(爆笑)
書いたコードのファイルサイズは64KBでした。
まあ6万文字ぐらいは打ったかな、、、(AIのアシストあり(←チート))
途中でインテント地獄に出会い発狂していましたが、そこそこプログラミングは楽しかったです。
別に記事をフォローしてくれてもいいんだよ、、、?

BOTの宣伝

・自動翻訳BOT
https://note.com/maka_7264/n/nfd8d30ac6c5d
42サーバーに導入されています。(2024/04/30時点)
70サーバーに導入されています。(2024/05/15時点)
使えてるのかは知りません(笑)

サーバーの宣伝

・なじみサーバー
https://discord.gg/rqFVRcPsAZ
結構いい人が多くて大半が変人の雑談サーバーです。
海外の方も大勢いらっしゃいます!
開発してる間僕もボイチャにいさせてもらいました!
基本何でもサーバーみたいな感じなのでぜひ!
ちなみに自分はオーナーではなく管理者で、「なじみ」という人のサーバーです。(なじみがなじみサーバーで一番の変人です。)
あ、荒らしと出会い厨は来ないでね。

この記事が気に入ったらサポートをしてみませんか?