diff --git a/src/Discord.Net.Core/Utils/TokenUtils.cs b/src/Discord.Net.Core/Utils/TokenUtils.cs
index bfc915252..8fa846267 100644
--- a/src/Discord.Net.Core/Utils/TokenUtils.cs
+++ b/src/Discord.Net.Core/Utils/TokenUtils.cs
@@ -7,6 +7,15 @@ namespace Discord
///
public static class TokenUtils
{
+ ///
+ /// The minimum length of a Bot token.
+ ///
+ ///
+ /// This value was determined by comparing against the examples in the Discord
+ /// documentation, and pre-existing tokens.
+ ///
+ internal const int MinBotTokenLength = 58;
+
///
/// Checks the validity of the supplied token of a specific type.
///
@@ -29,11 +38,11 @@ namespace Discord
// no validation is performed on Bearer tokens
break;
case TokenType.Bot:
- // bot tokens are assumed to be at least 59 characters in length
+ // bot tokens are assumed to be at least 58 characters in length
// this value was determined by referencing examples in the discord documentation, and by comparing with
// pre-existing tokens
- if (token.Length < 59)
- throw new ArgumentException(message: "A Bot token must be at least 59 characters in length.", paramName: nameof(token));
+ if (token.Length < MinBotTokenLength)
+ throw new ArgumentException(message: $"A Bot token must be at least {MinBotTokenLength} characters in length.", paramName: nameof(token));
break;
default:
// All unrecognized TokenTypes (including User tokens) are considered to be invalid.
diff --git a/test/Discord.Net.Tests/Tests.TokenUtils.cs b/test/Discord.Net.Tests/Tests.TokenUtils.cs
index dc5a93e34..8cebc649d 100644
--- a/test/Discord.Net.Tests/Tests.TokenUtils.cs
+++ b/test/Discord.Net.Tests/Tests.TokenUtils.cs
@@ -69,9 +69,12 @@ namespace Discord
///
/// Tests the behavior of
/// to see that valid Bot tokens do not throw Exceptions.
- /// Valid Bot tokens can be strings of length 59 or above.
+ /// Valid Bot tokens can be strings of length 58 or above.
///
[Theory]
+ // missing a single character from the end, 58 char. still should be valid
+ [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKW")]
+ // 59 char token
[InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWs")]
[InlineData("This appears to be completely invalid, however the current validation rules are not very strict.")]
[InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWss")]
@@ -90,12 +93,12 @@ namespace Discord
///
[Theory]
[InlineData("This is invalid")]
- // missing a single character from the end
- [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKW")]
// bearer token
[InlineData("6qrZcUqja7812RVdnEKjpzOL4CvHBFG")]
// client secret
[InlineData("937it3ow87i4ery69876wqire")]
+ // 57 char bot token
+ [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kK")]
public void TestBotTokenInvalidThrowsArgumentException(string token)
{
Assert.Throws(() => TokenUtils.ValidateToken(TokenType.Bot, token));
@@ -113,6 +116,7 @@ namespace Discord
// TokenType.User
[InlineData(0)]
// out of range TokenType
+ [InlineData(-1)]
[InlineData(4)]
[InlineData(7)]
public void TestUnrecognizedTokenType(int type)