tulpje_framework/
interaction.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use twilight_model::{
    application::interaction::InteractionData, gateway::payload::incoming::InteractionCreate,
};

use crate::{context, Error, Metadata};

pub fn parse<T: Clone + Send + Sync>(
    event: &InteractionCreate,
    meta: Metadata,
    ctx: context::Context<T>,
) -> Result<context::InteractionContext<T>, Error> {
    match &event.data {
        Some(InteractionData::ApplicationCommand(command)) => {
            Ok(context::InteractionContext::<T>::Command(
                context::CommandContext::from_context(meta, ctx, event.clone(), *command.clone()),
            ))
        }
        Some(InteractionData::MessageComponent(interaction)) => {
            Ok(context::InteractionContext::<T>::ComponentInteraction(
                context::ComponentInteractionContext::from_context(
                    ctx,
                    meta,
                    event.clone(),
                    *interaction.clone(),
                ),
            ))
        }
        Some(InteractionData::ModalSubmit(data)) => Ok(context::InteractionContext::<T>::Modal(
            context::ModalContext::from_context(ctx, meta, event.clone(), data.clone()),
        )),
        Some(_) => Err(format!("unknown interaction type: {:?}", event.kind).into()),
        None => Err("no interaction data".into()),
    }
}