Skip to content

Commit

Permalink
Display ephemeral messages on restricted input on paginators and sele…
Browse files Browse the repository at this point in the history
…ctions
  • Loading branch information
d4n3436 committed Sep 21, 2024
1 parent 17a330f commit beaaa19
Show file tree
Hide file tree
Showing 11 changed files with 156 additions and 113 deletions.
2 changes: 2 additions & 0 deletions src/Extensions/PaginatorExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Linq;
using Discord;
using Fergun.Configuration;
using Fergun.Interactive;
using Fergun.Interactive.Pagination;
using Microsoft.Extensions.Localization;

Expand Down Expand Up @@ -61,6 +62,7 @@ public static TBuilder WithLocalizedPrompts<TPaginator, TBuilder>(this Paginator
_ => throw new ArgumentException(localizer["UnknownPaginatorBuilderType"], nameof(builder))
};

builder.WithRestrictedPageFactory(users => new PageBuilder().WithDescription(localizer["RestrictedPaginatorInputMessage", users.First().Mention]).WithColor(Color.Orange).Build());
builder.WithJumpInputPrompt(localizer["JumpInputPrompt"]);
builder.WithJumpInputTextLabel(localizer["JumpInputTextLabel", 1, pageCount]);
builder.WithInvalidJumpInputMessage(localizer["InvalidJumpInput", 1, pageCount]);
Expand Down
28 changes: 28 additions & 0 deletions src/Extensions/SelectionExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using Discord;
using Fergun.Interactive;
using Fergun.Interactive.Selection;
using Microsoft.Extensions.Localization;
using System.Linq;

namespace Fergun.Extensions;

public static class SelectionExtensions
{
/// <summary>
/// Sets the localized prompts.
/// </summary>
/// <typeparam name="TSelection">The type of the built selection.</typeparam>
/// <typeparam name="TOption">The type of the options.</typeparam>
/// <typeparam name="TBuilder">The type of this builder.</typeparam>
/// <param name="builder">The selection builder.</param>
/// <param name="localizer">The localizer.</param>
/// <returns>This builder.</returns>
public static TBuilder WithLocalizedPrompts<TSelection, TOption, TBuilder>(this BaseSelectionBuilder<TSelection, TOption, TBuilder> builder, IStringLocalizer localizer)
where TSelection : BaseSelection<TOption>
where TBuilder : BaseSelectionBuilder<TSelection, TOption, TBuilder>
{
builder.WithRestrictedPageFactory(users => new PageBuilder().WithDescription(localizer["RestrictedSelectionInputMessage", users.First().Mention]).WithColor(Color.Orange).Build());

return (TBuilder)builder;
}
}
5 changes: 2 additions & 3 deletions src/Modules/ImageModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,14 +184,13 @@ public async Task<RuntimeResult> ReverseAsync(IMessage message)
var selection = new SelectionBuilder<ReverseImageSearchEngine>()
.AddUser(Context.User)
.WithOptions(Enum.GetValues<ReverseImageSearchEngine>())
.WithActionOnTimeout(ActionOnStop.DisableInput)
.WithSelectionPage(page)
.WithLocalizedPrompts(_localizer)
.Build();

var result = await _interactive.SendSelectionAsync(selection, Context.Interaction, TimeSpan.FromMinutes(1), ephemeral: true);

// Attempt to disable the components
_ = Context.Interaction.ModifyOriginalResponseAsync(x => x.Components = selection.GetOrAddComponents(true).Build());

if (result.IsSuccess)
{
return await ReverseAsync(url, result.Value, false, result.StopInteraction!, Context.Interaction, true);
Expand Down
1 change: 1 addition & 0 deletions src/Modules/OcrModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public async Task<RuntimeResult> OcrAsync(IMessage message)
.WithOptions(Enum.GetValues<OcrEngine>())
.WithActionOnTimeout(ActionOnStop.DisableInput)
.WithSelectionPage(page)
.WithLocalizedPrompts(_localizer)
.Build();

var result = await _interactive.SendSelectionAsync(selection, Context.Interaction, TimeSpan.FromMinutes(1), ephemeral: true);
Expand Down
1 change: 1 addition & 0 deletions src/Modules/UtilityModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,7 @@ public async Task<RuntimeResult> HelpAsync()
.WithInputType(InputType.SelectMenus)
.WithSelectionPage(page)
.WithActionOnTimeout(ActionOnStop.DisableInput)
.WithLocalizedPrompts(_localizer)
.Build();

await _interactive.SendSelectionAsync(menu, Context.Interaction, _fergunOptions.SelectionTimeout);
Expand Down
3 changes: 0 additions & 3 deletions src/Resources/Modules.OtherModule.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,4 @@
<data name="lyrics-spotify.name" xml:space="preserve">
<value>letra-spotify</value>
</data>
<data name="HelpMenuPlaceholder" xml:space="preserve">
<value>Selecciona una categoría</value>
</data>
</root>
3 changes: 0 additions & 3 deletions src/Resources/Modules.OtherModule.resx
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,4 @@
<data name="UseSpotifyLyricsCommand" xml:space="preserve">
<value>ℹ️ Use {0} to easily get the lyrics of the song you're currently listening to.</value>
</data>
<data name="HelpMenuPlaceholder" xml:space="preserve">
<value>Select a category</value>
</data>
</root>
211 changes: 107 additions & 104 deletions src/Resources/Modules.UtilityModule.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Fergun2Info" xml:space="preserve">
<value>Fergun es un bot de utilidad con muchos comandos útiles y poderosos como traducción, búsqueda de imágenes, búsqueda inversa de imágenes, OCR, TTS y más.</value>
</data>
<data name="LanguageChain" xml:space="preserve">
<value>Cadena de Idiomas</value>
</data>
<data name="ChainCountMustBeInRange" xml:space="preserve">
<value>El número de cadenas debe estar entre {0} y {1} (inclusivo).</value>
</data>
<data name="ActiveClients" xml:space="preserve">
<value>Clientes Activos</value>
</data>
Expand All @@ -135,42 +126,132 @@
<data name="BoostingSince" xml:space="preserve">
<value>Mejorando desde</value>
</data>
<data name="CategorySelection" xml:space="preserve">
<value>Selecciona una categoría para obtener información acerca de sus comandos.</value>
</data>
<data name="ChainCountMustBeInRange" xml:space="preserve">
<value>El número de cadenas debe estar entre {0} y {1} (inclusivo).</value>
</data>
<data name="Commands" xml:space="preserve">
<value>Comandos</value>
</data>
<data name="CreatedAt" xml:space="preserve">
<value>Creado En</value>
</data>
<data name="IsBot" xml:space="preserve">
<value>Es Bot</value>
<data name="Default" xml:space="preserve">
<value>Predeterminado</value>
</data>
<data name="Name" xml:space="preserve">
<value>Nombre</value>
<data name="Donate" xml:space="preserve">
<value>Donar</value>
</data>
<data name="ServerJoinDate" xml:space="preserve">
<value>Fecha de ingreso al servidor</value>
<data name="Fergun2Info" xml:space="preserve">
<value>Fergun es un bot de utilidad con muchos comandos útiles y poderosos como traducción, búsqueda de imágenes, búsqueda inversa de imágenes, OCR, TTS y más.</value>
</data>
<data name="UserInfo" xml:space="preserve">
<value>Información de usuario</value>
<data name="Fergun2SupportInfo" xml:space="preserve">
<value>Si tiene alguna pregunta sobre el bot o tiene alguna sugerencia, no dude en unirse al servidor de soporte.</value>
</data>
<data name="Default" xml:space="preserve">
<value>Predeterminado</value>
<data name="FergunHelp" xml:space="preserve">
<value>Ayuda de Fergun</value>
</data>
<data name="Global" xml:space="preserve">
<value>Global</value>
</data>
<data name="Server" xml:space="preserve">
<value>Servidor</value>
<data name="ID" xml:space="preserve">
<value>ID</value>
</data>
<data name="ImageModule" xml:space="preserve">
<value>Comandos de búsqueda de imágenes</value>
</data>
<data name="ImageModuleDescription" xml:space="preserve">
<value>Comandos que buscan y muestran imágenes de varias fuentes. También contiene comandos de búsqueda inversa de imágenes.</value>
</data>
<data name="IsBot" xml:space="preserve">
<value>Es Bot</value>
</data>
<data name="LanguageChain" xml:space="preserve">
<value>Cadena de Idiomas</value>
</data>
<data name="Links" xml:space="preserve">
<value>Enlaces</value>
</data>
<data name="Name" xml:space="preserve">
<value>Nombre</value>
</data>
<data name="Nickname" xml:space="preserve">
<value>Apodo</value>
</data>
<data name="NoGlobalAvatar" xml:space="preserve">
<value>{0} no tiene un avatar global (principal).</value>
</data>
<data name="NoServerAvatar" xml:space="preserve">
<value>{0} no tiene un avatar de servidor.</value>
</data>
<data name="Fergun2SupportInfo" xml:space="preserve">
<value>Si tiene alguna pregunta sobre el bot o tiene alguna sugerencia, no dude en unirse al servidor de soporte.</value>
<data name="OcrModule" xml:space="preserve">
<value>Comandos de OCR</value>
</data>
<data name="OcrModuleDescription" xml:space="preserve">
<value>Comandos que extraen texto de imágenes. Los comandos también contienen funcionalidad de TTS y traducción.</value>
</data>
<data name="OtherModule" xml:space="preserve">
<value>Otros comandos</value>
</data>
<data name="OtherModuleDescription" xml:space="preserve">
<value>Comandos que no se sitúan bien en otros módulos.</value>
</data>
<data name="Server" xml:space="preserve">
<value>Servidor</value>
</data>
<data name="ServerJoinDate" xml:space="preserve">
<value>Fecha de ingreso al servidor</value>
</data>
<data name="Support" xml:space="preserve">
<value>Soporte</value>
</data>
<data name="TtsModule" xml:space="preserve">
<value>Comandos de TTS</value>
</data>
<data name="TtsModuleDescription" xml:space="preserve">
<value>Contiene comandos que convierten texto a voz.</value>
</data>
<data name="UnableToGetArticle" xml:space="preserve">
<value>No se pudo obtener el artículo.</value>
</data>
<data name="UrbanModule" xml:space="preserve">
<value>Comandos de Urban Dictionary</value>
</data>
<data name="UrbanModuleDescription" xml:space="preserve">
<value>Comandos que buscan y muestran significados de Urban Dictionary.</value>
</data>
<data name="UserInfo" xml:space="preserve">
<value>Información de usuario</value>
</data>
<data name="UtilityModule" xml:space="preserve">
<value>Comandos de utilidad</value>
</data>
<data name="UtilityModuleDescription" xml:space="preserve">
<value>Comandos generales de utilidad.</value>
</data>
<data name="Vote" xml:space="preserve">
<value>Votar</value>
</data>
<data name="WikipediaSearch" xml:space="preserve">
<value>Búsqueda de Wikipedia</value>
</data>
<data name="WolframAlphaDidYouMean" xml:space="preserve">
<value>No se encontraron resultados. Quisiste decir...{0}</value>
</data>
<data name="WolframAlphaError" xml:space="preserve">
<value>No se pudo obtener los resultados. Código de estado: {0}. Mensaje de error: {1}</value>
</data>
<data name="WolframAlphaNoResults" xml:space="preserve">
<value>Wolfram|Alpha no entiende su consulta.</value>
</data>
<data name="WolframAlphaPaginatorFooter" xml:space="preserve">
<value>Resultados de WolframAlpha | Página {0} de {1}</value>
</data>
<data name="WolframAlphaResults" xml:space="preserve">
<value>Resultados de Wolfram|Alpha</value>
</data>
<data name="avatar.description" xml:space="preserve">
<value>Muesta el avatar de un usuario.</value>
</data>
Expand Down Expand Up @@ -312,12 +393,6 @@
<data name="Translate Text.name" xml:space="preserve">
<value>Traducir Texto</value>
</data>
<data name="WolframAlphaError" xml:space="preserve">
<value>No se pudo obtener los resultados. Código de estado: {0}. Mensaje de error: {1}</value>
</data>
<data name="WolframAlphaDidYouMean" xml:space="preserve">
<value>No se encontraron resultados. Quisiste decir...{0}</value>
</data>
<data name="wolfram.description" xml:space="preserve">
<value>Pregunta a Wolfram|Alpha sobre algo.</value>
</data>
Expand All @@ -330,21 +405,6 @@
<data name="wolfram.name" xml:space="preserve">
<value>wolfram</value>
</data>
<data name="WolframAlphaPaginatorFooter" xml:space="preserve">
<value>Resultados de WolframAlpha | Página {0} de {1}</value>
</data>
<data name="WolframAlphaNoResults" xml:space="preserve">
<value>Wolfram|Alpha no entiende su consulta.</value>
</data>
<data name="WolframAlphaResults" xml:space="preserve">
<value>Resultados de Wolfram|Alpha</value>
</data>
<data name="UnableToGetArticle" xml:space="preserve">
<value>No se pudo obtener el artículo.</value>
</data>
<data name="WikipediaSearch" xml:space="preserve">
<value>Búsqueda de Wikipedia</value>
</data>
<data name="define.description" xml:space="preserve">
<value>Obtiene las definiciones de una palabra de Dictionary.com (sólo en Inglés).</value>
</data>
Expand All @@ -357,66 +417,6 @@
<data name="define.word.name" xml:space="preserve">
<value>palabra</value>
</data>
<data name="ID" xml:space="preserve">
<value>ID</value>
</data>
<data name="Nickname" xml:space="preserve">
<value>Apodo</value>
</data>
<data name="ImageModule" xml:space="preserve">
<value>Comandos de búsqueda de imágenes</value>
</data>
<data name="ImageModuleDescription" xml:space="preserve">
<value>Comandos que buscan y muestran imágenes de varias fuentes. También contiene comandos de búsqueda inversa de imágenes.</value>
</data>
<data name="OcrModule" xml:space="preserve">
<value>Comandos de OCR</value>
</data>
<data name="OcrModuleDescription" xml:space="preserve">
<value>Comandos que extraen texto de imágenes. Los comandos también contienen funcionalidad de TTS y traducción.</value>
</data>
<data name="OtherModule" xml:space="preserve">
<value>Otros comandos</value>
</data>
<data name="OtherModuleDescription" xml:space="preserve">
<value>Comandos que no se sitúan bien en otros módulos.</value>
</data>
<data name="TtsModule" xml:space="preserve">
<value>Comandos de TTS</value>
</data>
<data name="TtsModuleDescription" xml:space="preserve">
<value>Contiene comandos que convierten texto a voz.</value>
</data>
<data name="UrbanModule" xml:space="preserve">
<value>Comandos de Urban Dictionary</value>
</data>
<data name="UrbanModuleDescription" xml:space="preserve">
<value>Comandos que buscan y muestran significados de Urban Dictionary.</value>
</data>
<data name="UtilityModule" xml:space="preserve">
<value>Comandos de utilidad</value>
</data>
<data name="UtilityModuleDescription" xml:space="preserve">
<value>Comandos generales de utilidad.</value>
</data>
<data name="CategorySelection" xml:space="preserve">
<value>Selecciona una categoría para obtener información acerca de sus comandos.</value>
</data>
<data name="Commands" xml:space="preserve">
<value>Comandos</value>
</data>
<data name="Donate" xml:space="preserve">
<value>Donar</value>
</data>
<data name="FergunHelp" xml:space="preserve">
<value>Ayuda de Fergun</value>
</data>
<data name="Links" xml:space="preserve">
<value>Enlaces</value>
</data>
<data name="Vote" xml:space="preserve">
<value>Votar</value>
</data>
<data name="avatar.type.default avatar.name" xml:space="preserve">
<value>Avatar predeterminado</value>
</data>
Expand All @@ -426,4 +426,7 @@
<data name="avatar.type.server avatar.name" xml:space="preserve">
<value>Avatar de servidor</value>
</data>
<data name="HelpMenuPlaceholder" xml:space="preserve">
<value>Selecciona una categoría</value>
</data>
</root>
3 changes: 3 additions & 0 deletions src/Resources/Modules.UtilityModule.resx
Original file line number Diff line number Diff line change
Expand Up @@ -252,4 +252,7 @@
<data name="WolframAlphaResults" xml:space="preserve">
<value>Wolfram|Alpha Results</value>
</data>
<data name="HelpMenuPlaceholder" xml:space="preserve">
<value>Select a category</value>
</data>
</root>
6 changes: 6 additions & 0 deletions src/Resources/SharedResource.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -231,4 +231,10 @@
<data name="Yes" xml:space="preserve">
<value>Sí</value>
</data>
<data name="RestrictedPaginatorInputMessage" xml:space="preserve">
<value>🚫 Sólo {0} puede interactuar con este paginador.</value>
</data>
<data name="RestrictedSelectionInputMessage" xml:space="preserve">
<value>🚫 Sólo {0} puede interactuar con esta selección.</value>
</data>
</root>
Loading

0 comments on commit beaaa19

Please sign in to comment.