/// <summary>
        /// Load permission from files.
        /// </summary>
        /// <returns></returns>
        public async Task LoadPermissions()
        {
            if (!Directory.Exists("Permissions"))
            {
                Directory.CreateDirectory("Permissions");
            }

            int succsess = 0;

            string[] paths = Directory.GetFiles("Permissions", "*.prm", SearchOption.AllDirectories);
            for (int i = 0; i < paths.Length; i++)
            {
                using (StreamReader reader = new StreamReader(paths[i]))
                {
                    string name = Path.GetFileNameWithoutExtension(paths[i]);
                    string file = await reader.ReadToEndAsync();

                    lexer.Lex(file.Split(new[] { Environment.NewLine, " " }, StringSplitOptions.None));

                    try
                    {
                        PermissionClass @class = PermissionClass.Parse(lexer, name);
                        Permissions.Add(@class.Name, @class);

                        succsess++;
                    }
                    catch (Exception e)
                    {
                        await Bot.LoggingManager.LogMessage(LogLevel.Warning, $"Unable to parse {name}.prm", "PermissionManager");

                        await Bot.LoggingManager.LogMessage(e, "PermissionManager");
                    }
                }
            }

            await Bot.LoggingManager.LogMessage(LogLevel.Message, $"Parsed {succsess}/{paths.Length} permission{(paths.Length == 1 ? "" : "s")} files.", "PermissionManager");
        }