public async Task <bool> JudgeAsync(MummyContext sourceContext, ReactionData parameter)
        {
            var reactions = await sourceContext.Message.GetReactionsAsync(parameter.Emoji);

            bool ok = reactions.Any(x => x.Id == sourceContext.User.Id);

            return(ok);
        }
 public PaginatedMessageCallback(InteractiveService interactive, MummyContext sourceContext, PaginatedMessage pager, ICriterion <ReactionData> criterion = null)
 {
     Interactive = interactive;
     Context     = sourceContext;
     Criterion   = criterion ?? new EmptyCriterion <ReactionData>();
     _pager      = pager;
     pages       = _pager.Pages.Count;
 }
        public async Task <IUserMessage> SendPaginatedMessageAsync(MummyContext context,
                                                                   PaginatedMessage pager,
                                                                   ICriterion <ReactionData> criterion = null)
        {
            var callback = new PaginatedMessageCallback(this, context, pager, criterion);
            await callback.DisplayAsync().ConfigureAwait(false);

            return(callback.Message);
        }
 public override async ValueTask <CheckResult> CheckAsync(MummyContext context)
 {
     if ((await context.Client.GetCurrentApplicationAsync()).Owner.Id == context.User.Id)
     {
         return(CheckResult.Successful);
     }
     else
     {
         return(CheckResult.Unsuccessful("Only my owner can run this command"));
     }
 }
示例#5
0
        public async Task <bool> JudgeAsync(MummyContext sourceContext, T parameter)
        {
            foreach (var criterion in _critiera)
            {
                var result = await criterion.JudgeAsync(sourceContext, parameter).ConfigureAwait(false);

                if (!result)
                {
                    return(false);
                }
            }
            return(true);
        }
        public async Task <IUserMessage> ReplyAndDeleteAsync(MummyContext context,
                                                             string content, bool isTTS = false,
                                                             LocalEmbed embed           = null,
                                                             TimeSpan?timeout           = null
                                                             )
        {
            timeout ??= _defaultTimeout;
            var message = await context.Channel.SendMessageAsync(content, isTTS, embed).ConfigureAwait(false);

            _ = Task.Delay(timeout.Value)
                .ContinueWith(_ => message.DeleteAsync().ConfigureAwait(false))
                .ConfigureAwait(false);
            return(message);
        }
        public Task <CachedUserMessage> NextMessageAsync(MummyContext context,
                                                         bool fromSourceUser     = true,
                                                         bool inSourceChannel    = true,
                                                         TimeSpan?timeout        = null,
                                                         CancellationToken token = default)
        {
            var criterion = new Criteria <CachedUserMessage>();

            if (fromSourceUser)
            {
                criterion.AddCriterion(new EnsureSourceUserCriterion());
            }
            if (inSourceChannel)
            {
                criterion.AddCriterion(new EnsureSourceChannelCriterion());
            }
            return(NextMessageAsync(context, criterion, timeout, token));
        }
        public override ValueTask <CheckResult> CheckAsync(MummyContext context)
        {
            CachedMember user = null;

            switch (_target)
            {
            case PermissionTarget.User:
                user = context.User;
                break;

            case PermissionTarget.Bot:
                user = context.Guild.CurrentMember;
                break;
            }

            var failedGuildPerms = _guildPerms.Where(guildPerm => !user.Permissions.Has(guildPerm)).ToArray();

            var channelPerms = context.User.GetPermissionsFor(context.Channel);

            var failedChannelPerms = _channelPerms.Where(channelPerm => !channelPerms.Has(channelPerm)).ToArray();

            if (failedGuildPerms.Length == 0 && failedChannelPerms.Length == 0)
            {
                return(CheckResult.Successful);
            }

            var sb = new StringBuilder();

            foreach (var guildPerm in failedGuildPerms)
            {
                sb.AppendLine(guildPerm.ToString());
            }

            foreach (var channelPerm in failedChannelPerms)
            {
                sb.AppendLine(channelPerm.ToString());
            }

            var u = context.User;

            var target = _target == PermissionTarget.User ? "You" : "I";

            return(CheckResult.Unsuccessful($"{target} lack permissions for {sb}"));
        }
        public override ValueTask <CheckResult> CheckAsync(object argument, MummyContext context)
        {
            var lenght = argument.ToString().Length;

            if (lenght == 6)
            {
                return(CheckResult.Successful);
            }
            else
            {
                if (lenght < 6)
                {
                    return(CheckResult.Unsuccessful($"the code provide was to SHORT and it required to be 6 chars long exactly. (code provided was {lenght} char long)"));
                }
                else
                {
                    return(CheckResult.Unsuccessful($"the code provide was to LONG and it required to be 6 chars long exactly. (code provided was {lenght} char long)"));
                }
            }
        }
        public async Task <CachedUserMessage> NextMessageAsync(MummyContext context,
                                                               ICriterion <CachedUserMessage> criterion,
                                                               TimeSpan?timeout        = null,
                                                               CancellationToken token = default)
        {
            timeout ??= _defaultTimeout;

            var eventTrigger  = new TaskCompletionSource <CachedUserMessage>();
            var cancelTrigger = new TaskCompletionSource <bool>();

            token.Register(() => cancelTrigger.SetResult(true));

            async Task Handler(MessageReceivedEventArgs e)
            {
                var message = e.Message as CachedUserMessage;
                var result  = await criterion.JudgeAsync(context, message).ConfigureAwait(false);

                if (result)
                {
                    eventTrigger.SetResult(message);
                }
            }

            context.Client.MessageReceived += Handler;

            var trigger = eventTrigger.Task;
            var cancel  = cancelTrigger.Task;
            var delay   = Task.Delay(timeout.Value);
            var task    = await Task.WhenAny(trigger, delay, cancel).ConfigureAwait(false);

            context.Client.MessageReceived -= Handler;

            if (task == trigger)
            {
                return(await trigger.ConfigureAwait(false));
            }
            else
            {
                return(null);
            }
        }
示例#11
0
 public LocationNSViewComponent(MummyContext ctx)
 {
     context = ctx;
 }
示例#12
0
 public abstract ValueTask <TypeParserResult <T> > ParseAsync(Parameter parameter, string value, MummyContext context);
示例#13
0
        public Task <bool> JudgeAsync(MummyContext sourceContext, CachedUserMessage parameter)
        {
            bool ok = int.TryParse(parameter.Content, out _);

            return(Task.FromResult(ok));
        }
 public abstract ValueTask <CheckResult> CheckAsync(object argument, MummyContext context);
示例#15
0
        public override async ValueTask <TypeParserResult <Module> > ParseAsync(Parameter parameter, string value, MummyContext context)
        {
            CommandService commandService = context.ServiceProvider.GetRequiredService <CommandService>();
            var            module         = commandService.GetAllModules().FirstOrDefault(m => m.Name.Contains(value, StringComparison.CurrentCultureIgnoreCase));

            if (module == null)
            {
                return(new TypeParserResult <Module>("Could not find a module with that name"));
            }
            else
            {
                var result = await module.RunChecksAsync(context);

                if (result.IsSuccessful)
                {
                    return(new TypeParserResult <Module>(module));
                }
                else
                {
                    return(new TypeParserResult <Module>("you failed some checks and therefor i wont show you this module ;)"));
                }
            }
        }
示例#16
0
 public BurialsController(MummyContext ctx, UserManager <IWantMyMummyUser> tempUser, IWantMyMummyContext con)
 {
     _context    = ctx;
     userManager = tempUser;
     wantContext = con;
 }
示例#17
0
 public override ValueTask <CheckResult> CheckAsync(MummyContext context)
 {
     throw new NotImplementedException();
 }
        public override ValueTask <TypeParserResult <TimeSpan> > ParseAsync(Parameter parameter, string value, MummyContext context)
        {
            MatchCollection matches = TimeSpanRegex.Matches(value);

            if (matches.Count == 0)
            {
                return(TypeParserResult <TimeSpan> .Unsuccessful("no matches idk"));
            }

            var  result = new TimeSpan();
            bool weeks = false, days = false, hours = false, minutes = false, seconds = false;

            for (var m = 0; m < matches.Count; m++)
            {
                Match match = matches[m];

                if (!uint.TryParse(match.Groups[1].Value, out uint amount))
                {
                    continue;
                }

                switch (match.Groups[2].Value[0])
                {
                case 'w':
                    if (!weeks)
                    {
                        result = result.Add(TimeSpan.FromDays(amount * 7));
                        weeks  = true;
                    }

                    continue;

                case 'd':
                    if (!days)
                    {
                        result = result.Add(TimeSpan.FromDays(amount));
                        days   = true;
                    }

                    continue;

                case 'h':
                    if (!hours)
                    {
                        result = result.Add(TimeSpan.FromHours(amount));
                        hours  = true;
                    }

                    continue;

                case 'm':
                    if (!minutes)
                    {
                        result  = result.Add(TimeSpan.FromMinutes(amount));
                        minutes = true;
                    }

                    continue;

                case 's':
                    if (!seconds)
                    {
                        result  = result.Add(TimeSpan.FromSeconds(amount));
                        seconds = true;
                    }

                    continue;
                }
            }

            return(TypeParserResult <TimeSpan> .Successful(result));
        }
示例#19
0
 public override ValueTask <TypeParserResult <bool> > ParseAsync(Parameter parameter, string value, MummyContext context)
 {
     if (value.Equals("on", StringComparison.CurrentCultureIgnoreCase))
     {
         return(TypeParserResult <bool> .Successful(true));
     }
     else if (value.Equals("off", StringComparison.CurrentCultureIgnoreCase))
     {
         return(TypeParserResult <bool> .Successful(false));
     }
     else
     {
         return(TypeParserResult <bool> .Unsuccessful($"could not parse {parameter.Name} as on/off"));
     }
 }
        public Task <bool> JudgeAsync(MummyContext sourceContext, IMessage parameter)
        {
            var ok = sourceContext.User.Id == parameter.Author.Id;

            return(Task.FromResult(ok));
        }
示例#21
0
 public abstract ValueTask <CheckResult> CheckAsync(MummyContext context);
示例#22
0
 public RoslynContext(MummyContext context, IServiceProvider services)
 {
     Context  = context;
     Services = services;
 }
示例#23
0
 public RackSamplesController(MummyContext context, IWantMyMummyContext con, UserManager <IWantMyMummyUser> tempUser)
 {
     _context     = context;
     mummyContext = con;
     userManager  = tempUser;
 }
        public override ValueTask <TypeParserResult <DateTimeOffset> > ParseAsync(Parameter parameter, string value, MummyContext context)
        {
            DateTimeOffset dateTimeOffset = new DateTimeOffset(DateTime.MinValue, TimeSpan.Zero);

            if (!value.EndsWith("dmy", StringComparison.CurrentCultureIgnoreCase) && !value.EndsWith("mdy", StringComparison.CurrentCultureIgnoreCase))
            {
                return(TypeParserResult <DateTimeOffset> .Unsuccessful("failed to parse expected mdy or dmy"));
            }
            if (value.EndsWith("dmy", StringComparison.CurrentCultureIgnoreCase))
            {
                var time = value.Substring(0, value.IndexOf("dmy"));
                if (!DateTimeOffset.TryParse(time, CultureInfo.CurrentCulture, styles: DateTimeStyles.AssumeUniversal, out dateTimeOffset))
                {
                    return(TypeParserResult <DateTimeOffset> .Unsuccessful("failed to parse time (something doesnt look right in the time part)"));
                }
            }
            if (value.EndsWith("mdy", StringComparison.CurrentCultureIgnoreCase))
            {
                var time = value.Substring(0, value.IndexOf("mdy"));
                if (!DateTimeOffset.TryParse(time, CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.AssumeUniversal, out dateTimeOffset))
                {
                    return(TypeParserResult <DateTimeOffset> .Unsuccessful("failed to parse time (something doesnt look right in the time part)"));
                }
            }
            if (dateTimeOffset != new DateTimeOffset(DateTime.MinValue, TimeSpan.Zero))
            {
                return(TypeParserResult <DateTimeOffset> .Successful(dateTimeOffset));
            }

            return(TypeParserResult <DateTimeOffset> .Unsuccessful("something went badly wrong and i entirely failed to parse your time"));
        }
示例#25
0
        private async Task HandleReceivedMessageAsync(CachedUserMessage message)
        {
            if (message.Author.IsBot)
            {
                return;
            }

            if (!(message.Channel is CachedTextChannel textChannel) ||
                !textChannel.Guild.CurrentMember.GetPermissionsFor(textChannel).Has(Permission.SendMessages))
            {
                return;
            }
            if (CommandUtilities.HasAnyPrefix(message.Content, Prefixes, StringComparison.CurrentCulture, out var prefix, out var output) ||
                CommandUtilities.HasPrefix(message.Content, $"<@{Client.CurrentUser.Id}>", StringComparison.Ordinal, out output) ||
                CommandUtilities.HasPrefix(message.Content, $"<@!{Client.CurrentUser.Id}>", StringComparison.Ordinal, out output))
            {
                if (string.IsNullOrWhiteSpace(output))
                {
                    return;
                }

                try
                {
                    if (prefix is null)
                    {
                        prefix = Client.CurrentUser.Mention;
                    }
                    var ctx = MummyContext.Create(Client, message, Services, prefix);


                    ActiveTimings[ctx.UserId] = Stopwatch.StartNew();
                    var r = await Commands.ExecuteAsync(output, ctx);

                    ActiveTimings[ctx.UserId].Stop();
                    ActiveTimings.Remove(ctx.UserId, out var st);
                    if (r.IsSuccessful)
                    {
                        LogService.LogInformation($"command: {ctx.Command.Name} has successful finished execution in {st.ElapsedMilliseconds}ms.", LogSource.MessagesService, ctx.GuildId);
                    }
                    else
                    {
                        switch (r)
                        {
                        case ExecutionFailedResult executionfailed:
                        {
                            LogService.LogError(executionfailed.ToString(), LogSource.MessagesService, ctx.GuildId, executionfailed.Exception);

                            break;
                        }

                        case ArgumentParseFailedResult parsefailed:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.WithTitle("ArmgumentParseFailure");
                            eb.AddField(parsefailed.Reason, parsefailed.RawArguments);
                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }

                        case ArgumentParserResult parseresult:
                        {
                            LogService.LogCritical("dunno argumentparse", LogSource.MessagesService, ctx.GuildId);
                            await ctx.Channel.SendMessageAsync("a error has occoured and not been handled this error will be resolved shortly. (hopefully)");

                            break;
                        }

                        case ChecksFailedResult checksfailed:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.WithTitle($"{checksfailed.FailedChecks.Count} checks have failed");
                            foreach (var(Check, Result) in checksfailed.FailedChecks)
                            {
                                eb.AddField((Check as MummyCheckBase).Name, Result.Reason, true);
                            }
                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }

                        case CommandDisabledResult disabled:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            await ctx.Channel.SendMessageAsync();

                            eb.WithTitle($"{disabled.Command} is currently diabled");

                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }

                        case CommandNotFoundResult notfound:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.WithTitle($"command with name {notfound.Reason}");
                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }

                        case CommandOnCooldownResult oncooldown:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.WithTitle($"{oncooldown.Command.Name} is currently on cooldown");
                            foreach (var(cooldown, retryafter) in oncooldown.Cooldowns)
                            {
                                int index     = cooldown.ToString().LastIndexOf('.');
                                var bucketype = (CooldownBucketType)cooldown.BucketType;
                                eb.AddField(cooldown.ToString().Substring(index + 1), $"is only allowed to be run {cooldown.Amount} per {cooldown.Per.Humanize()} and it forced per {bucketype}, currently locked for {retryafter.TotalMinutes} Minutes", true);
                            }
                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }

                        case OverloadsFailedResult overloadsFailed:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.WithDescription(overloadsFailed.Reason);
                            foreach (var(command, overloadResult) in overloadsFailed.FailedOverloads)
                            {
                                eb.AddField($"{command.Name} {string.Join(' ', command.Parameters.Select(x => x.Name))}", overloadResult.Reason);
                            }

                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }

                        case ParameterChecksFailedResult paramcheckfailed:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.WithTitle($"checks on {paramcheckfailed.Parameter} have failed with provided argument: {paramcheckfailed.Argument}");
                            foreach (var(Check, Result) in paramcheckfailed.FailedChecks)
                            {
                                var index = Check.ToString().LastIndexOf('.');
                                var name  = Check.ToString().Substring(index + 1);
                                eb.AddField(name, Result.Reason);
                            }
                            break;
                        }

                        case TypeParseFailedResult typeParseFailed:
                        {
                            var eb = new LocalEmbedBuilder();
                            eb.WithAuthor(ctx.User);
                            eb.AddField(typeParseFailed.Parameter.Name, typeParseFailed.Reason);
                            await ctx.Channel.SendMessageAsync(embed : eb.Build());

                            break;
                        }
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogService.LogError("Issue with message service", LogSource.MessagesService, exception: ex);
                }
            }
        }
示例#26
0
        public override ValueTask <TypeParserResult <Color> > ParseAsync(Parameter parameter, string value, MummyContext context)
        {
            if (value.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) ||
                value.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase))
            {
                value = value.Substring(2);
            }
            if (value.StartsWith("#", StringComparison.CurrentCultureIgnoreCase))
            {
                value = value.Substring(1);
            }

            Color color;

            if (int.TryParse(value, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out var hex))
            {
                color = new Color(hex);
                return(TypeParserResult <Color> .Successful(color));
            }
            else if (IsRGB(value, out (int red, int green, int blue)rgb))
            {
                color = new Color(rgb.red, rgb.green, rgb.blue);
                return(TypeParserResult <Color> .Successful(color));
            }
            else
            {
                return(TypeParserResult <Color> .Unsuccessful("Could not parse color"));
            }
        }
 public BurialQuadrantsController(MummyContext context, IWantMyMummyContext con, UserManager <IWantMyMummyUser> tempUser)
 {
     _context     = context;
     mummyContext = con;
     userManager  = tempUser;
 }
示例#28
0
 public Task <bool> JudgeAsync(MummyContext sourceContext, T parameter)
 => Task.FromResult(true);