public override void HandleCommand(NotifyTextMessageEvent evt, string command, List <string> parameters, Action <string> messageCallback)
        {
            Client target = null;

            if (TargetName != null)
            {
                target = Parent.Client.GetClientByNamePart(TargetName);
            }

            if (target == null)
            {
                target = Parent.Client.GetClientById(evt.InvokerId);
            }

            if (IsSendingBalance)
            {
                if (SendParam == "all")
                {
                    SendAmount = (uint)Math.Max(0, EconomyManager.GetBalanceForUser(evt.InvokerUniqueId));
                }
                else if (SendParam == "excess")
                {
                    int tempB = EconomyManager.GetBalanceForUser(evt.InvokerUniqueId);
                    if (tempB > Settings.EcoSoftBalanceLimit)
                    {
                        SendAmount = (uint)(tempB - Settings.EcoSoftBalanceLimit);
                    }
                    else
                    {
                        SendAmount = 0;
                    }
                }

                if (SendAmount == 0)
                {
                    messageCallback.Invoke(ColorCoder.ErrorBright($"Why would you want to send {ColorCoder.Currency(0)}? What are you, stupid {ColorCoder.Username(evt.InvokerName)}"));
                    return;
                }
                else if (EconomyManager.GetUserBalanceAfterPaying(evt.InvokerUniqueId, (int)SendAmount) < 0)
                {
                    messageCallback.Invoke(ColorCoder.ErrorBright($"You can't afford to send that much cash, {ColorCoder.Username(evt.InvokerName)}"));
                    return;
                }
                else if (EconomyManager.GetUserBalanceAfterPaying(target.UniqueId, -1 * (int)SendAmount) > Settings.EcoSoftBalanceLimit)
                {
                    messageCallback.Invoke(ColorCoder.ErrorBright($"You can't send that much cash because {ColorCoder.Username(target.Nickname)} would have more than '{ColorCoder.Currency(Settings.EcoSoftBalanceLimit)}'"));
                    return;
                }

                EconomyManager.ChangeBalanceForUser(evt.InvokerUniqueId, (-1) * (int)SendAmount);
                EconomyManager.ChangeBalanceForUser(target.UniqueId, (int)SendAmount);

                messageCallback.Invoke(ColorCoder.SuccessDim($"Sent '{ColorCoder.Currency(SendAmount)}' to {ColorCoder.Username(target.Nickname)}"));
            }
            else if (command == "setbalance")
            {
                int setAmount = SetAmount;
                if (SetAmountIsRelative)
                {
                    setAmount += EconomyManager.GetBalanceForUser(target.UniqueId);
                }

                EconomyManager.SetBalanceForUser(target.UniqueId, setAmount);
                int setTo = EconomyManager.GetBalanceForUser(target.UniqueId);
                messageCallback.Invoke(ColorCoder.Success($"Set balance for {ColorCoder.Username(target.Nickname)} to {ColorCoder.Bold($"{setTo} {Settings.EcoPointUnitName}")}"));
            }
            else
            {
                int max     = Settings.EcoSoftBalanceLimit;
                int balance = EconomyManager.GetBalanceForUser(target.UniqueId);
                messageCallback.Invoke($"Balance of {ColorCoder.Username(target.Nickname)}: {ColorCoder.Bold(balance.ToString())} / {ColorCoder.Bold($"{max} {Settings.EcoPointUnitName}")}");
            }
        }