[解決済み】Discord Jsで未定義のプロパティタイトルが読めない。
質問
私が作っているDiscordボットで乱数発生器を作るとき、誰かが
+nhr
というエラーメッセージがコンソールに表示されます。
TypeError: 未定義のプロパティ 'titles' を読み取ることができません。
そして
Unhandled Promise rejection(未処理のプロミス拒否)です。このエラーは キャッチブロックのない非同期関数の内部で、またはリジェクトされた .catch()で処理されなかったプロミス。ノードを終了させるには 処理されないプロミスが拒否された場合、CLIフラグを使用します。
このバグを修正する方法を知っている人はいますか?
コード
if (message.content.startsWith(prefix + 'nhr')) {
//RANDOM PREFIX
var rnumber = Math.floor(Math.random() * 1000000) + 1;
if (message.channel.nsfw) {
api.fetchDoujin(`${rnumber}`).then((doujin) => {
const exampleEmbed = new Discord.MessageEmbed()
.setColor('#ce0606')
.setTitle(doujin.titles.pretty)
.setURL(`https://youtube.com/${rnumber}`)
.addFields(
{ name: 'Digits', value: `${rnumber}` },
{
name: 'Tags',
value: doujin.tags.all.map((tag) => tag.name).join(', '),
},
)
.setImage(doujin.cover.url)
.setFooter('x', 'x');
message.channel.send(exampleEmbed);
});
} else {
const exampleEmbed = new Discord.MessageEmbed()
.setColor('#ffc0cb')
.setTitle('**x**')
.setImage('x');
message.channel.send(exampleEmbed);
}
}
(他に必要なものがあれば、コメントください)
解決方法は?
を使用しているようです。
nhentai
npm パッケージを使用します。問題は、1から1,000,000までの乱数を生成しているのですが、現在の最大のIDは36万を少し超えるものです。もっと大きな数字を生成しているときは必ず
fetchDoujin()
に解決されます。
undefined
ということで
doujin
が存在します。
プロミスの拒否は常に処理する必要があります。メソッドがエラーを投げる可能性がある場合、それをキャッチする必要があります。try/catch ブロックを使うか、あるいは
.then()
メソッドに
.catch()
メソッドもあります。
最後のIDに近い最大数を追加するのがいいかもしれませんね。
if (message.content.startsWith(prefix + 'nhr')) {
let LAST_ID = 360000;
//RANDOM PREFIX
let rnumber = Math.floor(Math.random() * LAST_ID) + 1;
if (message.channel.nsfw) {
api
.fetchDoujin(`${rnumber}`)
.then((doujin) => {
if (!doujin)
return message.channel.send(`Oops, the random ID ${rnumber} is not valid...`);
let exampleEmbed = new Discord.MessageEmbed()
.setColor('#ce0606')
.setTitle(doujin.titles.pretty)
.setURL(`https://youtube.com/${rnumber}`)
.addFields(
{ name: 'Digits', value: `${rnumber}` },
{
name: 'Tags',
value: doujin.tags.all.map((tag) => tag.name).join(', '),
},
)
.setImage(doujin.cover.url)
.setFooter('x', 'x');
message.channel.send(exampleEmbed);
})
.catch((err) => {
message.channel.send('Oops, there was an error');
console.log(err);
});
} else {
let exampleEmbed = new Discord.MessageEmbed()
.setColor('#ffc0cb')
.setTitle('**x**')
.setImage('x');
message.channel.send(exampleEmbed);
}
}
それでもまだ
nhentai-js
ライブラリ
他の質問で使用した
に文字列を渡していることを確認してください。
nhentai.getDoujin()
(数字には
.replace()
メソッド)。
if (message.content.startsWith(prefix + 'nhr')) {
let LAST_ID = 360000;
let chosenNum = Math.floor(Math.random() * LAST_ID) + 1;
if (message.channel.nsfw) {
try {
const res = await nhentai.getDoujin(chosenNum.toString());
const embed = new MessageEmbed()
.setColor('#ce0606')
.setTitle(res.title)
.setImage(res.pages[0])
.setURL(res.link)
.addField('Pages', res.details.pages[0], true)
.addField('Uploaded', res.details.uploaded[0], true)
.setFooter('x', 'x');
if (res.details.languages)
embed.addField('Languages', res.details.languages.join(', '), true);
if (res.details.characters)
embed.addField(
'Top characters',
res.details.characters.slice(0, 10).join(', '),
true,
);
if (res.details.tags)
embed.addField(
'Top tags',
res.details.tags.slice(0, 10).join(', '),
true,
);
return message.channel.send(embed);
} catch (err) {
console.log(err);
return message.channel.send(
'Oops, there was an error. Maybe try again?!',
);
}
} else {
const embed = new MessageEmbed()
.setColor('#ffc0cb')
.setTitle('**x**');
return message.channel.send(embed);
}
}
関連
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?