update rate limit indicator on failed message send

this happens when you start the client while already rate-limited
This commit is contained in:
ouwou
2021-04-14 02:11:36 -04:00
parent 9a7a468607
commit 9733ae54c3
8 changed files with 45 additions and 5 deletions

View File

@@ -25,6 +25,7 @@ RateLimitIndicator::RateLimitIndicator()
}
Abaddon::Get().GetDiscordClient().signal_message_create().connect(sigc::mem_fun(*this, &RateLimitIndicator::OnMessageCreate));
Abaddon::Get().GetDiscordClient().signal_message_send_fail().connect(sigc::mem_fun(*this, &RateLimitIndicator::OnMessageSendFail));
}
void RateLimitIndicator::SetActiveChannel(Snowflake id) {
@@ -109,3 +110,15 @@ void RateLimitIndicator::OnMessageCreate(const Message &message) {
UpdateIndicator();
}
}
void RateLimitIndicator::OnMessageSendFail(const std::string &nonce, float retry_after) {
if (retry_after != 0) { // failed to rate limit
const auto msg = Abaddon::Get().GetDiscordClient().GetMessage(nonce);
const auto channel_id = msg->ChannelID;
const auto channel = *Abaddon::Get().GetDiscordClient().GetChannel(channel_id);
const auto rate_limit = *channel.RateLimitPerUser;
const auto sent_time = std::chrono::steady_clock::now() - std::chrono::duration<int>(rate_limit - std::lroundf(retry_after + 0.5f)); // + 0.5 will ceil it
m_times[channel_id] = sent_time;
UpdateIndicator();
}
}