【discord.js】ButtonBuilderで行方を眩ませたinteraction.component
解決したいこと
ボタンを押したらButtonStyleを変え、他のボタンはそのまま保持する。
というコードを書いているのですが問題が発生しました。
発生している問題・エラー
TypeError: Cannot read properties of undefined (reading 'customId')
at Client.<anonymous> (/app/index.js:117:51)
該当するソースコード
console.logが多いのは初学者なのでデバックの使い方がわからいので...
生暖かい目で見てください。
for (let i = 0; i < currentComponents.length; i++) {
console.log("[" + i + "]");
console.log("iの中", interaction.component.customId);
for (let j = 0; j < currentComponents[i].components.length; j++) {
console.log(
"[" + i + "]" + "[" + j + "]" +
currentComponents[i].components[j].customId
);
console.log("jの中", interaction.component.customId);
if (
interaction.component.customId ==
currentComponents[i].components[j].customId
) {
console.log("ifの中", interaction.component.customId); //ここまで存在する。
const newButton = new ButtonBuilder()
.setCustomId(interaction.component.customId) //ここには存在しない。
.setLabel(interaction.component.label);
await console.log("ifの中2", interaction.component.customId);
if (currentStyle === ButtonStyle.Success) {
console.log("successの中", interaction.component.customId);
newButton.setStyle(ButtonStyle.Danger); // スタイルを変更
} else if (currentStyle === ButtonStyle.Danger) {
newButton.setStyle(ButtonStyle.Success); // スタイルを変更
}
await console.log("ifの中3", interaction.component.customId);
currentComponents[i].components[j] = newButton;
}
console.log("jの中2", interaction.component.customId);
}
console.log("iの中2", interaction.component.customId);
}
3つのActionRowで制御。
下記イメージ
[
ActionRow {
components: [ [sunset], [bind], [icebox] ]
},
ActionRow {
components: [ [haven], [split], [lotas] ]
},
ActionRow {
components: [ [pearl], [fracture], [breeze], [ascent] ]
}
]
「アセント」を押した際のコンソール
[0]
iの中 ascent
[0][0]sunset
jの中 ascent
jの中2 ascent
[0][1]bind
jの中 ascent
jの中2 ascent
[0][2]icebox
jの中 ascent
jの中2 ascent
iの中2 ascent
[1]
iの中 ascent
[1][0]haven
jの中 ascent
jの中2 ascent
[1][1]split
jの中 ascent
jの中2 ascent
[1][2]lotas
jの中 ascent
jの中2 ascent
iの中2 ascent
[2]
iの中 ascent
[2][0]pearl
jの中 ascent
jの中2 ascent
[2][1]fracture
jの中 ascent
jの中2 ascent
[2][2]breeze
jの中 ascent
jの中2 ascent
[2][3]ascent
jの中 ascent
ifの中 ascent
ifの中2 ascent
successの中 ascent
ifの中3 ascent
コンソールを見ると、ifの中には入れてるはずですが、エラー文を見るとif文の条件の interaction.component.customId
がundefindと表示されている状態。
また、if文の中の
const newButton = new ButtonBuilder()
.setCustomId(interaction.component.customId) //ここには存在しない。
.setLabel(interaction.component.label);
ここも存在undefindになるが、if文を抜けると颯爽と現れるinteraction.component
。
エラーの解決したいです、よろしくお願いいたします。