use crate::{context::DiscordContext, error::Result, route::Route, types::*};
impl<T: DiscordContext + Send + Sync> SlashCommandOps for T {}
#[allow(async_fn_in_trait)]
pub trait SlashCommandOps: DiscordContext {
async fn get_global_commands(&self, application_id: &ApplicationId) -> Result<Vec<ApplicationCommand>> {
self.http().get(Route::GetGlobalCommands { application_id: application_id.get() }).await
}
async fn create_global_command(&self, application_id: &ApplicationId, req: CreateCommandRequest) -> Result<ApplicationCommand> {
self.http().post(Route::CreateGlobalCommand { application_id: application_id.get() }, req).await
}
async fn get_global_command(&self, application_id: &ApplicationId, command_id: &CommandId) -> Result<ApplicationCommand> {
self.http().get(Route::GetGlobalCommand { application_id: application_id.get(), command_id: command_id.get() }).await
}
async fn edit_global_command(&self, application_id: &ApplicationId, command_id: &CommandId, req: CreateCommandRequest) -> Result<ApplicationCommand> {
self.http().patch(Route::EditGlobalCommand { application_id: application_id.get(), command_id: command_id.get() }, req).await
}
async fn delete_global_command(&self, application_id: &ApplicationId, command_id: &CommandId) -> Result<()> {
self.http().delete(Route::DeleteGlobalCommand { application_id: application_id.get(), command_id: command_id.get() }).await
}
async fn bulk_overwrite_global_commands(&self, application_id: &ApplicationId, commands: Vec<CreateCommandRequest>) -> Result<Vec<ApplicationCommand>> {
self.http().put(Route::BulkOverwriteGlobalCommands { application_id: application_id.get() }, commands).await
}
async fn get_guild_commands(&self, application_id: &ApplicationId, guild_id: &GuildId) -> Result<Vec<ApplicationCommand>> {
self.http().get(Route::GetGuildCommands { application_id: application_id.get(), guild_id: guild_id.get() }).await
}
async fn create_guild_command(&self, application_id: &ApplicationId, guild_id: &GuildId, req: CreateCommandRequest) -> Result<ApplicationCommand> {
self.http().post(Route::CreateGuildCommand { application_id: application_id.get(), guild_id: guild_id.get() }, req).await
}
async fn edit_guild_command(&self, application_id: &ApplicationId, guild_id: &GuildId, command_id: &CommandId, req: CreateCommandRequest) -> Result<ApplicationCommand> {
self.http().patch(Route::EditGuildCommand { application_id: application_id.get(), guild_id: guild_id.get(), command_id: command_id.get() }, req).await
}
async fn delete_guild_command(&self, application_id: &ApplicationId, guild_id: &GuildId, command_id: &CommandId) -> Result<()> {
self.http().delete(Route::DeleteGuildCommand { application_id: application_id.get(), guild_id: guild_id.get(), command_id: command_id.get() }).await
}
async fn bulk_overwrite_guild_commands(&self, application_id: &ApplicationId, guild_id: &GuildId, commands: Vec<CreateCommandRequest>) -> Result<Vec<ApplicationCommand>> {
self.http().put(Route::BulkOverwriteGuildCommands { application_id: application_id.get(), guild_id: guild_id.get() }, commands).await
}
async fn create_interaction_response(&self, interaction_id: &InteractionId, interaction_token: &str, req: CreateInteractionResponseRequest) -> Result<()> {
self.http().post_no_response(Route::CreateInteractionResponse { interaction_id: interaction_id.get(), interaction_token }, req).await
}
async fn get_original_interaction_response(&self, application_id: &ApplicationId, interaction_token: &str) -> Result<Message> {
self.http().get(Route::GetOriginalInteractionResponse { application_id: application_id.get(), interaction_token }).await
}
async fn edit_original_interaction_response(&self, application_id: &ApplicationId, interaction_token: &str, req: CreateFollowupMessageRequest) -> Result<Message> {
self.http().patch(Route::EditOriginalInteractionResponse { application_id: application_id.get(), interaction_token }, req).await
}
async fn delete_original_interaction_response(&self, application_id: &ApplicationId, interaction_token: &str) -> Result<()> {
self.http().delete(Route::DeleteOriginalInteractionResponse { application_id: application_id.get(), interaction_token }).await
}
async fn create_followup_message(&self, application_id: &ApplicationId, interaction_token: &str, req: CreateFollowupMessageRequest) -> Result<Message> {
self.http().post(Route::CreateFollowupMessage { application_id: application_id.get(), interaction_token }, req).await
}
async fn edit_followup_message(&self, application_id: &ApplicationId, interaction_token: &str, message_id: &MessageId, req: CreateFollowupMessageRequest) -> Result<Message> {
self.http().patch(Route::EditFollowupMessage { application_id: application_id.get(), interaction_token, message_id: message_id.get() }, req).await
}
async fn delete_followup_message(&self, application_id: &ApplicationId, interaction_token: &str, message_id: &MessageId) -> Result<()> {
self.http().delete(Route::DeleteFollowupMessage { application_id: application_id.get(), interaction_token, message_id: message_id.get() }).await
}
async fn respond_with_message(&self, interaction_id: &InteractionId, interaction_token: &str, content: &str) -> Result<()> {
self.create_interaction_response(interaction_id, interaction_token, CreateInteractionResponseRequest::message(content)).await
}
async fn respond_ephemeral(&self, interaction_id: &InteractionId, interaction_token: &str, content: &str) -> Result<()> {
self.create_interaction_response(interaction_id, interaction_token, CreateInteractionResponseRequest::ephemeral(content)).await
}
async fn defer_interaction(&self, interaction_id: &InteractionId, interaction_token: &str) -> Result<()> {
self.create_interaction_response(interaction_id, interaction_token, CreateInteractionResponseRequest::defer()).await
}
async fn get_application_command_permissions(&self, application_id: &ApplicationId, guild_id: &GuildId, command_id: &CommandId) -> Result<serde_json::Value> {
self.http().get(Route::ApplicationCommandPermissions { application_id: application_id.get(), guild_id: guild_id.get(), command_id: Some(command_id.get()) }).await
}
async fn get_all_application_command_permissions(&self, application_id: &ApplicationId, guild_id: &GuildId) -> Result<Vec<serde_json::Value>> {
self.http().get(Route::ApplicationCommandPermissions { application_id: application_id.get(), guild_id: guild_id.get(), command_id: None }).await
}
async fn edit_application_command_permissions(&self, application_id: &ApplicationId, guild_id: &GuildId, command_id: &CommandId, permissions: Vec<serde_json::Value>) -> Result<serde_json::Value> {
#[derive(serde::Serialize)]
struct Body {
permissions: Vec<serde_json::Value>,
}
self.http().put(Route::ApplicationCommandPermissions { application_id: application_id.get(), guild_id: guild_id.get(), command_id: Some(command_id.get()) }, Body { permissions }).await
}
}