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(); }
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"))); } }
public CustomPermissions(DefaultPermissionLevel defaultPermission) { defaultPermissionLevel = defaultPermission; }
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}"))); }