Skip flag parsing when handling proxy tags
This commit is contained in:
		| @@ -48,9 +48,8 @@ namespace PluralKit.Bot | |||||||
|         public PKSystem System => _senderSystem; |         public PKSystem System => _senderSystem; | ||||||
|  |  | ||||||
|         public string PopArgument() => _parameters.Pop(); |         public string PopArgument() => _parameters.Pop(); | ||||||
|         public string PeekArgument() => _parameters.Peek(); |         public string PeekArgument() => _parameters.Peek();  | ||||||
|         public string Remainder() => _parameters.Remainder(); |         public string RemainderOrNull(bool skipFlags = true) => _parameters.Remainder(skipFlags).Length == 0 ? null : _parameters.Remainder(skipFlags); | ||||||
|         public string RemainderOrNull() => Remainder().Trim().Length == 0 ? null : Remainder(); |  | ||||||
|         public bool HasNext() => RemainderOrNull() != null; |         public bool HasNext() => RemainderOrNull() != null; | ||||||
|         public string FullCommand => _parameters.FullCommand; |         public string FullCommand => _parameters.FullCommand; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -101,15 +101,18 @@ namespace PluralKit.Bot | |||||||
|             return _flags; |             return _flags; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public string Remainder() |         public string Remainder(bool skipFlags = true) | ||||||
|         { |         { | ||||||
|             // Skip all *leading* flags when taking the remainder |             if (skipFlags) | ||||||
|             while (NextWordPosition(_ptr) is {} wp) |  | ||||||
|             { |             { | ||||||
|                 if (_cmd[wp.startPos] != '-' || wp.wasQuoted) break; |                 // Skip all *leading* flags when taking the remainder | ||||||
|                 _ptr = wp.endPos + wp.advanceAfterWord; |                 while (NextWordPosition(_ptr) is {} wp) | ||||||
|  |                 { | ||||||
|  |                     if (_cmd[wp.startPos] != '-' || wp.wasQuoted) break; | ||||||
|  |                     _ptr = wp.endPos + wp.advanceAfterWord; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|              |  | ||||||
|             // *Then* get the remainder |             // *Then* get the remainder | ||||||
|             return _cmd.Substring(Math.Min(_ptr, _cmd.Length)).Trim(); |             return _cmd.Substring(Math.Min(_ptr, _cmd.Length)).Trim(); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ namespace PluralKit.Bot | |||||||
|             { |             { | ||||||
|                 if (!ctx.HasNext()) throw new PKSyntaxError("You must pass an example proxy to add (eg. `[text]` or `J:text`)."); |                 if (!ctx.HasNext()) throw new PKSyntaxError("You must pass an example proxy to add (eg. `[text]` or `J:text`)."); | ||||||
|                  |                  | ||||||
|                 var tagToAdd = ParseProxyTags(ctx.RemainderOrNull()); |                 var tagToAdd = ParseProxyTags(ctx.RemainderOrNull(skipFlags: false)); | ||||||
|                 if (tagToAdd.IsEmpty) throw Errors.EmptyProxyTags(target); |                 if (tagToAdd.IsEmpty) throw Errors.EmptyProxyTags(target); | ||||||
|                 if (target.ProxyTags.Contains(tagToAdd)) |                 if (target.ProxyTags.Contains(tagToAdd)) | ||||||
|                     throw Errors.ProxyTagAlreadyExists(tagToAdd, target); |                     throw Errors.ProxyTagAlreadyExists(tagToAdd, target); | ||||||
| @@ -85,7 +85,7 @@ namespace PluralKit.Bot | |||||||
|             { |             { | ||||||
|                 if (!ctx.HasNext()) throw new PKSyntaxError("You must pass a proxy tag to remove (eg. `[text]` or `J:text`)."); |                 if (!ctx.HasNext()) throw new PKSyntaxError("You must pass a proxy tag to remove (eg. `[text]` or `J:text`)."); | ||||||
|  |  | ||||||
|                 var tagToRemove = ParseProxyTags(ctx.RemainderOrNull()); |                 var tagToRemove = ParseProxyTags(ctx.RemainderOrNull(skipFlags: false)); | ||||||
|                 if (tagToRemove.IsEmpty) throw Errors.EmptyProxyTags(target); |                 if (tagToRemove.IsEmpty) throw Errors.EmptyProxyTags(target); | ||||||
|                 if (!target.ProxyTags.Contains(tagToRemove)) |                 if (!target.ProxyTags.Contains(tagToRemove)) | ||||||
|                     throw Errors.ProxyTagDoesNotExist(tagToRemove, target); |                     throw Errors.ProxyTagDoesNotExist(tagToRemove, target); | ||||||
| @@ -102,7 +102,7 @@ namespace PluralKit.Bot | |||||||
|             { |             { | ||||||
|                 if (!ctx.HasNext()) throw new PKSyntaxError("You must pass an example proxy to set (eg. `[text]` or `J:text`)."); |                 if (!ctx.HasNext()) throw new PKSyntaxError("You must pass an example proxy to set (eg. `[text]` or `J:text`)."); | ||||||
|  |  | ||||||
|                 var requestedTag = ParseProxyTags(ctx.RemainderOrNull()); |                 var requestedTag = ParseProxyTags(ctx.RemainderOrNull(skipFlags: false)); | ||||||
|                 if (requestedTag.IsEmpty) throw Errors.EmptyProxyTags(target); |                 if (requestedTag.IsEmpty) throw Errors.EmptyProxyTags(target); | ||||||
|  |  | ||||||
|                 // This is mostly a legacy command, so it's gonna warn if there's |                 // This is mostly a legacy command, so it's gonna warn if there's | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user