Example #1
0
        public async Task AddOverrideAsync(string commandName, DefaultPermissionLevel accessType)
        {
            var matched = _service.Commands.FirstOrDefault(x => x.Aliases.Any(a => string.Equals(a, commandName, StringComparison.CurrentCultureIgnoreCase)));

            if (matched == null)
            {
                throw new Exception("Unknown Command Name");
            }

            var modified = false;
            var toEdit   = Context.Server.Settings.CustomCommandPermissions.CustomizedPermission.FirstOrDefault(x => string.Equals(x.Name, matched.Name, StringComparison.CurrentCultureIgnoreCase));

            if (toEdit != null)
            {
                toEdit.Setting = accessType;
                modified       = true;
            }
            else
            {
                Context.Server.Settings.CustomCommandPermissions.CustomizedPermission.Add(new GuildModel.GuildSettings.CommandAccess.CustomPermission
                {
                    Name    = matched.Name,
                    Setting = accessType
                });
            }

            await SimpleEmbedAsync($"Custom Permission override {(modified ? "Modified" : "Added")}, users with {accessType.ToString()} and above permissions, will be able to access it");

            Context.Server.Save();
        }
Example #2
0
        public override Task <PreconditionResult> CheckPermissionsAsync(ICommandContext iContext, CommandInfo command, IServiceProvider services)
        {
            var context = iContext as SocketCommandContext;

            if (context.Channel is IDMChannel)
            {
                return(Task.FromResult(PreconditionResult.FromError("This is a Guild command")));
            }

            try
            {
                var server = services.GetRequiredService <DatabaseHandler>().Execute <GuildModel>(DatabaseHandler.Operation.LOAD, null, context.Guild.Id.ToString());

                var originalLevel = defaultPermissionLevel;

                var resultInfo = new AccessResult();

                if (server.Settings.CustomCommandPermissions.CustomizedPermission.Any())
                {
                    // Check for a command match
                    var match = server.Settings.CustomCommandPermissions.CustomizedPermission.FirstOrDefault(x => x.IsCommand && x.Name.Equals(command.Name, StringComparison.OrdinalIgnoreCase));
                    if (match != null)
                    {
                        defaultPermissionLevel  = match.Setting;
                        resultInfo.IsCommand    = true;
                        resultInfo.IsOverridden = true;
                        resultInfo.MatchName    = match.Name;
                    }
                }

                if (defaultPermissionLevel == DefaultPermissionLevel.AllUsers)
                {
                    LogHandler.LogMessage($"Default: {originalLevel}\n" +
                                          $"New Level: {defaultPermissionLevel}\n" +
                                          $"IsCommand: {resultInfo.IsCommand}\n" +
                                          $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                          $"Match Name: {resultInfo.MatchName}\n" +
                                          $"Command Name: {command.Name}");
                    return(Task.FromResult(PreconditionResult.FromSuccess()));
                }

                if (defaultPermissionLevel == DefaultPermissionLevel.Registered)
                {
                    if (server.Users.Any(x => x.UserID == context.User.Id))
                    {
                        LogHandler.LogMessage($"Default: {originalLevel}\n" +
                                              $"New Level: {defaultPermissionLevel}\n" +
                                              $"IsCommand: {resultInfo.IsCommand}\n" +
                                              $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                              $"Match Name: {resultInfo.MatchName}\n" +
                                              $"Command Name: {command.Name}");
                        return(Task.FromResult(PreconditionResult.FromSuccess()));
                    }
                }
                else if (defaultPermissionLevel == DefaultPermissionLevel.Moderators)
                {
                    if (context.User.CastToSocketGuildUser().IsModeratorOrHigher(server.Settings.Moderation, context.Client))
                    {
                        LogHandler.LogMessage($"Default: {originalLevel}\n" +
                                              $"New Level: {defaultPermissionLevel}\n" +
                                              $"IsCommand: {resultInfo.IsCommand}\n" +
                                              $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                              $"Match Name: {resultInfo.MatchName}\n" +
                                              $"Command Name: {command.Name}");
                        return(Task.FromResult(PreconditionResult.FromSuccess()));
                    }
                }
                else if (defaultPermissionLevel == DefaultPermissionLevel.Administrators)
                {
                    if (context.User.CastToSocketGuildUser().IsAdminOrHigher(server.Settings.Moderation, context.Client))
                    {
                        LogHandler.LogMessage($"Default: {originalLevel}\n" +
                                              $"New Level: {defaultPermissionLevel}\n" +
                                              $"IsCommand: {resultInfo.IsCommand}\n" +
                                              $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                              $"Match Name: {resultInfo.MatchName}\n" +
                                              $"Command Name: {command.Name}");
                        return(Task.FromResult(PreconditionResult.FromSuccess()));
                    }
                }
                else if (defaultPermissionLevel == DefaultPermissionLevel.ServerOwner)
                {
                    if (context.User.Id == context.Guild.OwnerId ||
                        context.Client.GetApplicationInfoAsync().Result.Owner.Id == context.User.Id)
                    {
                        LogHandler.LogMessage($"Default: {originalLevel}\n" +
                                              $"New Level: {defaultPermissionLevel}\n" +
                                              $"IsCommand: {resultInfo.IsCommand}\n" +
                                              $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                              $"Match Name: {resultInfo.MatchName}\n" +
                                              $"Command Name: {command.Name}");
                        return(Task.FromResult(PreconditionResult.FromSuccess()));
                    }
                }
                else if (defaultPermissionLevel == DefaultPermissionLevel.BotOwner)
                {
                    if (context.Client.GetApplicationInfoAsync().Result.Owner.Id == context.User.Id)
                    {
                        LogHandler.LogMessage($"Default: {originalLevel}\n" +
                                              $"New Level: {defaultPermissionLevel}\n" +
                                              $"IsCommand: {resultInfo.IsCommand}\n" +
                                              $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                              $"Match Name: {resultInfo.MatchName}\n" +
                                              $"Command Name: {command.Name}");
                        return(Task.FromResult(PreconditionResult.FromSuccess()));
                    }
                }

                return(Task.FromResult(PreconditionResult.FromError($"You do not have the access level of {defaultPermissionLevel}, which is required to run this command\n" +
                                                                    $"Default: {originalLevel}\n" +
                                                                    $"New Level: {defaultPermissionLevel}\n" +
                                                                    $"IsCommand: {resultInfo.IsCommand}\n" +
                                                                    $"IsOverridden: {resultInfo.IsOverridden}\n" +
                                                                    $"Match Name: {resultInfo.MatchName}\n" +
                                                                    $"Command Name: {command.Name}")));
            }
            catch (Exception e)
            {
                LogHandler.LogMessage(e.ToString(), LogSeverity.Critical);
                return(Task.FromResult(PreconditionResult.FromError($"Permissions Error, please report this to Passive")));
            }
        }
Example #3
0
 public CustomPermissions(DefaultPermissionLevel defaultPermission)
 {
     defaultPermissionLevel = defaultPermission;
 }
Example #4
0
        public override Task <PreconditionResult> CheckPermissionsAsync(ICommandContext iContext, CommandInfo command, IServiceProvider services)
        {
            var context = iContext as SocketCommandContext;

            if (context.Channel is IDMChannel)
            {
                return(Task.FromResult(PreconditionResult.FromError("This is a Guild command")));
            }

            var server = services.GetRequiredService <DatabaseHandler>().Execute <GuildModel>(DatabaseHandler.Operation.LOAD, null, context.Guild.Id.ToString());

            var resultInfo = new AccessResult();

            if (server.Settings.CustomCommandPermissions.CustomizedPermission.Any())
            {
                // Check for a command match
                var match = server.Settings.CustomCommandPermissions.CustomizedPermission.FirstOrDefault(x => x.IsCommand == true && x.Name.Equals(string.IsNullOrWhiteSpace(command.Aliases.FirstOrDefault()) ? command.Name : command.Aliases.FirstOrDefault(), StringComparison.OrdinalIgnoreCase));
                if (match != null)
                {
                    defaultPermissionLevel  = match.Setting;
                    resultInfo.IsCommand    = true;
                    resultInfo.IsOverridden = true;
                    resultInfo.MatchName    = match.Name;
                }
                else
                {
                    // Check for a module match
                    match = server.Settings.CustomCommandPermissions.CustomizedPermission.FirstOrDefault(x => x.IsCommand == false && x.Name.Equals(string.IsNullOrWhiteSpace(command.Module.Aliases.FirstOrDefault()) ? command.Module.Name : command.Module.Aliases.FirstOrDefault(), StringComparison.OrdinalIgnoreCase));
                    if (match != null)
                    {
                        defaultPermissionLevel  = match.Setting;
                        resultInfo.IsCommand    = false;
                        resultInfo.IsOverridden = true;
                        resultInfo.MatchName    = match.Name;
                    }
                }
            }

            if (defaultPermissionLevel == DefaultPermissionLevel.AllUsers)
            {
                return(Task.FromResult(PreconditionResult.FromSuccess()));
            }

            if (defaultPermissionLevel == DefaultPermissionLevel.Registered)
            {
                if (server.Users.Any(x => x.UserID == context.User.Id))
                {
                    return(Task.FromResult(PreconditionResult.FromSuccess()));
                }
            }
            else if (defaultPermissionLevel == DefaultPermissionLevel.Moderators)
            {
                if (context.User.CastToSocketGuildUser().IsModeratorOrHigher(server.Settings.Moderation, context.Client))
                {
                    return(Task.FromResult(PreconditionResult.FromSuccess()));
                }
            }
            else if (defaultPermissionLevel == DefaultPermissionLevel.Administrators)
            {
                if (context.User.CastToSocketGuildUser().IsAdminOrHigher(server.Settings.Moderation, context.Client))
                {
                    return(Task.FromResult(PreconditionResult.FromSuccess()));
                }
            }
            else if (defaultPermissionLevel == DefaultPermissionLevel.ServerOwner)
            {
                if (context.User.Id == context.Guild.OwnerId ||
                    context.Client.GetApplicationInfoAsync().Result.Owner.Id == context.User.Id)
                {
                    return(Task.FromResult(PreconditionResult.FromSuccess()));
                }
            }
            else if (defaultPermissionLevel == DefaultPermissionLevel.BotOwner)
            {
                if (context.Client.GetApplicationInfoAsync().Result.Owner.Id == context.User.Id)
                {
                    return(Task.FromResult(PreconditionResult.FromSuccess()));
                }
            }

            return(Task.FromResult(PreconditionResult.FromError($"You do not have the access level of {defaultPermissionLevel}, which is required to run this commandn\n" +
                                                                $"IsCommand: {resultInfo.IsCommand}\n" +
                                                                $"IsOverridden: {resultInfo.IsCommand}\n" +
                                                                $"Match Name: {resultInfo.MatchName}")));
        }