Skip to content

Commit 54a7156

Browse files
committed
fix(guide): return error if no guide page is found
fixes #260
1 parent 66386bc commit 54a7156

File tree

3 files changed

+69
-24
lines changed

3 files changed

+69
-24
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"utilities"
2929
],
3030
"dependencies": {
31-
"@discordjs/builders": "^1.8.0",
31+
"@discordjs/builders": "^1.12.2",
3232
"@discordjs/collection": "^2.1.0",
3333
"@discordjs/rest": "^2.3.0",
3434
"@hapi/boom": "^10.0.1",

src/functions/oramaResponse.ts

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { bold, hyperlink } from '@discordjs/builders';
1+
import { bold, hyperlink, inlineCode, subtext } from '@discordjs/builders';
22
import type { Response } from 'polka';
33
import { EMOJI_ID_GUIDE } from '../util/constants.js';
44
import { findRelevantDocsSection } from '../util/discordDocs.js';
55
import { noCodeLines, resolveResourceFromGuideUrl } from '../util/djsguide.js';
6-
import { prepareResponse } from '../util/respond.js';
6+
import { prepareErrorResponse, prepareResponse } from '../util/respond.js';
77
import { truncate } from '../util/truncate.js';
88

99
type GuideCacheEntry = {
@@ -12,15 +12,27 @@ type GuideCacheEntry = {
1212
};
1313

1414
const cache = new Map<string, GuideCacheEntry>();
15+
const invalid = new Set();
1516

1617
async function getPage(url: string) {
18+
if (invalid.has(url)) {
19+
return null;
20+
}
21+
1722
const cacheEntry = cache.get(url);
1823

1924
if (cacheEntry && cacheEntry.timestamp < Date.now() - 1_000 * 60 * 60) {
2025
return cacheEntry.page;
2126
}
2227

23-
const page = await fetch(url).then(async (res) => res.text());
28+
const res = await fetch(url);
29+
30+
if (res.status === 404) {
31+
invalid.add(url);
32+
return null;
33+
}
34+
35+
const page = await res.text();
2436
cache.set(url, { page, timestamp: Date.now() });
2537

2638
return page;
@@ -31,6 +43,18 @@ export async function oramaResponse(res: Response, resultUrl: string, user?: str
3143
const contentParts: string[] = [];
3244

3345
const docsContents = await getPage(parsed.githubUrl);
46+
47+
if (!docsContents) {
48+
prepareErrorResponse(
49+
res,
50+
[
51+
`Could not find a valid page based on your query ${inlineCode(resultUrl)}`,
52+
subtext('Make sure to select an autocomplete result to ensure an existing article.'),
53+
].join('\n'),
54+
);
55+
return res;
56+
}
57+
3458
const section = findRelevantDocsSection(parsed.anchor ? `#${parsed.anchor}` : parsed.endpoint ?? '', docsContents);
3559

3660
if (section) {

yarn.lock

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -629,18 +629,18 @@ __metadata:
629629
languageName: node
630630
linkType: hard
631631

632-
"@discordjs/builders@npm:^1.8.0":
633-
version: 1.8.1
634-
resolution: "@discordjs/builders@npm:1.8.1"
635-
dependencies:
636-
"@discordjs/formatters": ^0.4.0
637-
"@discordjs/util": ^1.1.0
638-
"@sapphire/shapeshift": ^3.9.7
639-
discord-api-types: 0.37.83
632+
"@discordjs/builders@npm:^1.12.2":
633+
version: 1.12.2
634+
resolution: "@discordjs/builders@npm:1.12.2"
635+
dependencies:
636+
"@discordjs/formatters": ^0.6.1
637+
"@discordjs/util": ^1.1.1
638+
"@sapphire/shapeshift": ^4.0.0
639+
discord-api-types: ^0.38.26
640640
fast-deep-equal: ^3.1.3
641641
ts-mixer: ^6.0.4
642-
tslib: ^2.6.2
643-
checksum: 21e826004ddddf6f9717cbdacafe4ff748d03103634d82883c66f605b068a5ae12a952aaa2558a2c21f3ec717427a12bb9b57f0f8670f8a4ab6a0757bb3b229d
642+
tslib: ^2.6.3
643+
checksum: 45ed668d701eab025847be3215d084e59e222bbfcf529185d04a956b791d4bf3e53d48cf6990071aab3216e9d7cd2bfc5526d2b27eed740aeec7250bab0ffbb9
644644
languageName: node
645645
linkType: hard
646646

@@ -651,12 +651,12 @@ __metadata:
651651
languageName: node
652652
linkType: hard
653653

654-
"@discordjs/formatters@npm:^0.4.0":
655-
version: 0.4.0
656-
resolution: "@discordjs/formatters@npm:0.4.0"
654+
"@discordjs/formatters@npm:^0.6.1":
655+
version: 0.6.1
656+
resolution: "@discordjs/formatters@npm:0.6.1"
657657
dependencies:
658-
discord-api-types: 0.37.83
659-
checksum: 130ab7ba104635d7d0f92f4c3de67dbc60cdab004e9db605e0f2c7f410a9808df8776e4d5d45632597dc7257713dc77bb616ee25bb0827117247b6bebfe35921
658+
discord-api-types: ^0.38.1
659+
checksum: 556b53898f8c6ab8940970e1e2202d25b653649190567cdca14b99cb48f757afa8e0a7022c0f67619f3dc3bc969905cdd6411a7d572ecb005ca9a2d09aac7c62
660660
languageName: node
661661
linkType: hard
662662

@@ -684,6 +684,13 @@ __metadata:
684684
languageName: node
685685
linkType: hard
686686

687+
"@discordjs/util@npm:^1.1.1":
688+
version: 1.1.1
689+
resolution: "@discordjs/util@npm:1.1.1"
690+
checksum: 13f25aa2917de732bdd90e9cee9322b69c8c0a173206e2ce308f1bb177d4ce20a138efdb5b0ec5029a10ebbbde71d4c12ba51354b09db4b488e8de429c393fd4
691+
languageName: node
692+
linkType: hard
693+
687694
"@es-joy/jsdoccomment@npm:~0.41.0":
688695
version: 0.41.0
689696
resolution: "@es-joy/jsdoccomment@npm:0.41.0"
@@ -976,13 +983,13 @@ __metadata:
976983
languageName: node
977984
linkType: hard
978985

979-
"@sapphire/shapeshift@npm:^3.9.7":
980-
version: 3.9.7
981-
resolution: "@sapphire/shapeshift@npm:3.9.7"
986+
"@sapphire/shapeshift@npm:^4.0.0":
987+
version: 4.0.0
988+
resolution: "@sapphire/shapeshift@npm:4.0.0"
982989
dependencies:
983990
fast-deep-equal: ^3.1.3
984991
lodash: ^4.17.21
985-
checksum: a36032ff8fc54056ea21e0cdbbea84c3d80c0c0fb19b2685e14e29111ab9c1172c9273e1e54d49e2a62ba5a393f18b3dab9330d34b97d3519d572e32dd64913d
992+
checksum: d312dd529c3b3d221a8fcd58428d03de2a744a1568ad810f9f75e1f4d5a0387952285b436b37f29141a810f6bbbe310ed3c31882c57d260a744f39beb35649f0
986993
languageName: node
987994
linkType: hard
988995

@@ -2631,6 +2638,13 @@ __metadata:
26312638
languageName: node
26322639
linkType: hard
26332640

2641+
"discord-api-types@npm:^0.38.1, discord-api-types@npm:^0.38.26":
2642+
version: 0.38.30
2643+
resolution: "discord-api-types@npm:0.38.30"
2644+
checksum: ccfe26a82046b82324b92b8a1a5fb753afe787c20d941c64adb1bf7f79cfb07f8e6d2d06b1e3757b801a19b183e9e261f4cab654026cc9320f0397595a5e20ad
2645+
languageName: node
2646+
linkType: hard
2647+
26342648
"doctrine@npm:^2.1.0":
26352649
version: 2.1.0
26362650
resolution: "doctrine@npm:2.1.0"
@@ -7113,7 +7127,7 @@ __metadata:
71137127
dependencies:
71147128
"@commitlint/cli": ^17.7.1
71157129
"@commitlint/config-angular": ^17.7.0
7116-
"@discordjs/builders": ^1.8.0
7130+
"@discordjs/builders": ^1.12.2
71177131
"@discordjs/collection": ^2.1.0
71187132
"@discordjs/rest": ^2.3.0
71197133
"@hapi/boom": ^10.0.1
@@ -7639,6 +7653,13 @@ __metadata:
76397653
languageName: node
76407654
linkType: hard
76417655

7656+
"tslib@npm:^2.6.3":
7657+
version: 2.8.1
7658+
resolution: "tslib@npm:2.8.1"
7659+
checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
7660+
languageName: node
7661+
linkType: hard
7662+
76427663
"tsutils-etc@npm:^1.4.1":
76437664
version: 1.4.2
76447665
resolution: "tsutils-etc@npm:1.4.2"

0 commit comments

Comments
 (0)