Esempio n. 1
0
        // TODO: clean up
        public async Task Check(EventContext e, string identifier = "")
        {
            string        command   = e.message.Content.Substring(identifier.Length).Split(' ')[0];
            string        args      = "";
            List <string> arguments = new List <string>();

            if (e.message.Content.Split(' ').Length > 1)
            {
                args = e.message.Content.Substring(e.message.Content.Split(' ')[0].Length + 1);
                arguments.AddRange(args.Split(' '));
                arguments = arguments
                            .Where(x => !string.IsNullOrWhiteSpace(x))
                            .ToList();
            }

            if (Module != null)
            {
                if (Module.Nsfw && !(await e.message.GetChannelAsync()).IsNsfw)
                {
                    throw new ChannelNotNsfwException();
                }
            }

            if (IsOnCooldown(e.message.Author.Id))
            {
                Log.WarningAt(Name, " is on cooldown");
                return;
            }

            if (GuildPermissions.Count > 0)
            {
                foreach (GuildPermission g in GuildPermissions)
                {
                    if (!(await(await e.message.GetChannelAsync() as IDiscordGuildChannel).GetPermissionsAsync(e.message.Author as IDiscordGuildUser)).HasFlag(g))
                    {
                        await(await e.message.GetChannelAsync()).SendMessageAsync($"Please give me the guild permission `{g}` to use this command.");
                        return;
                    }
                }
            }

            ProcessCommandDelegate targetCommand = ProcessCommand;

            if (arguments.Count > 0)
            {
                if (CommandPool.ContainsKey(arguments[0]))
                {
                    targetCommand = CommandPool[arguments[0]];
                    args          = args.Substring((arguments[0].Length == args.Length) ? arguments[0].Length : arguments[0].Length + 1);
                }
            }

            if (e.Channel is IDiscordGuildChannel c)
            {
                e.Guild = await c.GetGuildAsync();
            }

            e.Arguments = new Args(args);

            await targetCommand(e);
        }
Esempio n. 2
0
        public async Task Check(IDiscordMessage e, ICommandHandler c, string identifier = "")
        {
            Log.Message($"Entering {Name}!");
            string        command    = e.Content.Substring(identifier.Length).Split(' ')[0];
            string        args       = "";
            List <string> allAliases = new List <string>();

            string[] arguments = new string[0];

            if (e.Content.Split(' ').Length > 1)
            {
                args      = e.Content.Substring(e.Content.Split(' ')[0].Length + 1);
                arguments = args.Split(' ');
            }

            if (Module != null)
            {
                if (Module.Nsfw && !e.Channel.Nsfw)
                {
                    return;
                }
            }

            if (Aliases != null)
            {
                allAliases.AddRange(Aliases);
                allAliases.Add(Name);
            }

            if (!await IsEnabled(e.Channel.Id))
            {
                Log.WarningAt(Name, " is disabled");
                return;
            }

            if (IsOnCooldown(e.Author.Id))
            {
                Log.WarningAt(Name, " is on cooldown");
                return;
            }

            if (GuildPermissions.Count > 0)
            {
                foreach (DiscordGuildPermission g in GuildPermissions)
                {
                    if (!e.Author.HasPermissions(e.Channel, g))
                    {
                        await e.Channel.SendMessage($"Please give me the guild permission `{g}` to use this command.");

                        return;
                    }
                }
            }

            ProcessCommandDelegate targetCommand = ProcessCommand;

            if (arguments.Length > 0)
            {
                if (CommandPool.ContainsKey(arguments[0]))
                {
                    targetCommand = CommandPool[arguments[0]];
                    args          = args.Substring((arguments[0].Length == args.Length) ? arguments[0].Length : arguments[0].Length + 1);
                }
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            EventContext context = new EventContext();

            context.commandHandler = c;
            context.arguments      = args;
            context.message        = e;

            Log.Message($"Starting Command!!! {Name}");

            if (await TryProcessCommand(targetCommand, context))
            {
                await eventSystem.OnCommandDone(e, this);

                TimesUsed++;
                Log.Message($"{Name} called from {e.Guild.Name} in {sw.ElapsedMilliseconds}ms");
            }
            sw.Stop();
            Log.Message($"Leaving {Name}");
        }
Esempio n. 3
0
        public async Task Check(IDiscordMessage e, ICommandHandler c, string identifier = "")
        {
            string        command    = e.Content.Substring(identifier.Length).Split(' ')[0];
            string        args       = "";
            List <string> allAliases = new List <string>();
            List <string> arguments  = new List <string>();

            if (e.Content.Split(' ').Length > 1)
            {
                args = e.Content.Substring(e.Content.Split(' ')[0].Length + 1);
                arguments.AddRange(args.Split(' '));
                arguments = arguments
                            .Where(x => !string.IsNullOrWhiteSpace(x))
                            .ToList();
            }

            if (Module != null)
            {
                if (Module.Nsfw && !e.Channel.Nsfw)
                {
                    return;
                }
            }

            if (Aliases != null)
            {
                allAliases.AddRange(Aliases);
                allAliases.Add(Name);
            }

            if (IsOnCooldown(e.Author.Id))
            {
                Log.WarningAt(Name, " is on cooldown");
                return;
            }

            if (GuildPermissions.Count > 0)
            {
                foreach (DiscordGuildPermission g in GuildPermissions)
                {
                    if (!e.Author.HasPermissions(e.Channel, g))
                    {
                        await e.Channel.SendMessageAsync($"Please give me the guild permission `{g}` to use this command.");

                        return;
                    }
                }
            }

            ProcessCommandDelegate targetCommand = ProcessCommand;

            if (arguments.Count > 0)
            {
                if (CommandPool.ContainsKey(arguments[0]))
                {
                    targetCommand = CommandPool[arguments[0]];
                    args          = args.Substring((arguments[0].Length == args.Length) ? arguments[0].Length : arguments[0].Length + 1);
                }
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            EventContext context = new EventContext();

            context.commandHandler = c;
            context.arguments      = args;
            context.message        = e;

            if (await TryProcessCommand(targetCommand, context))
            {
                await eventSystem.OnCommandDone(e, this, true, sw.ElapsedMilliseconds);

                TimesUsed++;
                Log.Message($"{Name} called by {e.Author.Username}#{e.Author.Discriminator} [{e.Author.Id}] from {e.Guild.Name} in {sw.ElapsedMilliseconds}ms");
            }
            else
            {
                await eventSystem.OnCommandDone(e, this, false, sw.ElapsedMilliseconds);
            }
            sw.Stop();
        }