Skip to content

Commit 11ece4b

Browse files
d4n3436quinchs
andauthored
Update app commands regex and fix localization on app context commands (#2452)
Co-authored-by: Quin Lynch <[email protected]>
1 parent 3dec99f commit 11ece4b

File tree

5 files changed

+24
-38
lines changed

5 files changed

+24
-38
lines changed

src/Discord.Net.Core/Entities/Interactions/ApplicationCommandOption.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,10 @@ private static void EnsureValidOptionName(string name)
145145
if (name.Length > 32)
146146
throw new ArgumentOutOfRangeException(nameof(name), "Name length must be less than or equal to 32.");
147147

148-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
149-
throw new FormatException($"{nameof(name)} must match the regex ^[\\w-]{{1,32}}$");
148+
if (!Regex.IsMatch(name, @"^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$"))
149+
throw new ArgumentException(@"Name must match the regex ^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$", nameof(name));
150150

151-
if (name.Any(x => char.IsUpper(x)))
151+
if (name.Any(char.IsUpper))
152152
throw new FormatException("Name cannot contain any uppercase characters.");
153153
}
154154

src/Discord.Net.Core/Entities/Interactions/ApplicationCommandProperties.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ public IReadOnlyDictionary<string, string> NameLocalizations
4242

4343
Preconditions.AtLeast(name.Length, 1, nameof(name));
4444
Preconditions.AtMost(name.Length, SlashCommandBuilder.MaxNameLength, nameof(name));
45-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
46-
throw new ArgumentException("Option name cannot contain any special characters or whitespaces!", nameof(name));
45+
46+
if (Type == ApplicationCommandType.Slash && !Regex.IsMatch(name, @"^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$"))
47+
throw new ArgumentException(@"Name must match the regex ^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$", nameof(name));
4748
}
4849
_nameLocalizations = value;
4950
}

src/Discord.Net.Core/Entities/Interactions/ContextMenus/MessageCommandBuilder.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public MessageCommandProperties Build()
6767
Name = Name,
6868
IsDefaultPermission = IsDefaultPermission,
6969
IsDMEnabled = IsDMEnabled,
70-
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified
70+
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified,
71+
NameLocalizations = NameLocalizations
7172
};
7273

7374
return props;
@@ -157,14 +158,6 @@ private static void EnsureValidCommandName(string name)
157158
Preconditions.NotNullOrEmpty(name, nameof(name));
158159
Preconditions.AtLeast(name.Length, 1, nameof(name));
159160
Preconditions.AtMost(name.Length, MaxNameLength, nameof(name));
160-
161-
// Discord updated the docs, this regex prevents special characters like @!$%(... etc,
162-
// https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
163-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
164-
throw new ArgumentException("Command name cannot contain any special characters or whitespaces!", nameof(name));
165-
166-
if (name.Any(x => char.IsUpper(x)))
167-
throw new FormatException("Name cannot contain any uppercase characters.");
168161
}
169162

170163
/// <summary>

src/Discord.Net.Core/Entities/Interactions/ContextMenus/UserCommandBuilder.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ public UserCommandProperties Build()
6565
Name = Name,
6666
IsDefaultPermission = IsDefaultPermission,
6767
IsDMEnabled = IsDMEnabled,
68-
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified
68+
DefaultMemberPermissions = DefaultMemberPermissions ?? Optional<GuildPermission>.Unspecified,
69+
NameLocalizations = NameLocalizations
6970
};
7071

7172
return props;
@@ -155,14 +156,6 @@ private static void EnsureValidCommandName(string name)
155156
Preconditions.NotNullOrEmpty(name, nameof(name));
156157
Preconditions.AtLeast(name.Length, 1, nameof(name));
157158
Preconditions.AtMost(name.Length, MaxNameLength, nameof(name));
158-
159-
// Discord updated the docs, this regex prevents special characters like @!$%(... etc,
160-
// https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
161-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
162-
throw new ArgumentException("Command name cannot contain any special characters or whitespaces!", nameof(name));
163-
164-
if (name.Any(x => char.IsUpper(x)))
165-
throw new FormatException("Name cannot contain any uppercase characters.");
166159
}
167160

168161
/// <summary>

src/Discord.Net.Core/Entities/Interactions/SlashCommands/SlashCommandBuilder.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,9 @@ public SlashCommandBuilder AddOption(string name, ApplicationCommandOptionType t
207207
{
208208
Preconditions.Options(name, description);
209209

210-
// Discord updated the docs, this regex prevents special characters like @!$%( and s p a c e s.. etc,
211-
// https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
212-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
213-
throw new ArgumentException("Command name cannot contain any special characters or whitespaces!", nameof(name));
210+
// https://discord.com/developers/docs/interactions/application-commands
211+
if (!Regex.IsMatch(name, @"^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$"))
212+
throw new ArgumentException(@"Name must match the regex ^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$", nameof(name));
214213

215214
// make sure theres only one option with default set to true
216215
if (isDefault == true && Options?.Any(x => x.IsDefault == true) == true)
@@ -376,12 +375,11 @@ internal static void EnsureValidCommandName(string name)
376375
Preconditions.AtLeast(name.Length, 1, nameof(name));
377376
Preconditions.AtMost(name.Length, MaxNameLength, nameof(name));
378377

379-
// Discord updated the docs, this regex prevents special characters like @!$%(... etc,
380-
// https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
381-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
382-
throw new ArgumentException("Command name cannot contain any special characters or whitespaces!", nameof(name));
378+
// https://discord.com/developers/docs/interactions/application-commands
379+
if (!Regex.IsMatch(name, @"^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$"))
380+
throw new ArgumentException(@"Name must match the regex ^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$", nameof(name));
383381

384-
if (name.Any(x => char.IsUpper(x)))
382+
if (name.Any(char.IsUpper))
385383
throw new FormatException("Name cannot contain any uppercase characters.");
386384
}
387385

@@ -587,10 +585,9 @@ public SlashCommandOptionBuilder AddOption(string name, ApplicationCommandOption
587585
{
588586
Preconditions.Options(name, description);
589587

590-
// Discord updated the docs, this regex prevents special characters like @!$%( and s p a c e s.. etc,
591-
// https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
592-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
593-
throw new ArgumentException("Command name cannot contain any special characters or whitespaces!", nameof(name));
588+
// https://discord.com/developers/docs/interactions/application-commands
589+
if (!Regex.IsMatch(name, @"^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$"))
590+
throw new ArgumentException(@"Name must match the regex ^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$", nameof(name));
594591

595592
// make sure theres only one option with default set to true
596593
if (isDefault && Options?.Any(x => x.IsDefault == true) == true)
@@ -966,8 +963,10 @@ private static void EnsureValidCommandOptionName(string name)
966963
{
967964
Preconditions.AtLeast(name.Length, 1, nameof(name));
968965
Preconditions.AtMost(name.Length, SlashCommandBuilder.MaxNameLength, nameof(name));
969-
if (!Regex.IsMatch(name, @"^[\w-]{1,32}$"))
970-
throw new ArgumentException("Option name cannot contain any special characters or whitespaces!", nameof(name));
966+
967+
// https://discord.com/developers/docs/interactions/application-commands
968+
if (!Regex.IsMatch(name, @"^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$"))
969+
throw new ArgumentException(@"Name must match the regex ^[-_\p{L}\p{N}\p{IsDevanagari}\p{IsThai}]{1,32}$", nameof(name));
971970
}
972971

973972
private static void EnsureValidCommandOptionDescription(string description)

0 commit comments

Comments
 (0)