1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Discordでボイスチャンネルを移動できるbotを作って3年運用した話

Last updated at Posted at 2025-12-10

3年前に作ったDiscord Botの導入サーバー数が93を超えてたので、100サーバーを達成したいと思い、宣伝の意味も込めて記事を書きます。

こちらからDiscordに追加できます!

目次

はじめに

まずは、このbotがどんなものか、機能をざっくり紹介します。

Discordのボイスチャンネル(VC)で通話しているメンバーを、別のチャンネルへまとめて移動できるbotです。主にゲームコミュニティ向けのbotで、チーム分け機能もあるため、振り分けたチームごとに対応するボイスチャンネルへ自動で移動させることもできます。

204147634-c96a0a1c-a938-457f-afda-93d12533b453.gif

具体例としては、「スマブラの専用部屋でチームビンゴをするために振り分けたい」「ApexやVALORANTのカスタムマッチでVCをチームごとに分けたい」「通話に入ったまま寝ちゃった人を寝落ちチャンネルに移動したい」…などなど、いろんな場面で使えます。

ゲーム大会やコミュニティの交流戦のような人が多いイベント用途から、友達同士のルームで軽くチーム分けしたいといった場面でも、様々なシーンで気軽に使える便利なbotです。

↓ 以下は使えるコマンド一覧です。

ユーザーを指定してボイスチャンネルを移動

/moves (移動先チャンネル) (ユーザー1) (ユーザー2) ・・・

image.png

ボイスチャンネルを指定してその中にいるメンバー全員を移動

/channel (移動元チャンネル) (移動先チャンネル)

image.png

全てのボイスチャンネルから指定のチャンネルにメンバーを集める

/gather [集合先チャンネル]

image.png

チーム分けをしてボイスチャンネルを移動

/teams (チーム1チャンネル) (チーム2チャンネル) [除外メンバー]

image.png
※「チャンネルを移動する」を押すと、分かれたボイスチャンネルに全員を移動できます。

スマブラのキャラクターをランダムに選択

/character (チーム1のキャラクター数) (チーム2のキャラクター数) [Miiファイターを除外]

image.png

↑ これはおまけ。身内からの要望があったので追加しました。

背景

もともとは、ネッ友と遊ぶスマブラのdiscordグループで、チーム分けを楽にするために作ったbotでした。が、気づいたらその友達からさらにその友達へと広がっていき、90以上のサーバーで使ってもらえるほどになっていました。

逸話として、全国のスマブラサークルが集まるスマサー合宿に行ったところ、ネッ友のスマサーに所属している初対面の人たちから「VCチャンネル移動botの開発者」として崇められたことがあります。日常的に使ってくれている人がいると知れたことは大きなモチベーションになりました。

Discordの認証済みbotになるための手引き

導入数が75サーバーを超えたというお祝いともに、Discord公式から一通のDMが届きます。身内とその周辺くらいしか使っていないと思い込んでいたので、このDMが来て初めてユーザーがいることを実感しました。

image.png

Discordでは、botの導入数が100サーバーを超えると、プライバシーやセキュリティの観点から申請が必須になります。全部で項目は7つありますが、主に必要になる作業は以下の4つです。

  1. Discord Developer Portalからチームを作成する
  2. 利用規約とプライバシーポリシーのリンクの追加
  3. 本人確認を行う
  4. (特権インテントを使用する場合)特権インテントの申請を出して承認をもらう

一つずつ説明していきます。

1. Discord Developer Portalからチームを作成する

Discord Developer Portalサイト内でボタンをぽちぽちしながら、新しいチームを作成して、そこにbotアプリを追加する作業をします。既に作成済みの方はスキップできます。

2. 利用規約とプライバシーポリシーのリンクの追加

利用規約とプライバシーポリシーを作成します。新たにWebサイトを立ち上げてホスティングする必要はなく、GitHub上に .md ファイルとして公開するだけで大丈夫そうです。

https://github.com/sakusaku3939/discord-vc-bot/blob/master/Privacy-Policy.md
https://github.com/sakusaku3939/discord-vc-bot/blob/master/Terms-of-Service.md

3. 本人確認を行う

運転免許証やマイナンバーカードなどを用意して、本人確認を行います。複数人チームで運営している場合は、オーナーだけ本人確認ができれば大丈夫です。

4. (特権インテントを使用する場合)申請を出して承認をもらう

botで以下の情報を取得したい場合、特権インテントが必要になります。導入数が75サーバー未満の場合は自由に使えますが、それを超えるとbotの特権インテント申請を出して承認をもらわないと、導入できなくなってしまいます。

特権インテントの一覧

  • PRESENCE INTENT
    • ユーザーのオンライン状態やアクティビティ(ゲームプレイ中など)にアクセスする
  • GUILD_MEMBERS INTENT
    • サーバーのメンバーに関する詳細データを扱う
  • MESSAGE CONTENT INTENT
    • メッセージ本文をbotが取得する

VCチャンネル移動botでは、この中のGUILD_MEMBERS INTENTを使ってサーバー内の全メンバーを取得して、ボイスチャンネルに入っているメンバーを絞り込むことで実現していました。

したがって、その旨を記載しながら英語で申請を送ってみましたが、なんと却下されてしまいました…。以下はサポートからの理由になります。

  • 特権ゲートウェイインテントへのアクセスは、ユーザーにとってユニークで魅力的な機能を提供するためだけに提供しており、この基準を満たしていないと判断したため
  • ボイスチャンネルの管理については、ギルドメンバーリスト全体を解決するのではなく、Discordに組み込まれているモデレーションツールを利用するか、スラッシュコマンド引数で直接提供されるユーザーのメンションかIDで動作するようにボットを再構築できる

要約すると、Discord公式のモデレーションツールで解決できるし、VC移動は/move @userのようにユーザーを直接指定すれば問題なくない?とのことです。

とはいえ、VCチャンネル移動botでは、/channelでボイスチャンネル内にいる全員を移動させたり、チーム分けした後に「チャンネルを移動する」ボタンを押してVCをまとめて移動する、といった機能があります。
image.png

どうしようかと身構えていましたが、調べていくうちに、ボイスチャンネルに入っているメンバー一覧はGUILD_VOICE_STATES権限で取得できることが判明します。
結果、実装を修正するだけで特権インテントに頼らなくとも、これまで通り無事に動かすことができました。

今回の場合は、特権インテントに頼らない実装にできましたが、開発するbotの内容によっては申請が通らず、泣く泣く公開停止にせざるを得ないこともあると思います。

完全無料でbotをホスティングしたい

話は戻りますが、今回botを作る上で苦労したことの1つは、長く公開を続けるために、無料の範囲内でホスティングできるサービスを探すことでした。

Discord Botでスラッシュコマンドに応答できるようにするには、基本的にはサーバーを常時起動しておく必要があります。¥0で常時稼働できるサーバー環境を用意するテクニックは調べればいくつか見つかりますが、今回はその中でもGlitchというサービスを使用しました。

Glitchは、Node.jsのアプリを公開できるホスティングサービスです。Herokuと似たようなサービスで、Glitchは無料プランだと、5分以上アクティブでない状態が続くとスリープします。が、時間は無制限に使える仕組みになっており、加えてアクティブかどうかの判定は、GlitchでホスティングしているアプリのURLへアクセスがあったかどうかで決まります。

そこで、とある記事を参考にしながら、Google Apps Scriptを使って5分毎にPOSTリクエストを送り、スリープを回避することで常時完全無料でホスティングしていました。

image.png

開発当時は自分が高校生だったこともあり、収入もなかったので本当にありがたいサービスでした。(5分おきに自動アクセスしてる自分が言えたことじゃないですが…)

が、Glitchは2025年の7月にサービスを終了してしまいました。

サーバーが終了してた

夏頃は忙しく、いつもの身内グループになかなか顔を出せていなかったのですが、久しぶりにvcに入ったらこんな話題が出てきました。

「最近bot、動いてないよね?」

スリープ回避が失敗しているのかなと思い、Glitchにアクセスしてみると「Project hosting ended on July 8, 2025」の文字が……。そこで初めて、Glitchがサービスを終了していたことを知りました。

image.png

ちょうど75サーバーを超えて、1ヶ月ほど経過したタイミングでした。

メールを確認したところ「Important Changes Coming to Glitch」というタイトルで1度サービス終了の告知メールが届いていたことに、後ほど気付きました。Xも見逃してました。
image.png

急いで移行先を探し、Google CloudのVMの無料枠(Always Free Tier の e2-micro)で問題なく動くことが確認できたため、そちらへ完全に移行しました。

ここから得た学びとしては、

  • Importantが付いたメールはちゃんと目を通すようにしよう。という気持ちになりました(当たり前)
  • Google Apps Scriptを使ったPOSTリクエストは、サービスが終了しても応答が返ってきてしまっていたため、別途サーバー監視の仕組みを用意しておくと良い

と実感しました。

Google Cloud移行後については、今のところ¥0で運用できています。

おわりに

サービス提供から3年が経ち、今後も運用は続けていくつもりなので、興味を持った方はぜひDiscordに導入してみてください!

導入サーバー数1000が夢です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?