Browse Source

Display name support for enum type converter (#2156)

* Display name support for enum type converter

* allow display attribute on enum type converter

* update docs/examples to include enum Display sample

* Revert "allow display attribute on enum type converter"

This reverts commit a0eec5b755.

* adds ChoiceDisplay for enum type converters

* Update EnumChoiceAttribute.cs

* fix renamed folder issue

* fix namespace

Co-authored-by: Xeno <eliotd@gmail.com>
tags/3.4.0
Quin Lynch GitHub 3 years ago
parent
commit
c80067425a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 6 deletions
  1. +5
    -3
      docs/guides/int_framework/samples/intro/groupattribute.cs
  2. +11
    -1
      samples/InteractionFramework/ExampleEnum.cs
  3. +25
    -0
      src/Discord.Net.Interactions/Attributes/EnumChoiceAttribute.cs
  4. +5
    -2
      src/Discord.Net.Interactions/TypeConverters/EnumConverter.cs

+ 5
- 3
docs/guides/int_framework/samples/intro/groupattribute.cs View File

@@ -1,16 +1,18 @@
[SlashCommand("blep", "Send a random adorable animal photo")]
public async Task Blep([Choice("Dog", "dog"), Choice("Cat", "cat"), Choice("Penguin", "penguin")] string animal)
public async Task Blep([Choice("Dog", "dog"), Choice("Cat", "cat"), Choice("Guinea pig", "GuineaPig")] string animal)
{
...
}

// In most cases, you can use an enum to replace the seperate choice attributes in a command.
// In most cases, you can use an enum to replace the separate choice attributes in a command.

public enum Animal
{
Cat,
Dog,
Penguin
// You can also use the ChoiceDisplay attribute to change how they appear in the choice menu.
[ChoiceDisplay("Guinea pig")]
GuineaPig
}

[SlashCommand("blep", "Send a random adorable animal photo")]


+ 11
- 1
samples/InteractionFramework/ExampleEnum.cs View File

@@ -1,3 +1,11 @@
using Discord.Interactions;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InteractionFramework
{
public enum ExampleEnum
@@ -5,6 +13,8 @@ namespace InteractionFramework
First,
Second,
Third,
Fourth
Fourth,
[ChoiceDisplay("Twenty First")]
TwentyFirst
}
}

+ 25
- 0
src/Discord.Net.Interactions/Attributes/EnumChoiceAttribute.cs View File

@@ -0,0 +1,25 @@
using System;

namespace Discord.Interactions
{
/// <summary>
/// Customize the displayed value of a slash command choice enum. Only works with the default enum type converter.
/// </summary>
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
public class ChoiceDisplayAttribute : Attribute
{
/// <summary>
/// Gets the name of the parameter.
/// </summary>
public string Name { get; } = null;

/// <summary>
/// Modify the default name and description values of a Slash Command parameter.
/// </summary>
/// <param name="name">Name of the parameter.</param>
public ChoiceDisplayAttribute(string name)
{
Name = name;
}
}
}

+ 5
- 2
src/Discord.Net.Interactions/TypeConverters/EnumConverter.cs View File

@@ -2,6 +2,7 @@ using Discord.WebSocket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;

namespace Discord.Interactions
@@ -27,12 +28,14 @@ namespace Discord.Interactions
var choices = new List<ApplicationCommandOptionChoiceProperties>();

foreach (var member in members)
{
var displayValue = member.GetCustomAttribute<ChoiceDisplayAttribute>()?.Name ?? member.Name;
choices.Add(new ApplicationCommandOptionChoiceProperties
{
Name = member.Name,
Name = displayValue,
Value = member.Name
});
}
properties.Choices = choices;
}
}


Loading…
Cancel
Save