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) = &self.member
11 && let Some(guild_id) = self.guild_id
12 && let Some(user) = &member.user
13 {
14 cache.cache_user(user, self.guild_id).await?;
15
16 cache
17 .cache_borrowed_partial_member(guild_id, member, user.id)
18 .await?;
19 }
20
21 if let Some(user) = &self.user {
23 cache.cache_user(user, None).await?;
24 }
25
26 if let Some(InteractionData::ApplicationCommand(data)) = &self.data
28 && let Some(resolved) = &data.resolved
29 {
30 for user in resolved.users.values() {
32 cache.cache_user(user, self.guild_id).await?;
33
34 if let Some(guild_id) = self.guild_id
37 && let Some(member) = resolved.members.get(&user.id)
38 {
39 cache
40 .cache_borrowed_interaction_member(guild_id, member, user.id)
41 .await?;
42 }
43 }
44
45 if let Some(guild_id) = self.guild_id {
47 cache
48 .cache_roles(guild_id, resolved.roles.values().cloned())
49 .await?;
50 }
51 }
52
53 Ok(())
54 }
55}