LoginSignup
1
1

More than 1 year has passed since last update.

Discord.jsで特定のユーザーのみが利用できるコマンドを作る

Posted at

今回はdiscord.jsを利用し、特定のユーザーのみが利用できるコマンドを作って行きたいと思います

なぜそんなことをするの?

botのシャットダウンや、プレミアム機能を付けるときに必要だからです

1. 環境

OS: Windows10
エディタ: VisualStudioCode
node v17.1.0
discord.js v13.6.0

2. 必要パッケージ

  • discord.js

npm install discord.jsでインストールしておきましょう

3. 作り方

1. Botの基礎を作る

作業フォルダにて、index.jsを作成します

index.js
const { Client, Intents } = require('discord.js')
const client = new Client({
    disableEveryone: true, 
    intents: [ 
        Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS
    ],
})

const prefix = "!" // ここはコマンドの接頭辞です。好きなものに変更しましょう
const token = "xxxxxxxxxxxxxxxx" // 自分のDiscordTokenを入力してください

// 起動した際に行う処理
client.on('ready', () => {
    console.log(`${client.user.tag}でログインしました`)
})



// ここに処理を書いていく


client.login(token)

その中にこれを入力してください

実行します
node index.js
これでBotが起動したはずです

できてなかったらTokenが違ったり、サーバーに未導入、またはコードが間違っている可能性があります

2. 特定のユーザーが使えるコマンドを作る

今回は前回作ったGbanコマンドを改良します

index.js
// メッセージを受け取ったときに行う処理
client.on('message', async(message) => {
    // 送信者がBot、またはDM、コマンドの接頭辞から始まってなかった場合無視する
    if (message.author.bot || !message.guild || !message.content.toLowerCase().startsWith(client.config.prefix)) return;
    const args = message.content.slice(client.config.prefix.length).trim().split(/ +/g);
    // コマンドが入力されてなかったら無視

    if(message.content === `${prefix}gban`) { // もしもコマンドがgbanだったら
       if(messsage.author.id !== "実行できる人のID") return message.reply("あなたに実行する権限がありません")
        const gbanId = args[0]
        const reason = args[1]
        if(!gbanId) return message.reply('GbanIDを入力してください')
        if(!reason) return message.reply('理由を入力してください')

        client.guilds.cache.forEach(g => { // Botが参加しているすべてのサーバーで実行
            try {
                g.members.ban(gbanId, {reason}) // メンバーをBAN
                console.log(g.name + "でのGBANに成功しました"); // 成功したらコンソールに出す
            } catch(e) {
                console.log(g.name + "でのGBANの執行に失敗しました。\n" + e); // エラーが出たとき
            }
            message.reply('Gbanを執行しました')
        })
    }
})

これが今回作ったコードです
前回と何が違うかというと、

index.js
if(!message.member.permissions.has('ADMINISTRATOR')) return message.reply('あなたに権限がありません');

この行を消して、

index.js
if(messsage.author.id !== "実行できる人のID") return message.reply("あなたに実行する権限がありません")

これに置き換えました。
実行できる人のIDのところは、自分のIDとかにしておいてください。

全体像

index.js
const { Client, Intents } = require('discord.js')
const client = new Client({
    disableEveryone: true, 
    intents: [ 
        Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS
    ],
})

const prefix = "!" // ここはコマンドの接頭辞です。好きなものに変更しましょう
const token = "xxxxxxxxxxxxxxxx" // 自分のDiscordTokenを入力してください

// 起動した際に行う処理
client.on('ready', () => {
    console.log(`${client.user.tag}でログインしました`)
})

// メッセージを受け取ったときに行う処理
client.on('message', async(message) => {
    // 送信者がBot、またはDM、コマンドの接頭辞から始まってなかった場合無視する
    if (message.author.bot || !message.guild || !message.content.toLowerCase().startsWith(client.config.prefix)) return;
    const args = message.content.slice(client.config.prefix.length).trim().split(/ +/g);
    // コマンドが入力されてなかったら無視

    if(message.content === `${prefix}gban`) { // もしもコマンドがgbanだったら
        if(!message.member.permissions.has('ADMINISTRATOR')) return message.reply('あなたに権限がありません'); // 管理者権限を持っていなかったら実行しない

        const gbanId = args[0]
        const reason = args[1]
        if(!gbanId) return message.reply('GbanIDを入力してください')
        if(!reason) return message.reply('理由を入力してください')

        client.guilds.cache.forEach(g => { // Botが参加しているすべてのサーバーで実行
            try {
                g.members.ban(gbanId, {reason}) // メンバーをBAN
                console.log(g.name + "でのGBANに成功しました"); // 成功したらコンソールに出す
            } catch(e) {
                console.log(g.name + "でのGBANの執行に失敗しました。\n" + e); // エラーが出たとき
            }
            message.reply('Gbanを執行しました')
        })
    }
})

client.login(token)

node index.js
と入力して起動してください!

4. 使い方

!gban <Gbanしたい人のID> <理由>

IDのところを消したりして、実際に動いているかどうかなどを確認できたらオッケー👌

5. 最後に

今回はDiscordのGbanコマンドの改良をしました。
Discord.jsの多機能Botを作るシリーズとか始めたら面白そうです。
次回からそれ、やってみたいと思います。
CommandHandler、EventHandler、MongoDBなども使っていくので次回も見てください!

次回引き続き作成していこうと思っています!

次回: Discord.jsで多機能Botを作る #1

概要

Discord: ! ゆとがめす / YutoGames ᵈᵉᵛ#0001
YouTube: 𝒀𝒖𝒕𝒐𝑮𝒂𝒎𝒆𝒔【yt-YouTube】
Twitter: @YutoGamesYT_YG

参考にしたサイト

Discord.js Guide

1
1
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
1