permission fixes
This commit is contained in:
parent
63dbd8bac6
commit
3b170c283d
@ -8,8 +8,6 @@ using NadekoBot.Extensions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Reflection;
|
||||
|
||||
|
||||
|
||||
namespace NadekoBot {
|
||||
public class NadekoStats {
|
||||
public string BotVersion { get; } = $"{Assembly.GetExecutingAssembly().GetName().Name} v{Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
|
||||
|
@ -48,7 +48,9 @@ namespace NadekoBot.Classes.Permissions {
|
||||
} catch { }
|
||||
if (user.Server.Owner.Id == user.Id || (role != null && user.HasRole(role)))
|
||||
return true;
|
||||
throw new Exception($"You don't have the necessary role (**{PermissionsHandler._permissionsDict[user.Server].PermissionsControllerRole}**) to change permissions.");
|
||||
ServerPermissions perms;
|
||||
PermissionsHandler._permissionsDict.TryGetValue(user.Server.Id, out perms);
|
||||
throw new Exception($"You don't have the necessary role (**{(perms?.PermissionsControllerRole ?? "Nadeko")}**) to change permissions.");
|
||||
}
|
||||
|
||||
var permissionType = PermissionsHandler.GetPermissionBanType(command, user, channel);
|
||||
@ -85,11 +87,11 @@ namespace NadekoBot.Classes.Permissions {
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
if (PermissionsHandler._permissionsDict[user.Server].Verbose) //if verbose - print errors
|
||||
if (PermissionsHandler._permissionsDict[user.Server.Id].Verbose) //if verbose - print errors
|
||||
error = msg;
|
||||
return false;
|
||||
} catch (Exception ex) {
|
||||
if (PermissionsHandler._permissionsDict[user.Server].Verbose) //if verbose - print errors
|
||||
if (PermissionsHandler._permissionsDict[user.Server.Id].Verbose) //if verbose - print errors
|
||||
error = ex.Message;
|
||||
return false;
|
||||
}
|
||||
|
@ -11,8 +11,8 @@ using Discord.Commands;
|
||||
|
||||
namespace NadekoBot.Classes.Permissions {
|
||||
public static class PermissionsHandler {
|
||||
public static ConcurrentDictionary<Server, ServerPermissions> _permissionsDict =
|
||||
new ConcurrentDictionary<Server, ServerPermissions>();
|
||||
public static ConcurrentDictionary<ulong, ServerPermissions> _permissionsDict =
|
||||
new ConcurrentDictionary<ulong, ServerPermissions>();
|
||||
|
||||
public enum PermissionBanType {
|
||||
None, ServerBanCommand, ServerBanModule,
|
||||
@ -28,12 +28,8 @@ namespace NadekoBot.Classes.Permissions {
|
||||
try {
|
||||
var strippedFileName = Path.GetFileNameWithoutExtension(file);
|
||||
var id = ulong.Parse(strippedFileName);
|
||||
var server = NadekoBot.client.GetServer(id);
|
||||
if (server == null)
|
||||
throw new ArgumentException("Server does not exist");
|
||||
|
||||
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<ServerPermissions>(File.ReadAllText(file));
|
||||
_permissionsDict.TryAdd(server, data);
|
||||
_permissionsDict.TryAdd(id, data);
|
||||
} catch (Exception ex) {
|
||||
//Console.WriteLine($"Failed getting server with id: {file}\nReason: {ex.Message}");
|
||||
}
|
||||
@ -42,56 +38,62 @@ namespace NadekoBot.Classes.Permissions {
|
||||
}
|
||||
|
||||
internal static Permissions GetRolePermissionsById(Server server, ulong id) {
|
||||
if (!_permissionsDict.ContainsKey(server))
|
||||
ServerPermissions serverPerms;
|
||||
if (!_permissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||
return null;
|
||||
|
||||
Permissions toReturn;
|
||||
_permissionsDict[server].RolePermissions.TryGetValue(id, out toReturn);
|
||||
serverPerms.RolePermissions.TryGetValue(id, out toReturn);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
internal static Permissions GetUserPermissionsById(Server server, ulong id) {
|
||||
if (!_permissionsDict.ContainsKey(server))
|
||||
ServerPermissions serverPerms;
|
||||
if (!_permissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||
return null;
|
||||
|
||||
Permissions toReturn;
|
||||
_permissionsDict[server].UserPermissions.TryGetValue(id, out toReturn);
|
||||
serverPerms.UserPermissions.TryGetValue(id, out toReturn);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
internal static Permissions GetChannelPermissionsById(Server server, ulong id) {
|
||||
if (!_permissionsDict.ContainsKey(server))
|
||||
ServerPermissions serverPerms;
|
||||
if (!_permissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||
return null;
|
||||
|
||||
Permissions toReturn;
|
||||
_permissionsDict[server].ChannelPermissions.TryGetValue(id, out toReturn);
|
||||
serverPerms.ChannelPermissions.TryGetValue(id, out toReturn);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
internal static Permissions GetServerPermissions(Server server) {
|
||||
if (!_permissionsDict.ContainsKey(server))
|
||||
ServerPermissions serverPerms;
|
||||
if (!_permissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||
return null;
|
||||
|
||||
return _permissionsDict[server].Permissions;
|
||||
return serverPerms.Permissions;
|
||||
}
|
||||
|
||||
internal static PermissionBanType GetPermissionBanType(Command command, User user, Channel channel) {
|
||||
var server = user.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
ServerPermissions serverPerms;
|
||||
if (!_permissionsDict.TryGetValue(server.Id,out serverPerms)) {
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name);
|
||||
_permissionsDict.TryAdd(server.Id, serverPerms);
|
||||
}
|
||||
bool val;
|
||||
Permissions perm;
|
||||
//server
|
||||
if (_permissionsDict[server].Permissions.modules.TryGetValue(command.Category, out val) && val == false)
|
||||
if (serverPerms.Permissions.modules.TryGetValue(command.Category, out val) && val == false)
|
||||
return PermissionBanType.ServerBanModule;
|
||||
if (_permissionsDict[server].Permissions.commands.TryGetValue(command.Text, out val) && val == false)
|
||||
if (serverPerms.Permissions.commands.TryGetValue(command.Text, out val) && val == false)
|
||||
return PermissionBanType.ServerBanCommand;
|
||||
//channel
|
||||
if (_permissionsDict[server].ChannelPermissions.TryGetValue(channel.Id, out perm) &&
|
||||
if (serverPerms.ChannelPermissions.TryGetValue(channel.Id, out perm) &&
|
||||
perm.modules.TryGetValue(command.Category, out val) && val == false)
|
||||
return PermissionBanType.ChannelBanModule;
|
||||
if (_permissionsDict[server].ChannelPermissions.TryGetValue(channel.Id, out perm) &&
|
||||
if (serverPerms.ChannelPermissions.TryGetValue(channel.Id, out perm) &&
|
||||
perm.commands.TryGetValue(command.Text, out val) && val == false)
|
||||
return PermissionBanType.ChannelBanCommand;
|
||||
|
||||
@ -104,7 +106,7 @@ namespace NadekoBot.Classes.Permissions {
|
||||
bool foundNotBannedRole = false;
|
||||
foreach (var role in user.Roles) {
|
||||
//if every role is banned from using the module -> rolebanmodule
|
||||
if (_permissionsDict[server].RolePermissions.TryGetValue(role.Id, out perm) &&
|
||||
if (serverPerms.RolePermissions.TryGetValue(role.Id, out perm) &&
|
||||
perm.modules.TryGetValue(command.Category, out val) && val == false)
|
||||
continue;
|
||||
else {
|
||||
@ -123,7 +125,7 @@ namespace NadekoBot.Classes.Permissions {
|
||||
foundNotBannedRole = false;
|
||||
foreach (var role in user.Roles) {
|
||||
//if every role is banned from using the module -> rolebanmodule
|
||||
if (_permissionsDict[server].RolePermissions.TryGetValue(role.Id, out perm) &&
|
||||
if (serverPerms.RolePermissions.TryGetValue(role.Id, out perm) &&
|
||||
perm.commands.TryGetValue(command.Text, out val) && val == false)
|
||||
continue;
|
||||
else {
|
||||
@ -135,19 +137,19 @@ namespace NadekoBot.Classes.Permissions {
|
||||
return PermissionBanType.RoleBanCommand;
|
||||
|
||||
//user
|
||||
if (_permissionsDict[server].UserPermissions.TryGetValue(user.Id, out perm) &&
|
||||
if (serverPerms.UserPermissions.TryGetValue(user.Id, out perm) &&
|
||||
perm.modules.TryGetValue(command.Category, out val) && val == false)
|
||||
return PermissionBanType.UserBanModule;
|
||||
if (_permissionsDict[server].UserPermissions.TryGetValue(user.Id, out perm) &&
|
||||
if (serverPerms.UserPermissions.TryGetValue(user.Id, out perm) &&
|
||||
perm.commands.TryGetValue(command.Text, out val) && val == false)
|
||||
return PermissionBanType.UserBanCommand;
|
||||
|
||||
return PermissionBanType.None;
|
||||
}
|
||||
|
||||
private static void WriteServerToJson(Server server) {
|
||||
string pathToFile = $"data/permissions/{server.Id}.json";
|
||||
File.WriteAllText(pathToFile, Newtonsoft.Json.JsonConvert.SerializeObject(_permissionsDict[server], Newtonsoft.Json.Formatting.Indented));
|
||||
private static void WriteServerToJson(ulong serverId) {
|
||||
string pathToFile = $"data/permissions/{serverId}.json";
|
||||
File.WriteAllText(pathToFile, Newtonsoft.Json.JsonConvert.SerializeObject(_permissionsDict[serverId], Newtonsoft.Json.Formatting.Indented));
|
||||
}
|
||||
|
||||
public static void WriteToJson() {
|
||||
@ -158,152 +160,147 @@ namespace NadekoBot.Classes.Permissions {
|
||||
}
|
||||
|
||||
public static string GetServerPermissionsRoleName(Server server) {
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
return _permissionsDict[server].PermissionsControllerRole;
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
return serverPerms.PermissionsControllerRole;
|
||||
}
|
||||
|
||||
internal static void SetPermissionsRole(Server server, string roleName) {
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
_permissionsDict[server].PermissionsControllerRole = roleName;
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
serverPerms.PermissionsControllerRole = roleName;
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
internal static void SetVerbosity(Server server, bool val) {
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
_permissionsDict[server].Verbose = val;
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
serverPerms.Verbose = val;
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetServerModulePermission(Server server, string moduleName, bool value) {
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
var modules = _permissionsDict[server].Permissions.modules;
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
var modules = serverPerms.Permissions.modules;
|
||||
if (modules.ContainsKey(moduleName))
|
||||
modules[moduleName] = value;
|
||||
else
|
||||
modules.Add(moduleName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetServerCommandPermission(Server server, string commandName, bool value) {
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
var commands = _permissionsDict[server].Permissions.commands;
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
var commands = serverPerms.Permissions.commands;
|
||||
if (commands.ContainsKey(commandName))
|
||||
commands[commandName] = value;
|
||||
else
|
||||
commands.Add(commandName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetChannelModulePermission(Channel channel, string moduleName, bool value) {
|
||||
var server = channel.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
if (!_permissionsDict[server].ChannelPermissions.ContainsKey(channel.Id))
|
||||
_permissionsDict[server].ChannelPermissions.Add(channel.Id, new Permissions(channel.Name));
|
||||
|
||||
var modules = _permissionsDict[server].ChannelPermissions[channel.Id].modules;
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
|
||||
if (!serverPerms.ChannelPermissions.ContainsKey(channel.Id))
|
||||
serverPerms.ChannelPermissions.Add(channel.Id, new Permissions(channel.Name));
|
||||
|
||||
var modules = serverPerms.ChannelPermissions[channel.Id].modules;
|
||||
|
||||
if (modules.ContainsKey(moduleName))
|
||||
modules[moduleName] = value;
|
||||
else
|
||||
modules.Add(moduleName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetChannelCommandPermission(Channel channel, string commandName, bool value) {
|
||||
var server = channel.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
if (!_permissionsDict[server].ChannelPermissions.ContainsKey(channel.Id))
|
||||
_permissionsDict[server].ChannelPermissions.Add(channel.Id, new Permissions(channel.Name));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
|
||||
var commands = _permissionsDict[server].ChannelPermissions[channel.Id].commands;
|
||||
if (!serverPerms.ChannelPermissions.ContainsKey(channel.Id))
|
||||
serverPerms.ChannelPermissions.Add(channel.Id, new Permissions(channel.Name));
|
||||
|
||||
var commands = serverPerms.ChannelPermissions[channel.Id].commands;
|
||||
|
||||
if (commands.ContainsKey(commandName))
|
||||
commands[commandName] = value;
|
||||
else
|
||||
commands.Add(commandName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetRoleModulePermission(Role role, string moduleName, bool value) {
|
||||
var server = role.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
if (!_permissionsDict[server].RolePermissions.ContainsKey(role.Id))
|
||||
_permissionsDict[server].RolePermissions.Add(role.Id, new Permissions(role.Name));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
|
||||
var modules = _permissionsDict[server].RolePermissions[role.Id].modules;
|
||||
if (!serverPerms.RolePermissions.ContainsKey(role.Id))
|
||||
serverPerms.RolePermissions.Add(role.Id, new Permissions(role.Name));
|
||||
|
||||
var modules = serverPerms.RolePermissions[role.Id].modules;
|
||||
|
||||
if (modules.ContainsKey(moduleName))
|
||||
modules[moduleName] = value;
|
||||
else
|
||||
modules.Add(moduleName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetRoleCommandPermission(Role role, string commandName, bool value) {
|
||||
var server = role.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
if (!_permissionsDict[server].RolePermissions.ContainsKey(role.Id))
|
||||
_permissionsDict[server].RolePermissions.Add(role.Id, new Permissions(role.Name));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
|
||||
var commands = _permissionsDict[server].RolePermissions[role.Id].commands;
|
||||
if (!serverPerms.RolePermissions.ContainsKey(role.Id))
|
||||
serverPerms.RolePermissions.Add(role.Id, new Permissions(role.Name));
|
||||
|
||||
var commands = serverPerms.RolePermissions[role.Id].commands;
|
||||
|
||||
if (commands.ContainsKey(commandName))
|
||||
commands[commandName] = value;
|
||||
else
|
||||
commands.Add(commandName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetUserModulePermission(User user, string moduleName, bool value) {
|
||||
var server = user.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
if (!_permissionsDict[server].UserPermissions.ContainsKey(user.Id))
|
||||
_permissionsDict[server].UserPermissions.Add(user.Id, new Permissions(user.Name));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
|
||||
var modules = _permissionsDict[server].UserPermissions[user.Id].modules;
|
||||
if (!serverPerms.UserPermissions.ContainsKey(user.Id))
|
||||
serverPerms.UserPermissions.Add(user.Id, new Permissions(user.Name));
|
||||
|
||||
var modules = serverPerms.UserPermissions[user.Id].modules;
|
||||
|
||||
if (modules.ContainsKey(moduleName))
|
||||
modules[moduleName] = value;
|
||||
else
|
||||
modules.Add(moduleName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
|
||||
public static void SetUserCommandPermission(User user, string commandName, bool value) {
|
||||
var server = user.Server;
|
||||
if (!_permissionsDict.ContainsKey(server)) {
|
||||
_permissionsDict.TryAdd(server, new ServerPermissions(server.Id, server.Name));
|
||||
}
|
||||
if (!_permissionsDict[server].UserPermissions.ContainsKey(user.Id))
|
||||
_permissionsDict[server].UserPermissions.Add(user.Id, new Permissions(user.Name));
|
||||
ServerPermissions serverPerms = _permissionsDict.GetOrAdd(server.Id,
|
||||
serverPerms = new ServerPermissions(server.Id, server.Name));
|
||||
if (!serverPerms.UserPermissions.ContainsKey(user.Id))
|
||||
serverPerms.UserPermissions.Add(user.Id, new Permissions(user.Name));
|
||||
|
||||
var commands = _permissionsDict[server].UserPermissions[user.Id].commands;
|
||||
var commands = serverPerms.UserPermissions[user.Id].commands;
|
||||
|
||||
if (commands.ContainsKey(commandName))
|
||||
commands[commandName] = value;
|
||||
else
|
||||
commands.Add(commandName, value);
|
||||
Task.Run(() => WriteServerToJson(server));
|
||||
Task.Run(() => WriteServerToJson(server.Id));
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
|
Loading…
Reference in New Issue
Block a user