Made join command defer (timeout protection), fixed paused track bug
This commit is contained in:
		
							parent
							
								
									f3dff49c06
								
							
						
					
					
						commit
						877f758172
					
				| @ -44,6 +44,21 @@ pub async fn respond_message( | |||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | pub async fn update_message( | ||||||
|  |   ctx: &Context, | ||||||
|  |   command: &ApplicationCommandInteraction, | ||||||
|  |   options: EmbedMessageOptions, | ||||||
|  | ) { | ||||||
|  |   if let Err(why) = command | ||||||
|  |     .edit_original_interaction_response(&ctx.http, |message| { | ||||||
|  |       message.embed(|embed| make_embed_message(embed, options)) | ||||||
|  |     }) | ||||||
|  |     .await | ||||||
|  |   { | ||||||
|  |     error!("Error sending message: {:?}", why); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| pub async fn defer_message( | pub async fn defer_message( | ||||||
|   ctx: &Context, |   ctx: &Context, | ||||||
|   command: &ApplicationCommandInteraction, |   command: &ApplicationCommandInteraction, | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ use serenity::{ | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|   bot::commands::{defer_message, respond_message, CommandOutput}, |   bot::commands::{defer_message, respond_message, update_message, CommandOutput}, | ||||||
|   session::manager::{SessionCreateError, SessionManager}, |   session::manager::{SessionCreateError, SessionManager}, | ||||||
|   utils::embed::{EmbedBuilder, Status}, |   utils::embed::{EmbedBuilder, Status}, | ||||||
| }; | }; | ||||||
| @ -92,13 +92,13 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     defer_message(&ctx, &command, true).await; |     defer_message(&ctx, &command, false).await; | ||||||
| 
 | 
 | ||||||
|     if let Some(session) = &session_opt { |     if let Some(session) = &session_opt { | ||||||
|       if let Err(why) = session.update_owner(&ctx, command.user.id).await { |       if let Err(why) = session.update_owner(&ctx, command.user.id).await { | ||||||
|         // Need to link first
 |         // Need to link first
 | ||||||
|         if let SessionCreateError::NoSpotifyError = why { |         if let SessionCreateError::NoSpotifyError = why { | ||||||
|           respond_message( |           update_message( | ||||||
|             &ctx, |             &ctx, | ||||||
|             &command, |             &command, | ||||||
|             EmbedBuilder::new() |             EmbedBuilder::new() | ||||||
| @ -107,7 +107,6 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|               .description("You need to link your Spotify account. Use </link:1036714850367320136> or go to [the accounts website](https://account.spoticord.com/) to get started.") |               .description("You need to link your Spotify account. Use </link:1036714850367320136> or go to [the accounts website](https://account.spoticord.com/) to get started.") | ||||||
|               .status(Status::Error) |               .status(Status::Error) | ||||||
|               .build(), |               .build(), | ||||||
|             true, |  | ||||||
|           ) |           ) | ||||||
|           .await; |           .await; | ||||||
| 
 | 
 | ||||||
| @ -115,7 +114,7 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Any other error
 |         // Any other error
 | ||||||
|         respond_message( |         update_message( | ||||||
|           &ctx, |           &ctx, | ||||||
|           &command, |           &command, | ||||||
|           EmbedBuilder::new() |           EmbedBuilder::new() | ||||||
| @ -124,7 +123,6 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|             .description("An error occured while joining the channel. Please try again later.") |             .description("An error occured while joining the channel. Please try again later.") | ||||||
|             .status(Status::Error) |             .status(Status::Error) | ||||||
|             .build(), |             .build(), | ||||||
|           true, |  | ||||||
|         ) |         ) | ||||||
|         .await; |         .await; | ||||||
| 
 | 
 | ||||||
| @ -138,7 +136,7 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|       { |       { | ||||||
|         // Need to link first
 |         // Need to link first
 | ||||||
|         if let SessionCreateError::NoSpotifyError = why { |         if let SessionCreateError::NoSpotifyError = why { | ||||||
|           respond_message( |           update_message( | ||||||
|             &ctx, |             &ctx, | ||||||
|             &command, |             &command, | ||||||
|             EmbedBuilder::new() |             EmbedBuilder::new() | ||||||
| @ -147,7 +145,6 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|               .description("You need to link your Spotify account. Use </link:1036714850367320136> or go to [the accounts website](https://account.spoticord.com/) to get started.") |               .description("You need to link your Spotify account. Use </link:1036714850367320136> or go to [the accounts website](https://account.spoticord.com/) to get started.") | ||||||
|               .status(Status::Error) |               .status(Status::Error) | ||||||
|               .build(), |               .build(), | ||||||
|             true, |  | ||||||
|           ) |           ) | ||||||
|           .await; |           .await; | ||||||
| 
 | 
 | ||||||
| @ -155,7 +152,7 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Any other error
 |         // Any other error
 | ||||||
|         respond_message( |         update_message( | ||||||
|           &ctx, |           &ctx, | ||||||
|           &command, |           &command, | ||||||
|           EmbedBuilder::new() |           EmbedBuilder::new() | ||||||
| @ -164,7 +161,6 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|             .description("An error occured while joining the channel. Please try again later.") |             .description("An error occured while joining the channel. Please try again later.") | ||||||
|             .status(Status::Error) |             .status(Status::Error) | ||||||
|             .build(), |             .build(), | ||||||
|           true, |  | ||||||
|         ) |         ) | ||||||
|         .await; |         .await; | ||||||
| 
 | 
 | ||||||
| @ -172,7 +168,7 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|       }; |       }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     respond_message( |     update_message( | ||||||
|       &ctx, |       &ctx, | ||||||
|       &command, |       &command, | ||||||
|       EmbedBuilder::new() |       EmbedBuilder::new() | ||||||
| @ -182,7 +178,6 @@ pub fn run(ctx: Context, command: ApplicationCommandInteraction) -> CommandOutpu | |||||||
|         .footer("Spotify will automatically start playing on Spoticord") |         .footer("Spotify will automatically start playing on Spoticord") | ||||||
|         .status(Status::Success) |         .status(Status::Success) | ||||||
|         .build(), |         .build(), | ||||||
|       false, |  | ||||||
|     ) |     ) | ||||||
|     .await; |     .await; | ||||||
|   }) |   }) | ||||||
|  | |||||||
| @ -35,8 +35,6 @@ impl EventHandler for Handler { | |||||||
| 
 | 
 | ||||||
|   // INTERACTION_CREATE event, emitted when the bot receives an interaction (slash command, button, etc.)
 |   // INTERACTION_CREATE event, emitted when the bot receives an interaction (slash command, button, etc.)
 | ||||||
|   async fn interaction_create(&self, ctx: Context, interaction: Interaction) { |   async fn interaction_create(&self, ctx: Context, interaction: Interaction) { | ||||||
|     trace!("interaction_create START"); |  | ||||||
| 
 |  | ||||||
|     if let Interaction::ApplicationCommand(command) = interaction { |     if let Interaction::ApplicationCommand(command) = interaction { | ||||||
|       // Commands must only be executed inside of guilds
 |       // Commands must only be executed inside of guilds
 | ||||||
| 
 | 
 | ||||||
| @ -72,7 +70,5 @@ impl EventHandler for Handler { | |||||||
| 
 | 
 | ||||||
|       command_manager.execute_command(&ctx, command).await; |       command_manager.execute_command(&ctx, command).await; | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     trace!("interaction_create END"); |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -282,6 +282,8 @@ impl SpoticordSession { | |||||||
|           } |           } | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|  |         trace!("Received IPC message: {:?}", msg); | ||||||
|  | 
 | ||||||
|         match msg { |         match msg { | ||||||
|           // Sink requests playback to start/resume
 |           // Sink requests playback to start/resume
 | ||||||
|           IpcPacket::StartPlayback => { |           IpcPacket::StartPlayback => { | ||||||
| @ -338,7 +340,7 @@ impl SpoticordSession { | |||||||
|             let track_id = SpotifyId::from_uri(&track).unwrap(); |             let track_id = SpotifyId::from_uri(&track).unwrap(); | ||||||
| 
 | 
 | ||||||
|             let was_none = ipc_instance |             let was_none = ipc_instance | ||||||
|               .update_playback(duration_ms, position_ms, true) |               .update_playback(duration_ms, position_ms, false) | ||||||
|               .await; |               .await; | ||||||
| 
 | 
 | ||||||
|             if was_none { |             if was_none { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 DaXcess
						DaXcess