Skip to content

Commit fe418f7

Browse files
committed
fix discord error handling
1 parent 7b165c0 commit fe418f7

File tree

2 files changed

+35
-57
lines changed

2 files changed

+35
-57
lines changed

services/libs/integrations/src/integrations/discord/api/getMembers.ts

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,27 @@ import axios from 'axios'
22
import { DiscordApiMember, DiscordGetMembersInput, DiscordGetMembersOutput } from '../types'
33
import { IProcessStreamContext } from '../../../types'
44
import { getRateLimiter } from './handleRateLimit'
5+
import { handleDiscordError } from './errorHandler'
56

67
async function getMembers(
78
input: DiscordGetMembersInput,
89
ctx: IProcessStreamContext,
910
): Promise<DiscordGetMembersOutput> {
1011
const rateLimiter = getRateLimiter(ctx)
11-
try {
12-
let url = `https://discord.com/api/v10/guilds/${input.guildId}/members?limit=${input.perPage}`
13-
if (input.page !== undefined && input.page !== '') {
14-
url += `&after=${input.page}`
15-
}
16-
const config = {
17-
method: 'get',
18-
url,
19-
headers: {
20-
Authorization: input.token,
21-
},
22-
}
2312

13+
let url = `https://discord.com/api/v10/guilds/${input.guildId}/members?limit=${input.perPage}`
14+
if (input.page !== undefined && input.page !== '') {
15+
url += `&after=${input.page}`
16+
}
17+
18+
const config = {
19+
method: 'get',
20+
url,
21+
headers: {
22+
Authorization: input.token,
23+
},
24+
}
25+
try {
2426
await rateLimiter.checkRateLimit('getMembers')
2527
await rateLimiter.incrementRateLimit()
2628
const response = await axios(config)
@@ -35,19 +37,10 @@ async function getMembers(
3537
timeUntilReset,
3638
}
3739
} catch (err) {
38-
if (err.response.status === 429) {
39-
ctx.log.warn(
40-
`Rate limit exceeded in Get Members. Wait value in header is ${err.response.headers['x-ratelimit-reset-after']}`,
41-
)
42-
return {
43-
records: [],
44-
nextPage: input.page,
45-
limit: 0,
46-
timeUntilReset: err.response.headers['x-ratelimit-reset-after'],
47-
}
40+
const newErr = handleDiscordError(err, config, { input }, ctx)
41+
if (newErr) {
42+
throw newErr
4843
}
49-
ctx.log.error({ err, input }, 'Error while getting members from Discord')
50-
throw err
5144
}
5245
}
5346

services/libs/integrations/src/integrations/discord/api/getMessages.ts

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,28 @@ import axios from 'axios'
22
import { DiscordApiMessage, DiscordParsedReponse, DiscordGetMessagesInput } from '../types'
33
import { IProcessStreamContext } from '../../../types'
44
import { getRateLimiter } from './handleRateLimit'
5+
import { handleDiscordError } from './errorHandler'
56

67
async function getMessages(
78
input: DiscordGetMessagesInput,
89
ctx: IProcessStreamContext,
9-
showError = true,
1010
): Promise<DiscordParsedReponse> {
1111
const rateLimiter = getRateLimiter(ctx)
12-
try {
13-
let url = `https://discord.com/api/v10/channels/${input.channelId}/messages?limit=${input.perPage}`
14-
if (input.page !== undefined && input.page !== '') {
15-
url += `&before=${input.page}`
16-
}
17-
const config = {
18-
method: 'get',
19-
url,
20-
headers: {
21-
Authorization: input.token,
22-
},
23-
}
2412

13+
let url = `https://discord.com/api/v10/channels/${input.channelId}/messages?limit=${input.perPage}`
14+
if (input.page !== undefined && input.page !== '') {
15+
url += `&before=${input.page}`
16+
}
17+
18+
const config = {
19+
method: 'get',
20+
url,
21+
headers: {
22+
Authorization: input.token,
23+
},
24+
}
25+
26+
try {
2527
await rateLimiter.checkRateLimit('getMessages')
2628
await rateLimiter.incrementRateLimit()
2729
const response = await axios(config)
@@ -37,27 +39,10 @@ async function getMessages(
3739
timeUntilReset,
3840
}
3941
} catch (err) {
40-
if (err.response.status === 429) {
41-
ctx.log.warn(
42-
`Rate limit exceeded in Get Messages. Wait value in header is ${err.response.headers['x-ratelimit-reset-after']}`,
43-
)
44-
return {
45-
records: [],
46-
nextPage: input.page,
47-
limit: 0,
48-
timeUntilReset: err.response.headers['x-ratelimit-reset-after'],
49-
}
50-
}
51-
if (!showError) {
52-
return {
53-
records: [],
54-
nextPage: '',
55-
limit: 0,
56-
timeUntilReset: 0,
57-
}
42+
const newErr = handleDiscordError(err, config, { input }, ctx)
43+
if (newErr) {
44+
throw newErr
5845
}
59-
ctx.log.error({ err, input }, 'Error while getting messages from Discord')
60-
throw err
6146
}
6247
}
6348

0 commit comments

Comments
 (0)