private PermissionOverwrite[] CreateOverwrites(JsonOverwrite[] jsonOverwrites) { PermissionOverwrite[] overwrites = new PermissionOverwrite[jsonOverwrites.Length]; for (int i = 0; i < overwrites.Length; i++) { overwrites[i] = new PermissionOverwrite(jsonOverwrites[i]); } return(overwrites); }
public static GuildPermission GetOverwritePermissions( IDiscordGuildUser user, IDiscordGuildChannel channel, GuildPermission basePermissions) { var permissions = basePermissions; if (permissions.HasFlag(GuildPermission.Administrator)) { return(GuildPermission.All); } if (channel.PermissionOverwrites != null) { PermissionOverwrite overwriteEveryone = channel.PermissionOverwrites .FirstOrDefault(x => x.Id == channel.GuildId); if (overwriteEveryone != null) { permissions &= ~overwriteEveryone.DeniedPermissions; permissions |= overwriteEveryone.AllowedPermissions; } PermissionOverwrite overwrites = new PermissionOverwrite(); if (user.RoleIds != null) { foreach (ulong roleId in user.RoleIds) { PermissionOverwrite roleOverwrites = channel.PermissionOverwrites .FirstOrDefault(x => x.Id == roleId); if (roleOverwrites != null) { overwrites.AllowedPermissions |= roleOverwrites.AllowedPermissions; overwrites.DeniedPermissions &= roleOverwrites.DeniedPermissions; } } } permissions &= ~overwrites.DeniedPermissions; permissions |= overwrites.AllowedPermissions; PermissionOverwrite userOverwrite = channel.PermissionOverwrites .FirstOrDefault(x => x.Id == user.Id); if (userOverwrite != null) { permissions &= ~userOverwrite.DeniedPermissions; permissions |= userOverwrite.AllowedPermissions; } } return(permissions); }
public async ValueTask <GuildPermission> GetPermissionsAsync(IDiscordGuildUser user) { IDiscordGuild guild = await GetGuildAsync(); GuildPermission permissions = await guild.GetPermissionsAsync(user); if (permissions.HasFlag(GuildPermission.Administrator)) { return(GuildPermission.All); } if (_packet.PermissionOverwrites != null) { PermissionOverwrite overwriteEveryone = _packet.PermissionOverwrites .FirstOrDefault(x => x.Id == GuildId) ?? null; if (overwriteEveryone != null) { permissions &= ~overwriteEveryone.DeniedPermissions; permissions |= overwriteEveryone.AllowedPermissions; } PermissionOverwrite overwrites = new PermissionOverwrite(); if (user.RoleIds != null) { foreach (ulong roleId in user.RoleIds) { PermissionOverwrite roleOverwrites = _packet.PermissionOverwrites.FirstOrDefault(x => x.Id == roleId); if (roleOverwrites != null) { overwrites.AllowedPermissions |= roleOverwrites.AllowedPermissions; overwrites.DeniedPermissions &= roleOverwrites.DeniedPermissions; } } } permissions &= ~overwrites.DeniedPermissions; permissions |= overwrites.AllowedPermissions; PermissionOverwrite userOverwrite = _packet.PermissionOverwrites.FirstOrDefault(x => x.Id == user.Id); if (userOverwrite != null) { permissions &= ~userOverwrite.DeniedPermissions; permissions |= userOverwrite.AllowedPermissions; } } return(permissions); }
void IUpdatableGuildChannel.RemovePermissionOverwrite(string id) { if (string.IsNullOrWhiteSpace(id)) { throw new ArgumentNullException("Cannot remove overwrite with null or empty id."); } PermissionOverwrite overwriteToRemove = permissionOverwrites.Where(x => x.Identifier == id) .SingleOrDefault(); if (overwriteToRemove != null) { permissionOverwrites.Remove(overwriteToRemove); } }
void IUpdatableGuildChannel.AddNewPermissionOverwrite(PermissionOverwrite overwrite) { if (overwrite is null) { throw new ArgumentNullException("Cannot add empty overwrite to channel."); } var permission = permissionOverwrites.Where(x => x.Identifier == overwrite.Identifier) .SingleOrDefault(); if (permission != null) { throw new ArgumentException("Channel permission overwrites " + "allready contains overwrite with provided id."); } permissionOverwrites.Add(overwrite); }
public Task <IGuildChannel> OverwritePermissions(PermissionOverwrite Overwrite) { throw new NotImplementedException(); }
static void Main() { //Create a client with the token Console.Write("Token: "); DiscordClient client = new DiscordClient(Console.ReadLine()); //find the guild Console.Write($"Guild id: "); Guild targetGuild = client.GetGuild(long.Parse(Console.ReadLine())); Guild ourGuild = DuplicateGuild(client, targetGuild); DeleteAllChannels(client, ourGuild); List<RoleDupe> ourRoles = DuplicateRoles(client, targetGuild, ourGuild); #region create channels OrganizedChannelList channels = new OrganizedChannelList(targetGuild.GetChannels()); Console.WriteLine("Duplicating categories..."); //duplicate category channels List<CategoryDupe> ourCategories = new List<CategoryDupe>(); foreach (var c in channels.Categories) { GuildChannel category; try { category = client.GetGuildChannel(c.Id); } catch (DiscordHttpErrorException e) { //ofcourse you could make it return no matter what error, but this is better for debugging if (e.Error.Code == 50001) continue; else throw; } //create the category GuildChannel ourCategory = ourGuild.CreateChannel(new ChannelCreationProperties() { Name = category.Name, Type = ChannelType.Category }); ourCategory.Modify(new GuildChannelProperties() { Position = category.Position }); foreach (var overwrite in category.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) continue; PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourCategory.AddPermissionOverwrite(ourOverwrite); } CategoryDupe dupe = new CategoryDupe { TargetCategory = category, OurCategory = ourCategory }; ourCategories.Add(dupe); Console.WriteLine($"Duplicated {category.Name}"); Thread.Sleep(50); } Console.WriteLine("Duplicating channels..."); //duplicate text channels foreach (var c in channels.TextChannels) { TextChannel channel; try { channel = client.GetTextChannel(c.Id); } catch (DiscordHttpErrorException e) { //ofcourse you could make it return no matter what error, but this is better for debugging if (e.Error.Code == 50001) continue; else throw; } TextChannel ourChannel = ourGuild.CreateTextChannel(new ChannelCreationProperties() { Name = channel.Name, ParentId = channel.ParentId != null ? (long?)ourCategories.First(ca => ca.TargetCategory.Id == channel.ParentId).OurCategory.Id : null }); ourChannel.Modify(new TextChannelProperties() { Nsfw = channel.Nsfw, Position = channel.Position, Topic = channel.Topic, SlowMode = channel.SlowMode }); foreach (var overwrite in channel.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) continue; PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourChannel.AddPermissionOverwrite(ourOverwrite); } Console.WriteLine($"Duplicated {channel.Name}"); Thread.Sleep(50); } //duplicate voice channels foreach (var c in channels.VoiceChannels) { VoiceChannel channel; try { channel = client.GetVoiceChannel(c.Id); } catch (DiscordHttpErrorException e) { //ofcourse you could make it return no matter what error, but this is better for debugging if (e.Error.Code == 50001) continue; else throw; } //create voice channels VoiceChannel ourChannel = ourGuild.CreateVoiceChannel(new ChannelCreationProperties() { Name = channel.Name, ParentId = channel.ParentId != null ? (long?)ourCategories.First(ca => ca.TargetCategory.Id == channel.ParentId).OurCategory.Id : null }); ourChannel.Modify(new VoiceChannelProperties() { Bitrate = channel.Bitrate, Position = channel.Position, UserLimit = channel.UserLimit }); foreach (var overwrite in channel.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) continue; PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourChannel.AddPermissionOverwrite(ourOverwrite); } Console.WriteLine($"Duplicated {channel.Name}"); Thread.Sleep(100); } #endregion Console.WriteLine("Done!"); Console.ReadLine(); }
private static void DuplicateChannels(DiscordClient client, Guild targetGuild, Guild ourGuild, List <RoleDupe> ourRoles) { OrganizedChannelList channels = new OrganizedChannelList(targetGuild.GetChannels()); Console.WriteLine("Duplicating categories..."); //duplicate category channels List <CategoryDupe> ourCategories = new List <CategoryDupe>(); foreach (var c in channels.Categories) { GuildChannel category; try { category = client.GetGuildChannel(c.Id); } catch (DiscordHttpException e) { //ofcourse you could make it return no matter what error, but this is better for debugging if (e.Code == DiscordError.MissingAccess) { continue; } else { throw; } } //create the category GuildChannel ourCategory = ourGuild.CreateChannel(new GuildChannelCreationProperties() { Name = category.Name, Type = ChannelType.Category }); ourCategory.Modify(new GuildChannelProperties() { Position = category.Position }); foreach (var overwrite in category.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) { continue; } PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourCategory.AddPermissionOverwrite(ourOverwrite); } CategoryDupe dupe = new CategoryDupe { TargetCategory = category, OurCategory = ourCategory }; ourCategories.Add(dupe); Console.WriteLine($"Duplicated {category.Name}"); Thread.Sleep(50); } Console.WriteLine("Duplicating channels..."); //duplicate text channels foreach (var c in channels.TextChannels) { TextChannel channel; try { channel = client.GetTextChannel(c.Id); } catch (DiscordHttpException e) { //ofcourse you could make it return no matter what error, but this is better for debugging if (e.Code == DiscordError.MissingAccess) { continue; } else { throw; } } TextChannel ourChannel = ourGuild.CreateTextChannel(new GuildChannelCreationProperties() { Name = channel.Name, ParentId = channel.ParentId != null ? (ulong?)ourCategories.First(ca => ca.TargetCategory.Id == channel.ParentId).OurCategory.Id : null }); ourChannel.Modify(new TextChannelProperties() { Nsfw = channel.Nsfw, Position = channel.Position, Topic = channel.Topic, SlowMode = channel.SlowMode }); foreach (var overwrite in channel.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) { continue; } PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourChannel.AddPermissionOverwrite(ourOverwrite); } Console.WriteLine($"Duplicated {channel.Name}"); Thread.Sleep(50); } //duplicate voice channels foreach (var c in channels.VoiceChannels) { VoiceChannel channel; try { channel = client.GetVoiceChannel(c.Id); } catch (DiscordHttpException e) { //ofcourse you could make it return no matter what error, but this is better for debugging if (e.Code == DiscordError.MissingAccess) { continue; } else { throw; } } //create voice channels VoiceChannel ourChannel = ourGuild.CreateVoiceChannel(new GuildChannelCreationProperties() { Name = channel.Name, ParentId = channel.ParentId != null ? (ulong?)ourCategories.First(ca => ca.TargetCategory.Id == channel.ParentId).OurCategory.Id : null }); ourChannel.Modify(new VoiceChannelProperties() { Bitrate = channel.Bitrate, Position = channel.Position, UserLimit = channel.UserLimit }); foreach (var overwrite in channel.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) { continue; } PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourChannel.AddPermissionOverwrite(ourOverwrite); } Console.WriteLine($"Duplicated {channel.Name}"); Thread.Sleep(50); } }
private static void DuplicateChannels(DiscordClient client, Guild targetGuild, Guild ourGuild, List <RoleDupe> ourRoles) { OrganizedChannelList channels = new OrganizedChannelList(targetGuild.GetChannels()); Console.WriteLine("Duplicating categories..."); //duplicate category channels List <CategoryDupe> ourCategories = new List <CategoryDupe>(); foreach (var c in channels.Categories) { GuildChannel category = c.ToGuildChannel(); //create the category GuildChannel ourCategory = ourGuild.CreateChannel(category.Name, ChannelType.Category); ourCategory.Modify(new GuildChannelProperties() { Position = category.Position }); foreach (var overwrite in category.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) { continue; } PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourCategory.AddPermissionOverwrite(ourOverwrite); } CategoryDupe dupe = new CategoryDupe { TargetCategory = category, OurCategory = ourCategory }; ourCategories.Add(dupe); Console.WriteLine($"Duplicated {category.Name}"); Thread.Sleep(50); } Console.WriteLine("Duplicating channels..."); //duplicate text channels foreach (var c in channels.TextChannels) { TextChannel channel = c.ToTextChannel(); TextChannel ourChannel = ourGuild.CreateTextChannel(channel.Name, channel.ParentId != null ? (ulong?)ourCategories.First(ca => ca.TargetCategory.Id == channel.ParentId).OurCategory.Id : null); ourChannel.Modify(new TextChannelProperties() { Nsfw = channel.Nsfw, Position = channel.Position, Topic = channel.Topic, SlowMode = channel.SlowMode }); foreach (var overwrite in channel.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) { continue; } PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourChannel.AddPermissionOverwrite(ourOverwrite); } Console.WriteLine($"Duplicated {channel.Name}"); Thread.Sleep(50); } //duplicate voice channels foreach (var c in channels.VoiceChannels) { VoiceChannel channel = c.ToVoiceChannel(); //create voice channels VoiceChannel ourChannel = ourGuild.CreateVoiceChannel(channel.Name, channel.ParentId != null ? (ulong?)ourCategories.First(ca => ca.TargetCategory.Id == channel.ParentId).OurCategory.Id : null); ourChannel.Modify(new VoiceChannelProperties() { Bitrate = channel.Bitrate, Position = channel.Position, UserLimit = channel.UserLimit }); foreach (var overwrite in channel.PermissionOverwrites) { if (overwrite.Type == PermissionOverwriteType.Member) { continue; } PermissionOverwrite ourOverwrite = overwrite; ourOverwrite.Id = ourRoles.First(ro => ro.TargetRole.Id == overwrite.Id).OurRole.Id; ourChannel.AddPermissionOverwrite(ourOverwrite); } Console.WriteLine($"Duplicated {channel.Name}"); Thread.Sleep(50); } }