0
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の作成手順 (vc入退出通知botを作る)

Last updated at Posted at 2025-10-02

作成の流れ

botの作成

{1B3A3B72-4891-4EF4-98CE-46240310D3AE}.png

  • ログイン画面遷移後、画面の指示に従いログインする
    {0A380652-770D-496F-B721-6BE969D12777}.png

  • ログイン後、画面上部にある「New Application」からbotを作成する
    {A7A8C142-36F4-4847-A876-50B2CF7FDA2C}.png

  • 任意のbotの名前を入力。開発者の利用規約および開発者ポリシーを一読し、同意する場合のみチェックボックスを埋めて、「Create」を押下する
    {3B929C24-D866-4863-B3AD-46B3F925B913}.png

  • 人間である場合のみチェックボックスを埋める。(笑)
    {F4FC11F1-BA0A-4577-A733-DA6A55DD9363}.png

  • 下記の画面が表示されれば、botの作成は完了!
    {263753ED-38F1-4F94-A8AC-36A8C0C56878}.png

botの設定

  • 画面左のサイドバーから「Bot」を押下し遷移
    {EB4739EC-DF10-4ADB-A0B2-CBE8A2322E58}.png

  • (任意)アイコンbotのアイコンを設定したい人は、ここを編集する。今回は、ボイスチャンネルに関連するbotなので、電話のロゴを設定した
    {FEF1FFA0-5B10-4FB5-A7AB-E2EB90069AD6}.png

  • トークンを作成・コピーしておく.ソースコード作成時に仕様するためどこかにメモしておく
    {56A881BA-D7D1-4A5D-AC2D-00DD41D3128C}.png

  • 「Authorization Flow」> 「Requires OAuth2 Code Grant」がoffになっていることを確認。onの場合はoffに変更する
    {973A2071-8BC4-4522-B94F-0F0764938F11}.png

  • 下記説明を読み、必要に応じて「Privileged Gateway Intents」> 「Presence Intent」,「Server Members Intent」,「Message Content Intent」をonにする。わからなければすべてonにしても問題ない

    Presence Intent        ・・・ ユーザーのオンライン状況オンライン/オフライン/取り込み中など)の取得
    Server Members Intent  ・・・ サーバーのメンバー情報(名前やID、参加状況)の取得
    Message Content Intent ・・・ ユーザーが送ったメッセージ本文を取得

{D1751B3A-ACFA-404F-A328-F3194E1C63D8}.png

  • 画面左のサイドバーから「OAuth2」を押下し遷移
    {B739DB36-E40B-4EA7-813E-834F9D385CAD}.png

  • 「OAuth2 URL Generator」 から「bot」にチェックを入れる
    {4E842E7B-7FEC-46FF-A0D5-10555126E510}.png

  • 上記手順後、その下に「BOT PERMISSIONS」という欄が表示される.作成したいbotの用途に応じて、権限を選択する.今回は,テストサーバーにbotを招待するため,管理者権限(Administrator)を与える
    {C69F1733-B3BE-4094-975A-B0C066E054C9}.png

  • 権限選択後、画面下部に「Generated URL」が生成されるので、コピーし、別タブでリンクにアクセスする
    {0DDC5D7E-A449-4B5C-8BB3-799C49881D8C}.png

    {C7521794-3A58-4410-B71A-C82029E18118}.png

  • 下記画面が表示されるので、追加したいサーバーを選択し、「はい」を押下する
    {53A12882-4337-4477-8EF8-C815EF7609D8}.png

  • 確認画面にて権限を確認し、問題がなければ「認証」を押下する
    {0700B81D-F5EF-47BA-B947-2E32787661AF}.png

  • 下記画面が表示されれば設定完了!
    {BA2DBF6C-CBB4-429F-83BE-9AF2296BE727}.png

  • オフラインにbotの名前が表示されているはず
    {FBCDC03E-261A-44F0-8A43-3FDFF17DE284}.png

ソースコード作成

今回作るファイルは下記

env
index.js
package.json
package-lock.json
  1. envファイル
envファイル
DISCORD_BOT_TOKEN=bot作成時にコピーしておいたトークンをコピペ
  • index.jsを書く前に、テキストチャンネルIDを取得する
    • 取得方法
      • 通知を送りたいテキストチャンネルに、適当に文言を送信し、マウスカーソルを合わせ、「その他」を押下
        {CE61EBC1-BB6D-41C0-9D84-BA14A827B322}.png
      • 展開したメニューから、「メッセージリンクをコピー」を選択・押下
        image.png
      • コピーしたリンクから、チャンネルIDを抽出する.下記のチャンネルIDをメモしておくこと
        https://discord.com/channels/<サーバーID>/<チャンネルID>/<メッセージID>
index.js
require('dotenv').config();

const http = require("http");
http.createServer(function (request, response) {
  response.writeHead(200, { "Content-Type": "text/plain" });
  response.end("Discord bot is active now \n");
}).listen(3000);

const { Client, GatewayIntentBits } = require("discord.js");

const LOG_CHANNEL_ID = "メモしたログチャンネルIDをコピペ";

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
    GatewayIntentBits.GuildVoiceStates,
  ],
});

client.login(process.env.DISCORD_BOT_TOKEN);

client.once("ready", () => {
  console.log("bot is ready!");
});

client.on("voiceStateUpdate", (oldState, newState) => {
  let newUserChannel = newState.channel;   
  let oldUserChannel = oldState.channel;
    
  const logChannel = newState.guild.channels.cache.get(LOG_CHANNEL_ID);

  if (!oldUserChannel && newUserChannel) {
    logChannel.send(`${newState.member.user.username}${newUserChannel.name} を開始。 @everyone`);
  } else if (!newUserChannel && oldUserChannel) {
    logChannel.send(`${oldState.member.user.username}${oldUserChannel.name} を終了。`);
  }
});

if (!process.env.DISCORD_BOT_TOKEN) {
  console.log("please set ENV: DISCORD_BOT_TOKEN");
  process.exit(0);
}

サーバー準備

今回サーバーには、Bot-Hosting.netを使用する。

  • Bot-Hosting.netのアカウント作成
    Bot-Hosting.netにアクセスし、「Get started for free」押下

{9429E2BF-830E-4AD3-8CC3-C441B796D105}.png

すると下記画面が開くので、「Earn Coins」を押下
{A1502F69-7E6C-4FCF-8EA9-98BB7F70FB46}.png

  • 無料コイン1枚取得を10回実施し、10コイン取得する
    (毎日10コイン取得でき、プランに応じて必要分取得すれば問題なく常時稼働できる。Starterの場合10コイン/週)
    {E947ABF4-FE14-4EDC-899F-B17FBC2D19A4}.png

  • 10コイン取得した後、「Create Server」を押下
    {73C8286B-D086-49C3-B814-4E8C6C1034AE}.png

  • 「Server name」 に任意のサーバー名を入力、「Select the Discord Bot langage」は、「Node.js」を選択し、「Next」を押下
    {C1D2EA19-341A-45BA-9E25-1B2CCE53CA0A}.png

  • 「CREATE SERVER」 ページに遷移後、「Starter」プランを押下する。(先ほど取得したコインで1週間稼働可能)
    {46AD0CC5-C898-40A0-91C5-C4707B770836}.png

  • 下記のコンソールの画面が表示されれば完了!
    {730E7E7E-EE0E-4E2D-A25A-ACDB3C245C6C}.png

デプロイ手順

  • 画面上部から「files」タブを選択
    {56B6CDB6-620D-456D-A776-D2F9169BE67B}.png

* 画面遷移後「Upload」を押下し、ソースコード作成にて作成したソースを選択し配置する。
{C2A2811A-4427-448F-BA01-47B1829EB2B1}.png

{787D73F9-5B24-4D9E-B424-1010BB8EF4B3}.png

* 画面上部から「Console」タブを選択し、コンソール上部から「Start」ボタンを押下
{C9ED8863-1419-463D-8459-045020E70A70}.png

  • 「bot is ready!」と出力される&コンソール下の「Uptime」に時間が動いていたら完了!
    {75412094-40D2-480B-8A83-F488259DB5EB}.png
    {56DD587E-6DE8-4100-82B3-4C2F29B9591C}.png

動作確認

  • 確認項目1
     botを招待したサーバーを確認し、botがオンラインであることを確認する
    {4A2C2AAB-7156-494B-AF81-C04CA197B681}.png

  • 確認項目2
    vcに入退出したとき、指定したテキストチャンネルに通知されているか。
    image.png

    image.png

問題なし!これにて終了!

0
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
0
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?