tulpje_cache/event/
interaction.rs

1use 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        // Cache interaction member
10        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        // Cache interaction user
21        if let Some(user) = &self.user {
22            cache.cache_user(user, None).await?;
23        }
24
25        // Cache resolved interaction data
26        if let Some(InteractionData::ApplicationCommand(data)) = &self.data {
27            if let Some(resolved) = &data.resolved {
28                // Cache resolved users and members
29                for user in resolved.users.values() {
30                    cache.cache_user(user, self.guild_id).await?;
31
32                    // member should always match, because resolved members
33                    // are guaranteed to have a matching resolved user
34                    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                // Cache resolved roles
44                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}