Files
Torch/Torch.Server/Views/CommandSuggestionsProvider.cs
zznty 15be85b4f5 forced lang version to 10 (as ryo requested)
all libs are now packed into directory
jenkins file is back
some directives to get net48 supported too
2022-03-16 20:34:01 +07:00

48 lines
1.5 KiB
C#

using System.Collections;
using System.Linq;
using AutoCompleteTextBox.Editors;
using Sandbox;
using Torch.API;
using Torch.API.Managers;
using Torch.Commands;
namespace Torch.Server.Views;
public class CommandSuggestionsProvider : ISuggestionProvider
{
private readonly ITorchServer _server;
private CommandManager _commandManager;
public CommandSuggestionsProvider(ITorchServer server)
{
_server = server;
if (_server.CurrentSession is null)
_server.GameStateChanged += ServerOnGameStateChanged;
else
_commandManager = _server.CurrentSession.Managers.GetManager<CommandManager>();
}
private void ServerOnGameStateChanged(MySandboxGame game, TorchGameState newState)
{
if (_server.CurrentSession is { })
_commandManager = _server.CurrentSession.Managers.GetManager<CommandManager>();
}
public IEnumerable GetSuggestions(string filter)
{
if (_commandManager is null || !_commandManager.IsCommand(filter))
yield break;
var args = filter.Substring(1).Split(' ').ToList();
var skip = _commandManager.Commands.GetNode(args, out var node);
if (skip == -1)
yield break;
var lastArg = args.Last();
foreach (var subcommandsKey in node.Subcommands.Keys)
{
if (lastArg != node.Name && !subcommandsKey.Contains(lastArg))
continue;
yield return $"!{string.Join(" ", node.GetPath())} {subcommandsKey}";
}
}
}