private async Task AllowOnlyRoles(IGuild guild, IVoiceChannel voiceChannel,
                                      GuildGroupsContext guildGroupsContext)
    {
        var rolePermissions = new OverwritePermissions().Modify(viewChannel: PermValue.Allow,
                                                                connect: PermValue.Allow,
                                                                speak: PermValue.Allow);

        var denyPermissions = new OverwritePermissions().Modify(viewChannel: PermValue.Deny,
                                                                connect: PermValue.Deny,
                                                                speak: PermValue.Deny);

        await voiceChannel.AddPermissionOverwriteAsync(guild.EveryoneRole, denyPermissions);

        await voiceChannel.AddPermissionOverwriteAsync(guildGroupsContext.CurrentUser, rolePermissions);

        if (guildGroupsContext.Roles != null)
        {
            foreach (var role in guildGroupsContext.Roles)
            {
                await voiceChannel.AddPermissionOverwriteAsync(role, rolePermissions);
            }
        }

        if (guildGroupsContext.Users != null)
        {
            foreach (var user in guildGroupsContext.Users)
            {
                await voiceChannel.AddPermissionOverwriteAsync(user, rolePermissions);
            }
        }
    }
Example #2
0
 /// <summary>
 /// Sets whether a user is allowed to join a VC
 /// </summary>
 /// <param name="vc">VC to set permissions on</param>
 /// <param name="user">User to set permissions on</param>
 /// <param name="allowUser">If the user is allowed to join</param>
 public async Task SetUserAllowed(IVoiceChannel vc, IGuildUser user, bool allowUser)
 {
     var newPerm   = allowUser ? PermValue.Allow : PermValue.Inherit;
     var userPerms = vc.GetPermissionOverwrite(user) ?? OverwritePermissions.InheritAll;
     await vc.AddPermissionOverwriteAsync(user,
                                          userPerms.Modify(viewChannel: newPerm, connect: newPerm)).ConfigureAwait(false);
 }
Example #3
0
        private async Task _client_UserVoiceStateUpdated(SocketUser arg1, SocketVoiceState arg2, SocketVoiceState arg3)
        {
            ulong GuildId   = 741794858339008602;
            ulong ChannelId = 741799885082329121;

            if (arg3.VoiceChannel.Id == ChannelId)
            {
                IVoiceChannel voiceChannel = await bot.GetGuild(GuildId).CreateVoiceChannelAsync("Nothing");

                IVoiceChannel channel = bot.GetGuild(GuildId).GetVoiceChannel(ChannelId);
                await voiceChannel.ModifyAsync(x =>
                {
                    x.Name       = arg1.Username;
                    x.Position   = bot.GetGuild(741794858339008602).GetVoiceChannel(741799885082329121).Position + 1;;
                    x.CategoryId = 741799684624089138;
                });

                IUser a = arg1;
                await voiceChannel.AddPermissionOverwriteAsync(a, OverwritePermissions.AllowAll(voiceChannel));

                CreatedId = channel.Id;
                var user = bot.GetGuild(GuildId).GetUser(arg1.Id);
                await user.ModifyAsync(User =>
                {
                    User.ChannelId = voiceChannel.Id;
                });
            }
        }
Example #4
0
        public async Task PrivateChannel(string name, params IUser[] users)
        {
            if ((Context.User as SocketGuildUser).VoiceChannel == null)
            {
                await ReplyAsync("You must be in a voice channel to use this command.");

                return;
            }

            if (users == null)
            {
                await ReplyAsync("You need to @ at least one user!");

                return;
            }

            IVoiceChannel[] voiceChannels = (await Context.Guild.GetVoiceChannelsAsync().ConfigureAwait(false)).ToArray();

            string channelName = voiceChannels.FindVoiceChannelName(name.ToLower(), true);

            Globals.deleteGuard = true;

            await ReplyAsync("Creating channel " + name + " for user " + Context.User.Mention + ". Just a moment, please!");

            IVoiceChannel createdChannel = await Context.Guild.CreateVoiceChannelAsync(name);

            //Is there REALLY no better way to do this?!
            OverwritePermissions permissions = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny);

            OverwritePermissions allow = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);

            await createdChannel.AddPermissionOverwriteAsync(Context.Guild.EveryoneRole, permissions);

            foreach (var allowedUser in users)
            {
                await createdChannel.AddPermissionOverwriteAsync(allowedUser, allow);
            }

            await(Context.User as IGuildUser).ModifyAsync(x =>
            {
                x.Channel = new Optional <IVoiceChannel>(createdChannel);
            }).ConfigureAwait(false);

            await Task.Delay(200);

            Globals.deleteGuard = false;
        }
Example #5
0
 /// <summary>
 /// Sets if a VC should be NSFW or not
 /// </summary>
 /// <param name="vc">VC to modify</param>
 /// <param name="nsfw">If the VC should be nsfw</param>
 public async Task SetVcNsfw(IVoiceChannel vc, bool nsfw)
 {
     var props    = SpService.GetProperties(vc.GuildId);
     var newPerm  = nsfw ? PermValue.Allow : PermValue.Inherit;
     var nsfwRole = vc.Guild.GetRole(props.NsfwRoleId);
     var perms    = vc.GetPermissionOverwrite(nsfwRole) ?? OverwritePermissions.InheritAll;
     await vc.AddPermissionOverwriteAsync(nsfwRole, perms.Modify(viewChannel: newPerm, connect: newPerm)).ConfigureAwait(false);
 }
Example #6
0
        public async Task UnlockAsync()
        {
            if (userLockedChannels.ContainsKey(Context.User.Id))
            {
                IVoiceChannel channel = userLockedChannels[Context.User.Id];
                foreach (var item in channel.PermissionOverwrites)
                {
                    Console.WriteLine(item.TargetId);
                    await channel.RemovePermissionOverwriteAsync(Context.Guild.GetUser(item.TargetId));
                }
                OverwritePermissions resetPermission = new OverwritePermissions();
                resetPermission.Modify(connect: PermValue.Inherit);

                await channel.AddPermissionOverwriteAsync(Context.Guild.EveryoneRole, resetPermission);

                userLockedChannels.Remove(Context.User.Id);
            }
            else
            {
                Console.WriteLine("User doesn't have any locked channels");
            }
            await Task.CompletedTask;
        }
Example #7
0
        public async Task PrivateChannel(string vChannelTypeArg, params IUser[] user)
        {
            if ((Context.User as SocketGuildUser).VoiceChannel == null)
            {
                await ReplyAsync("You must be in a voice channel to use this command.");

                return;
            }

            if (user == null)
            {
                await ReplyAsync("You need to @ at least one user!");

                return;
            }

            #if !DEBUG
            if (!Context.Channel.Id.EqualsMulti(Program.ChannelIds.Voice, Program.ChannelIds.Voice2, Program.ChannelIds.Mod, Program.ChannelIds.Medic))
            {
                await ReplyAsync("Please use this command in the voice chat channels!");

                return;
            }
            #endif

            if (Globals.vcCreators.ContainsKey(Context.User.Id))
            {
                await ReplyAsync("You already created " + Globals.vcCreators[Context.User.Id] + "! Leave that channel before making a new one.");

                return;
            }

            if (!vChannelTypeArg.ToLower().EqualsMulti("general", "discussion", "chill", "comfort", "stream", "karaoke", "gaming", "drawing"))
            {
                await ReplyAsync("Invalid channel type!");

                return;
            }

            string vChannelType = "Private " + vChannelTypeArg.ToLower().First().ToString().ToUpper() + vChannelTypeArg.ToLower().Substring(1);

            IVoiceChannel[] voiceChannels = (await Context.Guild.GetVoiceChannelsAsync().ConfigureAwait(false)).ToArray();

            int loop          = 0;
            int channelNumber = 1;

            while (loop < 2)
            {
                foreach (var voiceChannel in voiceChannels)
                {
                    if (voiceChannel.Name == vChannelType + " " + channelNumber.ToString())
                    {
                        channelNumber++;
                        loop = 0;
                    }
                }

                loop++;
            }

            string channelName = vChannelType + " " + channelNumber.ToString();

            Globals.deleteGuard = true;

            await ReplyAsync("Creating channel " + channelName + " for user " + Context.User.Mention + ". Just a moment, please!");

            Globals.vcCreators[Context.User.Id] = channelName;

            IVoiceChannel createdChannel = await Context.Guild.CreateVoiceChannelAsync(channelName);

            OverwritePermissions permissions = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny);
            //permissions.Modify(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny);

            OverwritePermissions allow = new OverwritePermissions(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);
            //allow.Modify(PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Allow, PermValue.Deny, PermValue.Deny, PermValue.Deny, PermValue.Allow, PermValue.Deny, PermValue.Deny);

            foreach (var allowedUser in user)
            {
                await createdChannel.AddPermissionOverwriteAsync(allowedUser, allow);
            }

            await createdChannel.AddPermissionOverwriteAsync(Context.Guild.EveryoneRole, permissions);

            await(Context.User as IGuildUser).ModifyAsync(x =>
            {
                x.Channel = new Optional <IVoiceChannel>(createdChannel);
            }).ConfigureAwait(false);

            await Task.Delay(200);

            Globals.deleteGuard = false;
        }
Example #8
0
 /// <summary>
 /// Sets if a user is trusted to modify a vc's permissions
 /// </summary>
 /// <param name="vc">VC to modify</param>
 /// <param name="user">User to trust/untrust</param>
 /// <param name="trustUser">If the user should be trusted</param>
 public async Task SetUserTrusted(IVoiceChannel vc, IGuildUser user, bool trustUser)
 {
     var newPerms = trustUser ? GetOwnerPermissions(vc) : OverwritePermissions.InheritAll;
     await vc.AddPermissionOverwriteAsync(user, newPerms).ConfigureAwait(false);
 }
Example #9
0
 /// <summary>
 /// Makes the VC public or private
 /// </summary>
 /// <param name="vc">VC to make private</param>
 /// <param name="makePrivate">If the VC should be private</param>
 public async Task SetPrivate(IVoiceChannel vc, bool makePrivate)
 {
     var perms   = vc.GetPermissionOverwrite(vc.Guild.EveryoneRole) ?? OverwritePermissions.InheritAll;
     var newPerm = makePrivate ? PermValue.Deny : PermValue.Allow;
     await vc.AddPermissionOverwriteAsync(vc.Guild.EveryoneRole, perms.Modify(viewChannel: newPerm, connect: newPerm)).ConfigureAwait(false);
 }
Example #10
0
        public async Task RoleLottery()
        {
            IGuild       guild    = client.GetGuild(spiritBearGuildID) as IGuild;       // Spirit Bear Guild
            ITextChannel announce = await guild.GetSystemChannelAsync();                // Announcement channel

            IVoiceChannel voice = await guild.GetVoiceChannelAsync(434092857415041024); // The winner's voice channel

            IRole everyone        = guild.EveryoneRole;                                 // The everyone role
            IRole participantRole = guild.GetRole(411281455331672064);                  // The lottery role
            IRole winningRole     = guild.GetRole(335456437352529921);                  // The winning role
            // All users in the guild
            var users = await guild.GetUsersAsync();

            // All possible participants
            IEnumerable <IGuildUser> participants = users.Where(user => user.RoleIds.Any(roleID => roleID == participantRole.Id));
            // Everyone who currently has the winning role
            IEnumerable <IGuildUser> currentWinners = users.Where(user => user.RoleIds.Any(roleID => roleID == winningRole.Id));

            // Removes any current winner from the participants list
            participants.ToList().RemoveAll(participant => currentWinners.Any(currentWinner => participant == currentWinner));

            string msg = "Lottery:\n";

            // Adds who the role was removed from to the message
            msg += $"Took away {string.Join(", ", currentWinners.Select(user => user.Username))}\'s {winningRole.Name}\n";

            // Removes the winning role from anyone who currently has it
            foreach (var user in currentWinners)
            {
                await user.RemoveRoleAsync(winningRole, new RequestOptions { AuditLogReason = $"Previous {winningRole.Name}" });
            }

            // Randomly selects the winner
            IGuildUser winner = participants.ElementAt(rand.Next(0, participants.Count()));

            // Gives the winner their role
            await winner.AddRoleAsync(winningRole, new RequestOptions { AuditLogReason = $"The new {winningRole.Name} is in town" });

            // Edits the winner's voice channel name
            await voice.ModifyAsync((VoiceChannelProperties prop) =>
            {
                prop.Name    = $"{winner.Username}\'s Executive Suite";
                prop.Bitrate = 64000;
            }, new RequestOptions { AuditLogReason = "Reset and rename" });

            // Resets permissions to their 'default' values
            await voice.SyncPermissionsAsync(new RequestOptions { AuditLogReason = "Reset permissions" });

            // Edits everyone role permission overwrites
            await voice.AddPermissionOverwriteAsync(everyone,
                                                    new OverwritePermissions(manageChannel : PermValue.Deny, manageRoles : PermValue.Deny, connect : PermValue.Deny, moveMembers : PermValue.Deny),
                                                    new RequestOptions { AuditLogReason = "Reset permissions" });

            // Edits winner role permission overwrites
            await voice.AddPermissionOverwriteAsync(winningRole,
                                                    new OverwritePermissions(connect : PermValue.Allow, moveMembers : PermValue.Allow, manageRoles : PermValue.Allow),
                                                    new RequestOptions { AuditLogReason = "Reset permssions" });

            msg += $"Participants: {string.Join(", ", participants.Select(participant => participant.Username))}\n";
            msg += $"This week's winner is: {winner.Mention}!";

            await(announce as ISocketMessageChannel).SendMessageAsync(msg);
        }