🐽

Discord Botで特定の招待URLから自動ロール付与を設定しよう

2024/06/28に公開

自動ロール付与機能について、特定の招待URLから入ったアカウントにだけロールを付与したい場合の記事が見当たらなかったので、ChatGPTに聞いて作ってもらった時の記録。Renderを使いました。
何かの役に立てば幸いです。
以下、手順です。ちなみに記事もGPTに書いてもらってます。

簡単にできる!Discord Botで自動ロール付与を設定しよう

こんにちは!今回はプログラミングの知識がなくても簡単にできる、Discord Botを使って新しいメンバーに自動でロールを付与する方法を紹介します。この記事では、Renderというホスティングサービスを使ってBotをデプロイし、設定を行います。

事前準備

必要なもの

  • Discordアカウント
  • GitHubアカウント
  • Renderアカウント

ステップ1: Discord Developer PortalでBotの設定

1. Botを作成

  1. Discord Developer Portalにアクセスし、ログインします。
  2. 右上の「New Application」をクリックし、Botの名前を入力して「Create」をクリックします。

2. Botトークンを取得

  1. 左側のメニューから「Bot」を選択します。
  2. 「Add Bot」をクリックし、「Yes, do it!」を選択してBotを作成します。
  3. 「TOKEN」セクションで「Reset Token」をクリックし、新しいトークンをコピーします。これは後で使います。

3. Botをサーバーに招待

  1. 左側のメニューから「OAuth2」を選択し、「OAuth2 URL Generator」をクリックします。
  2. 「SCOPES」で「bot」を選択し、「BOT PERMISSIONS」で以下の権限をチェックします:
    • Manage Roles
    • Manage Channels
    • View Audit Log
    • Manage Guild
    • Create Instant Invite
  3. 生成されたURLをコピーし、ブラウザで開いてBotをサーバーに招待します。

ステップ2: プロジェクトの準備

1. プロジェクトディレクトリを作成

ターミナルを開き、以下のコマンドを実行してプロジェクトディレクトリを作成します。

mkdir discord-bot
cd discord-bot

2. package.jsonを作成

以下のコマンドを実行して、package.jsonを作成します。

npm init -y

3. 必要なパッケージをインストール

以下のコマンドを実行して、discord.jsパッケージをインストールします。

npm install discord.js

ステップ3: コードの作成

1. index.jsファイルを作成

以下のコードをindex.jsファイルにコピーします。

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildInvites] });

const TOKEN = process.env.DISCORD_TOKEN; // 環境変数からトークンを取得
const GUILD_ID = 'あなたのサーバーID'; // サーバーID
const ROLE_ID = '付与するロールのID'; // 付与するロールのID
const INVITE_CODE = '特定の招待コード'; // 特定の招待コード(コード部分のみ)

client.once('ready', async () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('guildMemberAdd', async (member) => {
    console.log(`New member joined: ${member.user.tag}`); // 新しいメンバーが参加したときにログを表示
    if (member.guild.id === GUILD_ID) {
        try {
            const invites = await member.guild.invites.fetch();
            console.log(`Fetched invites: ${invites.size}`); // 招待情報を取得したときのログを表示
            const invite = invites.find(inv => inv.code === INVITE_CODE);
            if (invite) {
                const role = member.guild.roles.cache.get(ROLE_ID);
                if (role) {
                    await member.roles.add(role);
                    console.log(`Assigned role to ${member.user.tag}`);
                } else {
                    console.log('Role not found');
                }
            } else {
                console.log(`Invite with code ${INVITE_CODE} not found`);
            }
        } catch (error) {
            console.error(`Error fetching invites: ${error.message}`);
        }
    }
});

client.on('error', console.error);

client.login(TOKEN);

2. 環境変数を設定

Botのトークンを環境変数に設定するため、.envファイルを作成し、以下の内容を記述します。

DISCORD_TOKEN=あなたのBotトークン

ステップ4: GitHubリポジトリの準備

1. Gitリポジトリを初期化

ターミナルで以下のコマンドを実行してGitリポジトリを初期化します。

git init

2. ファイルの追加とコミット

変更をステージングしてコミットします。

git add .
git commit -m "Initial commit"

3. リモートリポジトリの追加

GitHubで新しいリポジトリを作成し、以下のコマンドでリモートリポジトリを追加します。

git remote add origin https://github.com/your-username/your-repository.git

4. コードのプッシュ

コードをGitHubリポジトリにプッシュします。

git push -u origin main

ステップ5: Renderでデプロイ

1. Renderアカウントの作成

Renderの公式サイトにアクセスし、アカウントを作成します。

2. 新しいBackground Workerの作成

ダッシュボードで「New」ボタンをクリックし、「Background Worker」を選択します。

3. Gitリポジトリの連携

デプロイするGitHubリポジトリを選択します。

4. プロジェクトの設定

  • Name: 任意のプロジェクト名を入力
  • Region: デプロイ先のリージョンを選択
  • Branch: デプロイするGitブランチを選択(通常は main
  • Start Command: node index.js を入力

5. 環境変数の設定

「Environment Variables」セクションに移動し、以下の環境変数を追加します:

  • Key: DISCORD_TOKEN
  • Value: Botのトークン

6. デプロイの開始

「Create Background Worker」ボタンをクリックしてデプロイを開始します。

ステップ6: デプロイの確認

1. Renderダッシュボードでログを確認

Botが正しく起動し、エラーが発生していないことを確認します。新しいメンバーが参加した際にログが表示され、ロールが正しく付与されていることを確認します。

これで、特定の招待コードを使ってサーバーに参加したメンバーに自動でロールを付与する設定が完了です!簡単でしたね。何か質問があれば、コメントで教えてください。それでは、素晴らしいDiscordライフを!

Discussion