Example #1
0
        public bool ActivateCommand(DSharpPlus.Entities.DiscordMessage message, AccessLevel access)
        {
            try
            {
                if (message == null || string.IsNullOrEmpty(message.Content) || char.IsLetterOrDigit(message.Content[0]))
                {
                    return(false);
                }

                if (ActiveCommands == null)
                {
                    ActiveCommands = new List <ICommand>();
                }

                string[] cmdsplit = message.Content.Split(' ');

                if (cmdsplit == null || cmdsplit.Length == 0)
                {
                    return(false);
                }

                ulong  id        = message.Author.Id;
                string name      = message.Author.Username;
                var    guild     = message.Channel.Guild;
                var    guildid   = (ulong?)message.Channel.GuildId;
                ulong  chid      = message.Channel.Id;
                char   activator = message.Content[0];
                string _cmd      = cmdsplit[0].Substring(1, cmdsplit[0].Length - 1);
                string aftercmd  = "";
                if (message.Content.Length > cmdsplit[0].Length + 1)
                {
                    aftercmd = message.Content.Remove(0, cmdsplit[0].Length + 1);
                }

                CommandEventArg arg = new CommandEventArg(id, name, (guild == null ? (ulong?)null : guildid), chid, activator, _cmd, aftercmd);


                ICommand cmd = null;

                //For now i hardcode this cause I'm lazy
                if (activator.Equals('>'))
                {
                    Console.WriteLine(">");
                    //TextCommand.OnTextCommand(arg);
                    return(true);
                }

                cmd = ActiveCommands.Find(cmd_ => cmd_.Activator.Equals(arg.Activator) && cmd_.CMD.Equals(arg.CMD));

                if (cmd == null)
                {
                    return(false);
                }

                if ((int)cmd.AccessLevel > (int)access)
                {
                    return(false);
                }

                using (Database.GAFContext context = new Database.GAFContext())
                {
                    int dbid  = context.BotMaintenance.Max(m => m.Id);
                    var maint = context.BotMaintenance.FirstOrDefault(m => m.Id == dbid);

                    if (maint.Enabled && access < AccessLevel.Admin)
                    {
                        Coding.Discord.SendMessage(chid, "Bot is currently in maintenance, please try again later" + Environment.NewLine +
                                                   "Info: " + maint.Notification ?? "no information");

                        return(false);
                    }
                }

                cmd.Activate(arg);

                return(true);
            }
            catch (Exception ex)
            {
                Logger.Log(ex.ToString(), LogLevel.Trace);
                return(false);
            }
        }