tulpje_cache/event/
member.rs1use twilight_model::gateway::payload::incoming::{
2 MemberAdd, MemberChunk, MemberRemove, MemberUpdate,
3};
4
5use crate::{Cache, Error, UpdateCache};
6
7impl UpdateCache for MemberAdd {
8 async fn update(&self, cache: &Cache) -> Result<(), Error> {
9 if let Some(mut guild) = cache.guilds.get(&self.guild_id).await? {
10 guild.member_count = guild.member_count.map(|count| count.saturating_add(1));
11 cache.guilds.insert(&guild.id, &guild).await?;
12 }
13
14 cache
15 .cache_member(self.guild_id, self.member.clone())
16 .await?;
17
18 Ok(())
19 }
20}
21
22impl UpdateCache for MemberChunk {
23 async fn update(&self, cache: &Cache) -> Result<(), Error> {
24 if !self.members.is_empty() {
25 cache
26 .cache_members(self.guild_id, self.members.clone())
27 .await?;
28 }
29
30 Ok(())
31 }
32}
33
34impl UpdateCache for MemberRemove {
35 async fn update(&self, cache: &Cache) -> Result<(), Error> {
36 if let Some(mut guild) = cache.guilds.get(&self.guild_id).await? {
37 guild.member_count = guild.member_count.map(|count| count.saturating_sub(1));
38 cache.guilds.insert(&guild.id, &guild).await?;
39 }
40
41 cache.members.remove(&(self.guild_id, self.user.id)).await?;
42 cache
43 .guild_members
44 .remove(&self.guild_id, &self.user.id)
45 .await?;
46
47 cache
48 .user_guilds
49 .remove(&self.user.id, &self.guild_id)
50 .await?;
51
52 if !cache.user_guilds.is_empty(&self.user.id).await? {
54 cache.users.remove(&self.user.id).await?;
55 }
56
57 Ok(())
58 }
59}
60
61impl UpdateCache for MemberUpdate {
62 async fn update(&self, cache: &Cache) -> Result<(), Error> {
63 let key = (self.guild_id, self.user.id);
64 if let Some(mut member) = cache.members.get(&key).await? {
65 member.update_with_member_update(self);
66 cache.members.insert(&key, &member).await?;
67 cache.cache_user(&self.user, Some(self.guild_id)).await?;
68 }
69
70 Ok(())
71 }
72}