Slackで、自分が参加しているPrivateChanel（非公開チャンネル）のリストをCSVでダウンロードする

- Slackでは、管理者権限でもPrivateChannel（非公開チャンネル）の一覧を取得することは出来ないっぽい（たぶん）。
- PrivateChannelは検索してもヒットしないので、そもそも存在すら検知できない。
- なので、チーム全体でPrivateChannelを整理することになったとき、「そもそも今はどんなPrivateChannelが存在するのか？」という全容が掴めず途方に暮れた…( ´ー｀)ﾌｩｰ．．．
- でも自分が参加しているPrivateChannelの一覧なら、APIから取得できる！
- 「よし、各部署の何人かのメンバーに頼んで、その人が参加しているPrivateChannel一覧を取得してもらい、寄せ集めて全体像をつかもう（＾ｖ＾）！」
- ということで、非エンジニアの社内のメンバーでも簡単にCSV形式でPrivateChannel一覧をダウンロードできるツールを作りました。
- 使う手順は以下の通り。
    1. 以下のHTMLファイルをダウンロード
    1. Chromeなどのブラウザで開く
    1. 「Tokenを確認」というリンク先にある、自分のSlackのTokenをコピー
    1. 元のページに戻ってTokenを貼り付け
    1. ダウンロードボタンを押す

```html
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>

<body>
    <style type="text/css" media="screen">
    #wrapeer {
        width: 1000px;
        margin: 0 auto;
    }

    #linkToToken {
        display: block;
        padding: 10px;
    }

    input[type=password] {
        font-size: 120%;
        display: block;
        padding: 10px;
        width: 840px;
        float: left;
    }

    #downloadBtn {
        border: 1px solid #ccc;
        padding: 10px;
        border-radius: 5px;
        float: right;
    }

    #downloadBtn:hover {
        background: skyblue;
    }
    </style>
    <div id="wrapeer">
        <a id="linkToToken" href="https://api.slack.com/docs/oauth-test-tokens" target="_blank">Tokenを確認</a>
        <input type="password" id="token" placeholder="↑のページに記載されている”Token”をコピペし、ダウンロードボタンを押してください">
        <a type="button" id="downloadBtn" style="">ダウンロード</a>
    </div>
    <script type="text/javascript">
    <!--
    $(document).ready(function() {
            $('#token').change(function(event) {
                getUserMap(getToken(), getCsvOfGroupList)
            });
            var getToken = function() {
                return $('#token').val()
            }
            var getUserMap = function(token, successCollback) {
                $.ajax({
                        url: 'https://slack.com/api/users.list?token=' + token,
                        type: 'GET',
                        dataType: 'json',
                    })
                    .done(function(result) {
                        var usernameMap = []
                        for (var i = 0, len = result.members.length; i < len; i++) {
                            usernameMap[result.members[i].id] = result.members[i].name
                        }
                        successCollback(usernameMap, token)
                    }).fail(function() {})

            }
            var getCsvOfGroupList = function(usernameMap, token) {
                $.ajax({
                        url: 'https://slack.com/api/groups.list?token=' + token,
                        type: 'GET',
                        dataType: 'json',
                    })
                    .done(function(result) {
                        var csv = [
                            '公開/非公開',
                            'チャンネル名',
                            '作成者',
                            'メンバー数',
                            '目的',
                        ].join(',') + "\n"
                        for (var i = 0, len = result.groups.length; i < len; i++) {
                            var group = result.groups[i]
                            // 複数人でのDirectMessageと、アーカイブ済みのものは除外する
                            if (group.name.indexOf('mpdm-') === 0 || group.is_archived) {
                                continue;
                            }
                            var groupInfo = [
                                '非公開',
                                group.name,
                                usernameMap[group.creator],
                                group.members.length,
                                group.purpose.value,
                            ]
                            csv += groupInfo.join(",") + "\n"

                        }
                        setDownloadLink(csv)
                    }).fail(function() {})
            }

            var setDownloadLink = function(csvString) {
                var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
                var blob = new Blob([bom, csvString], {
                    "type": "text/csv"
                });
                if (window.navigator.msSaveBlob) {
                    window.navigator.msSaveBlob(blob, "test.csv");
                    // msSaveOrOpenBlobの場合はファイルを保存せずに開ける
                    window.navigator.msSaveOrOpenBlob(blob, "test.csv");
                } else {
                    document.getElementById("downloadBtn").href = window.URL.createObjectURL(blob);
                }
            }
        })
        -->
    </script>
</body>

</html>
```
- 一時的にしか使わないツールなので、すごく適当に作りました。所々イケてないかと思いますが、ご容赦くださいm(_ _)m