Skip to content

Commit de0f8ff

Browse files
committed
request: move rate limit check
1 parent 9edfba7 commit de0f8ff

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

sleepy_discord/client.cpp

+20-20
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,26 @@ namespace SleepyDiscord {
123123
default: response.statusCode = BAD_REQUEST; break; //unexpected method
124124
}
125125

126+
//rate limit check
127+
if (response.header["X-RateLimit-Remaining"] == "0" && response.statusCode != TOO_MANY_REQUESTS) {
128+
std::tm date = {};
129+
//for some reason std::get_time requires gcc 5
130+
std::istringstream dateStream(response.header["Date"]);
131+
dateStream >> std::get_time(&date, "%a, %d %b %Y %H:%M:%S GMT");
132+
const time_t reset = std::stoi(response.header["X-RateLimit-Reset"]);
133+
const std::string& xBucket = response.header["X-RateLimit-Bucket"];
134+
#if defined(_WIN32) || defined(_WIN64)
135+
std::tm gmTM;
136+
std::tm*const resetGM = &gmTM;
137+
gmtime_s(resetGM, &reset);
138+
#else
139+
std::tm* resetGM = std::gmtime(&reset);
140+
#endif
141+
const time_t resetDelta = (std::mktime(resetGM) - std::mktime(&date)) * 1000;
142+
rateLimiter.limitBucket(bucket, xBucket, resetDelta + getEpochTimeMillisecond());
143+
onDepletedRequestSupply(bucket, resetDelta);
144+
}
145+
126146
//status checking
127147
switch (response.statusCode) {
128148
case OK: case CREATED: case NO_CONTENT: case NOT_MODIFIED: break;
@@ -170,26 +190,6 @@ namespace SleepyDiscord {
170190
} break;
171191
}
172192

173-
//rate limit check
174-
if (response.header["X-RateLimit-Remaining"] == "0" && response.statusCode != TOO_MANY_REQUESTS) {
175-
std::tm date = {};
176-
//for some reason std::get_time requires gcc 5
177-
std::istringstream dateStream(response.header["Date"]);
178-
dateStream >> std::get_time(&date, "%a, %d %b %Y %H:%M:%S GMT");
179-
const time_t reset = std::stoi(response.header["X-RateLimit-Reset"]);
180-
const std::string& xBucket = response.header["X-RateLimit-Bucket"];
181-
#if defined(_WIN32) || defined(_WIN64)
182-
std::tm gmTM;
183-
std::tm*const resetGM = &gmTM;
184-
gmtime_s(resetGM, &reset);
185-
#else
186-
std::tm* resetGM = std::gmtime(&reset);
187-
#endif
188-
const time_t resetDelta = (std::mktime(resetGM) - std::mktime(&date)) * 1000;
189-
rateLimiter.limitBucket(bucket, xBucket, resetDelta + getEpochTimeMillisecond());
190-
onDepletedRequestSupply(bucket, resetDelta);
191-
}
192-
193193
handleCallbackCall();
194194
}
195195
onResponse(response);

0 commit comments

Comments
 (0)