tulpje_cache/event/
interaction.rs1use twilight_model::{
2 application::interaction::InteractionData, gateway::payload::incoming::InteractionCreate,
3};
4
5use crate::{Error, UpdateCache};
6
7impl UpdateCache for InteractionCreate {
8 async fn update(&self, cache: &crate::Cache) -> Result<(), Error> {
9 if let (Some(member), Some(guild_id)) = (&self.member, self.guild_id) {
11 if let Some(user) = &member.user {
12 cache.cache_user(user, self.guild_id).await?;
13
14 cache
15 .cache_borrowed_partial_member(guild_id, member, user.id)
16 .await?;
17 }
18 }
19
20 if let Some(user) = &self.user {
22 cache.cache_user(user, None).await?;
23 }
24
25 if let Some(InteractionData::ApplicationCommand(data)) = &self.data {
27 if let Some(resolved) = &data.resolved {
28 for user in resolved.users.values() {
30 cache.cache_user(user, self.guild_id).await?;
31
32 if let (Some(guild_id), Some(member)) =
35 (self.guild_id, &resolved.members.get(&user.id))
36 {
37 cache
38 .cache_borrowed_interaction_member(guild_id, member, user.id)
39 .await?;
40 }
41 }
42
43 if let Some(guild_id) = self.guild_id {
45 cache
46 .cache_roles(guild_id, resolved.roles.values().cloned())
47 .await?;
48 }
49 }
50 }
51
52 Ok(())
53 }
54}