Properly implement member cache

This commit is contained in:
Natsu Kagami 2024-08-05 13:41:08 +02:00
parent 26b72d90ef
commit e77930c8db
Signed by: nki
GPG key ID: 55A032EB38B49ADB

View file

@ -88,11 +88,11 @@ impl MemberCache {
) -> crate::Result<Arc<[Member]>> { ) -> crate::Result<Arc<[Member]>> {
let now = Utc::now(); let now = Utc::now();
let mut map = self.per_guild.lock().await; let mut map = self.per_guild.lock().await;
let entry = map.entry(guild_id); let entry = map.get(&guild_id);
// Check cache // Check cache
if let Entry::Occupied(oe) = &entry { if let Some(oe) = &entry {
if oe.get().timeout > now { if oe.timeout > now {
return match &oe.get().value { return match &oe.value {
Some(v) => Ok(v.clone()), Some(v) => Ok(v.clone()),
None => bail!("guild members for {} unavailable", guild_id), None => bail!("guild members for {} unavailable", guild_id),
}; };
@ -105,17 +105,18 @@ impl MemberCache {
.await .await
.ok() .ok()
.map(|v| v.into()); .map(|v| v.into());
match &entry map.insert(
.or_insert(Expiring::new( guild_id,
Expiring::new(
members.clone(), members.clone(),
now + chrono::Duration::seconds(if members.is_some() { now + chrono::Duration::seconds(if members.is_some() {
VALID_CACHE_SECONDS VALID_CACHE_SECONDS
} else { } else {
INVALID_CACHE_SECONDS INVALID_CACHE_SECONDS
}), }),
)) ),
.value );
{ match members {
Some(v) => Ok(v.clone()), Some(v) => Ok(v.clone()),
None => bail!("guild members for {} unavailable", guild_id), None => bail!("guild members for {} unavailable", guild_id),
} }