Exemplo n.º 1
0
        public override async Task CheckAsync(MessageContext context)
        {
            EventContext e = new EventContext();

            e.commandHandler = this;
            e.message        = context.message;
            e.EventSystem    = context.eventSystem;

            Stopwatch sw = Stopwatch.StartNew();

            e.Channel = await context.message.GetChannelAsync();

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

            foreach (PrefixInstance prefix in Prefixes.Values)
            {
                string identifier = prefix.DefaultValue;

                if (e.Guild != null)
                {
                    identifier = await prefix.GetForGuildAsync(Bot.Instance.CachePool.Get, e.Guild.Id);
                }

                if (!context.message.Content.StartsWith(identifier))
                {
                    continue;
                }

                e.Prefix = prefix;

                string command = Regex.Replace(context.message.Content, @"\r\n?|\n", "")
                                 .Substring(identifier.Length)
                                 .Split(' ')
                                 .First()
                                 .ToLower();

                CommandEvent eventInstance = map.GetCommandEvent(command);

                if (eventInstance == null)
                {
                    return;
                }

                if ((await GetUserAccessibility(context.message, e.Channel)) >= eventInstance.Accessibility)
                {
                    if (await eventInstance.IsEnabled(Bot.Instance.CachePool.Get, (await context.message.GetChannelAsync()).Id))
                    {
                        await eventInstance.Check(e, identifier);
                        await OnMessageProcessed(eventInstance, context.message, sw.ElapsedMilliseconds);
                    }
                }
            }
        }
        public override async Task CheckAsync(MessageContext context)
        {
            try
            {
                Stopwatch sw = Stopwatch.StartNew();

                await base.CheckAsync(context);

                foreach (PrefixInstance prefix in Prefixes.Values)
                {
                    string identifier = prefix.DefaultValue;

                    Log.Message($"checking channel with id {context.message.ChannelId}...");

                    context.channel = await context.message.GetChannelAsync();

                    Log.Message("channel ok!");

                    if (context.channel is IDiscordGuildChannel guildChannel)
                    {
                        identifier = await prefix.GetForGuildAsync(guildChannel.GuildId);
                    }

                    if (!context.message.Content.StartsWith(identifier))
                    {
                        continue;
                    }

                    Log.Message("prefix ok!");

                    string command = Regex.Replace(context.message.Content, @"\r\n?|\n", "")
                                     .Substring(identifier.Length)
                                     .Split(' ')
                                     .First();

                    CommandEvent eventInstance = map.GetCommandEvent(command);

                    if (eventInstance == null)
                    {
                        return;
                    }

                    Log.Message($"command '{eventInstance.Name}' found!");

                    if ((await GetUserAccessibility(context.message, context.channel)) >= eventInstance.Accessibility)
                    {
                        Log.Message("permissions ok!");

                        if (await eventInstance.IsEnabled((await context.message.GetChannelAsync()).Id))
                        {
                            Log.Message("command enabled!");

                            await eventInstance.Check(context, identifier);

                            Log.Message("command success!");

                            await OnMessageProcessed(eventInstance, context.message, sw.ElapsedMilliseconds);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }