예제 #1
0
        public async Task Run()
        {
            var clock = await TradingClient.GetClockAsync();

            string openStr;

            if (clock.IsOpen)
            {
                openStr = "Markets are currently open";
            }
            else
            {
                openStr = "Markets are currently closed";
            }
            LoggerService.LogInfo($"Bot is ready...");
            LoggerService.LogInfo($"[{openStr}] Type a command to start.");

            CommandService.Listen();

            await Task.WhenAll(RunningTasks);
        }
예제 #2
0
        private void processMethod(MethodBase method, CommandAttribute attr)
        {
            if (!method.IsStatic)
            {
                if (method.DeclaringType is not null)
                {
                    throw new Exception(method.DeclaringType.Name + "." + method.Name +
                                        " is marked as a command but is not static");
                }
            }
            else
            {
                var info = new CommandInfo();

                var parameters = method.GetParameters();
                var defaults   = new object[parameters.Length];
                var usage      = new string[parameters.Length];

                for (var i = 0; i < parameters.Length; i++)
                {
                    var p = parameters[i];
                    usage[i] = p.Name + " : ";

                    //usage[i] += p.ParameterType.ToString().Split('.').Last();

                    if (p.ParameterType == typeof(string))
                    {
                        usage[i] += "string";
                    }
                    else if (p.ParameterType == typeof(int))
                    {
                        usage[i] += "int";
                    }
                    else if (p.ParameterType == typeof(decimal))
                    {
                        usage[i] += "decimal";
                    }
                    else if (p.ParameterType == typeof(bool))
                    {
                        usage[i] += "bool";
                    }
                    else if (Enums.Values.Contains(p.ParameterType))
                    {
                        usage[i] += p.ParameterType.ToString().Split('.').Last();
                    }
                    else if (method.DeclaringType is not null)
                    {
                        throw new Exception(method.DeclaringType.Name + "." + method.Name +
                                            " is marked as a command, but has an invalid parameter type. Allowed types are: string, int, decimal, bool and enums");
                    }

                    // no System.DBNull in PCL so we fake it
                    if (p.DefaultValue != null && p.DefaultValue.GetType().FullName == "System.DBNull")
                    {
                        defaults[i] = null;
                    }
                    else if (p.DefaultValue != null)
                    {
                        defaults[i] = p.DefaultValue;
                        if (p.ParameterType == typeof(string))
                        {
                            usage[i] += "=\"" + p.DefaultValue.ToString() + "\"";
                        }
                        else
                        {
                            usage[i] += "=" + p.DefaultValue.ToString();
                        }
                    }
                    else
                    {
                        defaults[i] = null;
                    }
                }

                if (usage.Length == 0)
                {
                    info.Usage = "";
                }
                else
                {
                    info.Usage = "[" + string.Join(" | ", usage) + "]";
                }

                info.Help = attr.Help;

                info.Action = args =>
                {
                    if (parameters.Length == 0)
                    {
                        method.Invoke(null, null);
                    }
                    else
                    {
                        var param = (object[])defaults.Clone();

                        for (var i = 0; i < param.Length && i < args.Length; i++)
                        {
                            if (parameters[i].ParameterType == typeof(string))
                            {
                                param[i] = argString(args[i]);
                            }
                            else if (parameters[i].ParameterType == typeof(int))
                            {
                                param[i] = argInt(args[i]);
                            }
                            else if (parameters[i].ParameterType == typeof(decimal))
                            {
                                param[i] = argDecimal(args[i]);
                            }
                            else if (parameters[i].ParameterType == typeof(bool))
                            {
                                param[i] = argBool(args[i]);
                            }
                            else if (Enums.ContainsValue(parameters[i].ParameterType))
                            {
                                param[i] = Enum.Parse(parameters[i].ParameterType, args[i]);
                            }
                        }

                        try
                        {
                            method.Invoke(null, param);
                        }
                        catch (Exception e)
                        {
                            LoggerService.LogError(e);
                        }
                    }
                };

                Commands[attr.Name] = info;
                LoggerService.LogTrace($"Command Added: {attr.Name}");
            }
        }