Added ;rpc ;upc and ;cpc - they copy permission from one thing to another (user/role/channel) closes #258

For example
;cpc #general ~ #new-channel

Copies all permissions set for general to new-channel
This commit is contained in:
Master Kwoth
2016-05-04 07:29:58 +02:00
parent 562e561dba
commit 5fbe36e5da
2 changed files with 151 additions and 0 deletions

View File

@ -192,6 +192,60 @@ namespace NadekoBot.Modules.Permissions.Classes
Task.Run(() => WriteServerToJson(serverPerms));
}
internal static void CopyRolePermissions(Role fromRole, Role toRole)
{
var server = fromRole.Server;
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
new ServerPermissions(server.Id, server.Name));
var from = GetRolePermissionsById(server, fromRole.Id);
if (from == null)
serverPerms.RolePermissions.Add(fromRole.Id, from = new Permissions(fromRole.Name));
var to = GetRolePermissionsById(server, toRole.Id);
if (to == null)
serverPerms.RolePermissions.Add(toRole.Id, to = new Permissions(toRole.Name));
to.CopyFrom(from);
Task.Run(() => WriteServerToJson(serverPerms));
}
internal static void CopyChannelPermissions(Channel fromChannel, Channel toChannel)
{
var server = fromChannel.Server;
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
new ServerPermissions(server.Id, server.Name));
var from = GetChannelPermissionsById(server, fromChannel.Id);
if (from == null)
serverPerms.ChannelPermissions.Add(fromChannel.Id, from = new Permissions(fromChannel.Name));
var to = GetChannelPermissionsById(server, toChannel.Id);
if (to == null)
serverPerms.ChannelPermissions.Add(toChannel.Id, to = new Permissions(toChannel.Name));
to.CopyFrom(from);
Task.Run(() => WriteServerToJson(serverPerms));
}
internal static void CopyUserPermissions(User fromUser, User toUser)
{
var server = fromUser.Server;
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
new ServerPermissions(server.Id, server.Name));
var from = GetUserPermissionsById(server, fromUser.Id);
if (from == null)
serverPerms.UserPermissions.Add(fromUser.Id, from = new Permissions(fromUser.Name));
var to = GetUserPermissionsById(server, toUser.Id);
if (to == null)
serverPerms.UserPermissions.Add(toUser.Id, to = new Permissions(toUser.Name));
to.CopyFrom(from);
Task.Run(() => WriteServerToJson(serverPerms));
}
public static void SetServerModulePermission(Server server, string moduleName, bool value)
{
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
@ -424,6 +478,18 @@ namespace NadekoBot.Modules.Permissions.Classes
FilterWords = false;
}
public void CopyFrom(Permissions other)
{
Modules.Clear();
foreach (var mp in other.Modules)
Modules.AddOrUpdate(mp.Key, mp.Value, (s, b) => mp.Value);
Commands.Clear();
foreach (var cp in other.Commands)
Commands.AddOrUpdate(cp.Key, cp.Value, (s, b) => cp.Value);
FilterInvites = other.FilterInvites;
FilterWords = other.FilterWords;
}
public override string ToString()
{
var toReturn = "";