今回は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を作成します
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コマンドを改良します
// メッセージを受け取ったときに行う処理
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を執行しました')
})
}
})
これが今回作ったコードです
前回と何が違うかというと、
if(!message.member.permissions.has('ADMINISTRATOR')) return message.reply('あなたに権限がありません');
この行を消して、
if(messsage.author.id !== "実行できる人のID") return message.reply("あなたに実行する権限がありません")
これに置き換えました。
実行できる人のIDのところは、自分のIDとかにしておいてください。
全体像
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