/// <summary> /// Responds to an Interaction with type <see cref="InteractionResponseType.ChannelMessageWithSource"/>. /// </summary> /// <param name="text">The text of the message to be sent.</param> /// <param name="embeds">A array of embeds to send with this response. Max 10.</param> /// <param name="isTTS"><see langword="true"/> if the message should be read out by a text-to-speech reader, otherwise <see langword="false"/>.</param> /// <param name="ephemeral"><see langword="true"/> if the response should be hidden to everyone besides the invoker of the command, otherwise <see langword="false"/>.</param> /// <param name="allowedMentions">The allowed mentions for this response.</param> /// <param name="components">A <see cref="MessageComponent"/> to be sent with this response.</param> /// <param name="embed">A single embed to send with this response. If this is passed alongside an array of embeds, the single embed will be ignored.</param> /// <param name="options">The request options for this response.</param> /// <returns> /// A string that contains json to write back to the incoming http request. /// </returns> public override string Respond( string text = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, AllowedMentions allowedMentions = null, MessageComponent components = null, Embed embed = null, RequestOptions options = null) { if (!IsValidToken) { throw new InvalidOperationException("Interaction token is no longer valid"); } if (!InteractionHelper.CanSendResponse(this)) { throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); } embeds ??= Array.Empty <Embed>(); if (embed != null) { embeds = new[] { embed } }
/// <summary> /// Responds to this interaction with a set of choices. /// </summary> /// <param name="result"> /// The set of choices for the user to pick from. /// <remarks> /// A max of 25 choices are allowed. Passing <see langword="null"/> for this argument will show the executing user that /// there is no choices for their autocompleted input. /// </remarks> /// </param> /// <param name="options">The request options for this response.</param> /// <returns> /// A string that contains json to write back to the incoming http request. /// </returns> public string Respond(IEnumerable <AutocompleteResult> result, RequestOptions options = null) { if (!InteractionHelper.CanSendResponse(this)) { throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); } lock (_lock) { if (HasResponded) { throw new InvalidOperationException("Cannot respond twice to the same interaction"); } HasResponded = true; } var model = new API.InteractionResponse { Type = InteractionResponseType.ApplicationCommandAutocompleteResult, Data = new API.InteractionCallbackData { Choices = result.Any() ? result.Select(x => new API.ApplicationCommandOptionChoice { Name = x.Name, Value = x.Value }).ToArray() : Array.Empty <API.ApplicationCommandOptionChoice>() } }; return(SerializePayload(model)); }
/// <summary> /// Acknowledges this interaction with the <see cref="InteractionResponseType.DeferredChannelMessageWithSource"/>. /// </summary> /// <returns> /// A string that contains json to write back to the incoming http request. /// </returns> public override string Defer(bool ephemeral = false, RequestOptions options = null) { if (!InteractionHelper.CanSendResponse(this)) { throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); } var response = new API.InteractionResponse { Type = InteractionResponseType.DeferredChannelMessageWithSource, Data = new API.InteractionCallbackData { Flags = ephemeral ? MessageFlags.Ephemeral : Optional <MessageFlags> .Unspecified } }; lock (_lock) { if (HasResponded) { throw new InvalidOperationException("Cannot respond or defer twice to the same interaction"); } } lock (_lock) { HasResponded = true; } return(SerializePayload(response)); }