りょうです。
今回はdjs v14の権限の設定、確認とうについての記事です。
それではれっつごー👍
PermissionsBitField
discord.js v13で使われていたPermissions
がv14でPermissionsBitFieldに変更されました。
- const { Permissions } = require('discord.js');
+ const { PermissionsBitField } = require('discord.js');
内容的には特に変更はありません。
よく使われる奴ら置いときます。
この形で使うようにしてください。↓
Permissions.BitField.Flages.権限名
権限名 | 内容 |
---|---|
Administrator | 管理者 |
KickMembers | メンバーのキック |
BanMembers | メンバーのBAN |
ViewChannels | チャンネルの閲覧 |
SendMessages | メッセージの送信 |
ManageMessages | メッセージ管理(削除等) |
ManageChannels | チャンネル管理(作成、削除) |
ManageRoles | ロールの管理(作成、削除) |
ManageWebhooks | ウェブフックの管理(作成、削除) |
ReadMessageHistory | メッセージ履歴の閲覧 |
Connect | VCへの接続 |
Speak | VCでの発言 |
MuteMembers | VCでのメンバーのミュート |
権限を持っているかの確認
権限の確認にはmember.permissions.has
を使用します。
メンバー(実行者)が権限を持っているか確認(今回は管理者権限)
テキストコマンドの場合↓
if (!message.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
return
}
スラッシュコマンドの場合↓
if (!interaction.member.permissions.has(PermissionsBitField.Flags.Administrator)) {
return
}
bot自身が権限を持っているか確認
テキストコマンドの場合↓
if (!message.guild.members.me.permissions.has(PermissionsBitField.Flags.Administrator)) {
return
}
スラッシュコマンドの場合↓
if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.Administrator)) {
return
}
!ping
などのようなテキストコマンドであればmessage.member.permissions.has
です。
スラッシュコマンドの場合はmessage
のかわりにinteractions
を使うので間違えないように注意。
これを使用することで特定の権限を持つユーザーのみが実行できるコマンドの実装が可能になります。
チャンネルの権限の変更
チャンネルの権限をいじるのはpermissionOverwrite
を使用します。
ユーザーID、ロールIDなどで指定します。
allowで許可する権限、denyで禁止する権限を設定します。
また、everyoneロールに関してはguild.roles.everyone
で指定できます。
チャンネルの閲覧を許可し、メッセージの送信を禁止している例↓
message.channel.permissionOverwrites.set([
{
id: 'ロールID または メンバーID',
allow: [PermissionsBitField.Flags.ViewChannel],
deny: [PermissionsBitField.Flags.SendMessages],
type: 'role または member'
}
], '理由');
type
の部分はロールIDを入力した場合はroleに、メンバーIDを入力した場合はmemberにしてください。
まとめ
権限の設定、確認方法を知っておくとbot開発に幅が出ます。
チケットの作成や特定権限持ちにだけ実行できるコマンドなどの実装もできるようになるのでさっさと覚えておきましょう。
こんなのがほしいとかあればコメントしてもらえれば書くかもです。
Discordに湧く荒らしの情報や対策方法の共有をしている界隈最大規模の自鯖↓
https://discord.gg/ESRGwGQhxc