discord ボットを作成しています。discord.js の v12 を学びました。discord でスパム対策コマンドを作成し、完了したときにコマンドを実行すると、エラー TypeError: Cannot read が発生しました。プロパティ「hasPermission」は未定義であり、これが私のコードです。ちなみにこれはコマンド ハンドラーです
const AntiSpam = require("./spam.js");
const cooldown = new Set();
client.on("message", async (message, member) => {
if (!message.member.hasPermission('ADMINISTRATOR')) {
if(message.author.bot) return;
if (!message.guild) return;
if(!message.guild.members.cache.get(client.user.id).hasPermission("ADMINISTRATOR")) return;
if(!message.member) return;
let spam = await db.fetch(`spamEngel_${message.guild.id}`)
if(!spam) return;
AntiSpam(client, message);
}
});
同じことを行う 4 つの if が連続している場合は、それらを or (||) で組み合わせるとよいでしょう。
– DBS
2020 年 9 月 3 日 10:39
メッセージまたはメンバーのいずれかが未定義です。このため、このエラーが発生します。
– シャバム・ヴェルマ
2020 年 9 月 3 日 10:39
------------------------
message.member ギルド メンバーとしてのメッセージの作成者を表します。それ以外の場合は未定義になります。その場合は message.author を探す必要があります。彼らのドキュメントを見てください https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=member
3
エラーが発生します > message.author.hasPermission は関数ではありません
– TheClawNz
2020 年 9 月 3 日 10:55
作成者がギルドメンバーではない場合、権限を確認することはできません。ユーザー (discord.js.org/#/docs/main/stable/class/User) には hasPermissions 関数がありません
– ウィリアム・リッツィ
2020 年 9 月 4 日 11:08
ギルドメンバーは DM では常に未定義になります。ギルド チャネルで送信されるメッセージである必要があります
– ウィリアム・リッツィ
2020 年 9 月 4 日 11:17
------------------------
client.on("message", async (message, member) => でメンバーを定義しました。この行からメンバーを削除すると、メンバーは次の行によって定義されます。message.member を使用してメッセージを送信します。それ以外は、コードは良さそうです。 「if」の数を減らすことができることを覚えておいてください。すべてを 1 つの if に入れて && で接続します (例: if( x!= 2 && x > 0))