Пример #1
0
        private async Task <bool> IsActive(CustomVC vc)
        {
            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string query  = $"SELECT ChannelID FROM CustomVCs WHERE UserID={vc.UserID}";
            bool   exists = await connection.ExecuteScalarAsync <bool>(query);

            return(exists);
        }
Пример #2
0
 private async Task Insert(CustomVC vc)
 {
     if (await HasCustomVC(vc.UserID))
     {
         return;
     }
     using MySqlConnection connection = MySQL.MySQL.getConnection();
     string query = $"INSERT INTO CustomVCs (UserID, ChannelID) VALUES ({vc.UserID}, {vc.ChannelID})";
     await connection.ExecuteAsync(query);
 }
Пример #3
0
        private async Task <CustomVC> CreateCustomVC(SocketGuildUser user)
        {
            if (await HasCustomVC(user.Id))
            {
                return(null);
            }
            CustomVC vc = new CustomVC(user.Id);

            await Insert(vc);

            return(vc);
        }
Пример #4
0
        private async Task <CustomVC> GetCustomVC(SocketVoiceChannel voice)
        {
            if (!await IsCustomVC(voice))
            {
                return(null);
            }
            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string   query = $"SELECT * FROM CustomVCs WHERE ChannelID={voice.Id}";
            CustomVC vc    = await connection.QueryFirstAsync <CustomVC>(query);

            return(vc);
        }
Пример #5
0
        private async Task <CustomVC> GetCustomVC(SocketGuildUser user)
        {
            if (!await HasCustomVC(user.Id))
            {
                return(null);
            }
            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string   query = $"SELECT * FROM CustomVCs WHERE UserID={user.Id}";
            CustomVC vc    = await connection.QueryFirstAsync <CustomVC>(query);

            return(vc);
        }
Пример #6
0
        public async Task ModifyCustomVC(CustomVC vc, int slots)
        {
            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string query = $"UPDATE CustomVCs SET Slots={slots} WHERE UserID={vc.UserID}";
            await connection.ExecuteAsync(query);

            if (await IsActive(vc))
            {
                await Constants.IGuilds.Jordan(_client).GetVoiceChannel(vc.ChannelID).ModifyAsync(x =>
                {
                    x.UserLimit = slots;
                });
            }
        }
Пример #7
0
        public async Task <string> Unload(CustomVC vc)
        {
            if (!await IsActive(vc))
            {
                return(":x: Custom VC is not loaded.");
            }
            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string query = $"UPDATE CustomVCs SET ChannelID=0 WHERE UserID={vc.UserID}";
            await connection.ExecuteAsync(query);

            await Constants.IGuilds.Jordan(_client).GetVoiceChannel(vc.ChannelID).DeleteAsync();

            return(":white_check_mark: Unloaded Custom VC.");
        }
Пример #8
0
        public async Task UserLeftVC(SocketUser socketUser, SocketVoiceState preState, SocketVoiceState postState)
        {
            if (preState.VoiceChannel == null || !await IsCustomVC(preState.VoiceChannel))
            {
                return;
            }
            SocketVoiceChannel voice = preState.VoiceChannel;

            if (voice.Users.Count != 0)
            {
                return;
            }

            CustomVC vc = await GetCustomVC(voice);

            await Unload(vc);
        }
Пример #9
0
        public async Task <string> ModifyCustomVC(CustomVC vc, string setting, int value)
        {
            if (!await HasCustomVC(vc.UserID))
            {
                return(":x: You do not have a CustomVC to edit.");
            }

            Action <VoiceChannelProperties> action;

            switch (setting.ToLower())
            {
            case "slots":
                if (value > 99 || value < 0)
                {
                    return(":x: Slots range from `0` (unlimited) to `99`.");
                }
                action = x => x.UserLimit = value;
                break;

            case "bitrate":
                if (value > 8000 || value < 128000)
                {
                    return(":x: Slots range from `8000` to `128000`.");
                }
                action = x => x.Bitrate = value;
                break;

            default:
                return(":x: Available settings are: `slots, bitrate`.");
            }

            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string query = $"UPDATE CustomVCs SET {setting}={value} WHERE UserID={vc.UserID}";
            await connection.ExecuteAsync(query);

            if (await IsActive(vc))
            {
                await Constants.IGuilds.Jordan(_client).GetVoiceChannel(vc.ChannelID).ModifyAsync(action);
            }
            return(":white_check_mark: CustomVC edited.");
        }
Пример #10
0
        public async Task <string> Load(CustomVC vc)
        {
            if (await IsActive(vc))
            {
                return(":x: Custom VC is already loaded.");
            }
            using MySqlConnection connection = MySQL.MySQL.getConnection();
            string query     = $"SELECT ChannelID FROM CustomVCs WHERE UserID={vc.UserID}";
            ulong  channelid = await connection.ExecuteScalarAsync <ulong>(query);

            SocketGuildUser  user  = Constants.IGuilds.Jordan(_client).GetUser(vc.UserID);
            RestVoiceChannel voice = await Constants.IGuilds.Jordan(_client).CreateVoiceChannelAsync($"{user.Username}'s VC",
                                                                                                     x =>
            {
                x.CategoryId = Data.GetChnlId("Voice Booth", MySQL.ChannelType.CategoryChannel);
                if (vc.Slots != 0)
                {
                    x.UserLimit = vc.Slots;
                }
                else
                {
                    x.UserLimit = null;
                }
                x.Bitrate = vc.Bitrate;
            });

            query = $"UPDATE CustomVCs SET ChannelID={voice.Id} WHERE UserID={vc.UserID}";
            await connection.ExecuteAsync(query);

            OverwritePermissions perms = new OverwritePermissions(
                muteMembers: PermValue.Allow,
                deafenMembers: PermValue.Allow,
                moveMembers: PermValue.Allow
                );
            await voice.AddPermissionOverwriteAsync(user, perms);

            return(":white_check_mark: Loaded Custom VC.");
        }
Пример #11
0
            public async Task Create()
            {
                if (await _customVCService.HasCustomVC(Context.User.Id))
                {
                    await ReplyAsync(":x: You already have a Custom VC.");

                    return;
                }
                IUserMessage msg = await ReplyAsync("How many slots should your Custom VC contain? (0-99, 0 to disable the limit)");

                SocketMessage response = await NextMessageAsync(true, true, TimeSpan.FromSeconds(120));

                if (response == null)
                {
                    await msg.AddReactionAsync(Constants.IEmojis.X);

                    return;
                }
                int slots;

                if (int.TryParse(response.Content, out int result) && result < 100)
                {
                    slots = result;
                }
                else
                {
                    await ReplyAsync(":x: Invalid response.");

                    return;
                }
                CustomVC vc = await _customVCService.GetOrCreateCustomVC(Context.User as SocketGuildUser);

                await _customVCService.ModifyCustomVC(vc, slots);

                await ReplyAsync(":white_check_mark: Custom VC created.");
            }
Пример #12
0
            public async Task Edit(string setting, int value)
            {
                CustomVC vc = await _customVCService.GetOrCreateCustomVC(Context.User as SocketGuildUser);

                await ReplyAsync(await _customVCService.ModifyCustomVC(vc, setting, value));
            }
Пример #13
0
            public async Task Unload()
            {
                CustomVC vc = await _customVCService.GetOrCreateCustomVC(Context.User as SocketGuildUser);

                await ReplyAsync(await _customVCService.Unload(vc));
            }