Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public Task <IGuildChannel> OverwritePermissions(PermissionOverwrite Overwrite)
 {
     throw new NotImplementedException();
 }
Esempio n. 7
0
        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();
        }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 9
0
        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);
            }
        }