Feature: Implement modals (#2087)
* Implement Modals (#428) * Socket Modal Support * fix shareded client support * Properly use `HasResponded` instead of `_hasResponded` * `ModalBuilder` and `TextInputBuilder` validation. * make orginisation more consistant. * Rest Modals. * Docs + add missing methods * fix message signatures and missing abstract members * modal changes * um????? * update modal docs * update docs - again for some reason * cleanup * fix message signatures * add modal commands support to interaction service * Fix _hasResponded * update to new unsupported standard. * Sending modals with Interaction service. * fix spelling in ComponentBuilder * sending IModals when responding to interactions * interaction service modals * fix rest modals * spelling and minor improvements. * improve interaction service modal proformance * use precompiled lambda for interaction service modals * respect user compiled lambda choice * changes to modals in the interaction service (more) * support compiled lambdas in modal properties. * modal interactions tweaks * fix inline doc * more modal docs * configure responce to faild modal component * init * solve runtime errors * solve build errors * add default value parsing * make modal info caching static * make ModalUtils static * add inline docs * fix build errors * code cleanup * Introduce Required and Label properties as seperate attributes. * replace internal dictionary of ModalInfo with a list * change input building logic of modals * update RespondWithModalAsync method * add initial value parameter back to ModalTextInput and fix optional modal field * add missing inline docs * dispose the reference modal instance after building * code cleanup on modalcommandbuilder * Update docs/guides/int_basics/message-components/text-input.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/message-components/text-input.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_basics/modals/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_framework/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_framework/intro.md Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update docs/guides/int_framework/samples/intro/modal.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/MessageComponents/IComponentInteractionData.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/MessageComponents/TextInputComponent.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/IModalInteraction.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/ModalBuilder.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/ModalBuilder.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/ModalBuilder.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/ModalBuilder.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/ModalBuilder.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Core/Entities/Interactions/Modals/ModalBuilder.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Interactions/Attributes/Commands/ModalInteractionAttribute.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Interactions/Attributes/Modals/RequiredInputAttribute.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.Interactions/InteractionServiceConfig.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponentData.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Update src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModalData.cs Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * update interaction service modal docs * implements ExitOnMissingmModalField config option and adds Type field to modal info * Add WithValue to text input builders * Fix rare NRE on component enumeration * Fix RequestOptions being required in some methods * Use 'OfType' instead of 'Where' * Remove android unsported warning * Change publicity of properties in IInputComponeontBuilder.cs Co-authored-by: Cenk Ergen <57065323+Cenngo@users.noreply.github.com> Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com> * Remove complex parameter ref Co-authored-by: CottageDwellingCat <80918250+CottageDwellingCat@users.noreply.github.com> Co-authored-by: Cenk Ergen <57065323+Cenngo@users.noreply.github.com> Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>
This commit is contained in:
@@ -21,6 +21,7 @@ namespace Discord.API
|
||||
{
|
||||
ComponentType.Button => new ButtonComponent(x as Discord.ButtonComponent),
|
||||
ComponentType.SelectMenu => new SelectMenuComponent(x as Discord.SelectMenuComponent),
|
||||
ComponentType.TextInput => new TextInputComponent(x as Discord.TextInputComponent),
|
||||
_ => null
|
||||
};
|
||||
}).ToArray();
|
||||
|
||||
@@ -24,5 +24,11 @@ namespace Discord.API
|
||||
|
||||
[JsonProperty("choices")]
|
||||
public Optional<ApplicationCommandOptionChoice[]> Choices { get; set; }
|
||||
|
||||
[JsonProperty("title")]
|
||||
public Optional<string> Title { get; set; }
|
||||
|
||||
[JsonProperty("custom_id")]
|
||||
public Optional<string> CustomId { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,5 +12,8 @@ namespace Discord.API
|
||||
|
||||
[JsonProperty("values")]
|
||||
public Optional<string[]> Values { get; set; }
|
||||
|
||||
[JsonProperty("value")]
|
||||
public Optional<string> Value { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
13
src/Discord.Net.Rest/API/Common/ModalInteractionData.cs
Normal file
13
src/Discord.Net.Rest/API/Common/ModalInteractionData.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Discord.API
|
||||
{
|
||||
internal class ModalInteractionData : IDiscordInteractionData
|
||||
{
|
||||
[JsonProperty("custom_id")]
|
||||
public string CustomId { get; set; }
|
||||
|
||||
[JsonProperty("components")]
|
||||
public API.ActionRowComponent[] Components { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,8 @@ namespace Discord.API
|
||||
[JsonProperty("disabled")]
|
||||
public bool Disabled { get; set; }
|
||||
|
||||
[JsonProperty("values")]
|
||||
public Optional<string[]> Values { get; set; }
|
||||
public SelectMenuComponent() { }
|
||||
|
||||
public SelectMenuComponent(Discord.SelectMenuComponent component)
|
||||
|
||||
49
src/Discord.Net.Rest/API/Common/TextInputComponent.cs
Normal file
49
src/Discord.Net.Rest/API/Common/TextInputComponent.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Discord.API
|
||||
{
|
||||
internal class TextInputComponent : IMessageComponent
|
||||
{
|
||||
[JsonProperty("type")]
|
||||
public ComponentType Type { get; set; }
|
||||
|
||||
[JsonProperty("style")]
|
||||
public TextInputStyle Style { get; set; }
|
||||
|
||||
[JsonProperty("custom_id")]
|
||||
public string CustomId { get; set; }
|
||||
|
||||
[JsonProperty("label")]
|
||||
public string Label { get; set; }
|
||||
|
||||
[JsonProperty("placeholder")]
|
||||
public Optional<string> Placeholder { get; set; }
|
||||
|
||||
[JsonProperty("min_length")]
|
||||
public Optional<int> MinLength { get; set; }
|
||||
|
||||
[JsonProperty("max_length")]
|
||||
public Optional<int> MaxLength { get; set; }
|
||||
|
||||
[JsonProperty("value")]
|
||||
public Optional<string> Value { get; set; }
|
||||
|
||||
[JsonProperty("required")]
|
||||
public Optional<bool> Required { get; set; }
|
||||
|
||||
public TextInputComponent() { }
|
||||
|
||||
public TextInputComponent(Discord.TextInputComponent component)
|
||||
{
|
||||
Type = component.Type;
|
||||
Style = component.Style;
|
||||
CustomId = component.CustomId;
|
||||
Label = component.Label;
|
||||
Placeholder = component.Placeholder;
|
||||
MinLength = component.MinLength ?? Optional<int>.Unspecified;
|
||||
MaxLength = component.MaxLength ?? Optional<int>.Unspecified;
|
||||
Required = component.Required ?? Optional<bool>.Unspecified;
|
||||
Value = component.Value ?? Optional<string>.Unspecified;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user