uni farm

slack apps を作成してチャンネルへの投稿をコマンドラインから実行できるようにする

slack apps を作成してチャンネルへの投稿をコマンドラインから実行できるようにする

slackcat を使って time チャンネルにコメント投稿を行っていたが、あまりメンテナンスされていないようなので、slack apps を作成して、投稿できるようにしてみた

案外簡単だった

slack apps 設定

app 作成

https://api.slack.com/apps

より Create New App から適当に app を作成

user oauth token 発行

OAuth & Permissions ページにて

User Token Scopes からスコープの設定。設定値は下の方にはっている manifest.json を参考のこと

設定後に Reinstall to Workspace を実行。今回はアプリとして実行しないのでチャンネルは適当でいいと思う

User OAuth Token にあるトークンを控えておく

apps 画面から export した manifest.json。基本的にスコープの設定のみおこなっている。as_user として投稿するには chat:write の設定が必要だった

{
    "display_information": {
        "name": "post_times"
    },
    "features": {
        "bot_user": {
            "display_name": "post_times",
            "always_online": false
        }
    },
    "oauth_config": {
        "scopes": {
            "user": [
                "channels:read",
                "channels:write",
                "chat:write"
            ]
        }
    },
    "settings": {
        "org_deploy_enabled": false,
        "socket_mode_enabled": false,
        "token_rotation_enabled": false
    }
}

シェルスクリプト作成

以下のようなスクリプトを作成した

取得した slack app のトークンと、slack 画面から取得した該当チャンネル ID(チャンネル名の詳細からコピーできる) を使っている

#!/bin/bash

# 引数
TEXT="$1"

TOKEN="xoxp-xxxx" # user oauth token
CHANNEL="Cxxxx" # times-channel id

# call Slack API
# -s -o で標準出力に表示しないようにしている
curl -s -o /dev/null \
     -X POST "https://slack.com/api/chat.postMessage" \
     -H "Content-type: application/json" \
     -H "Authorization: Bearer $TOKEN" \
     -d "{
           \"channel\": \"$CHANNEL\",
           \"text\": \"$TEXT\",
           \"as_user\": true
         }"
     

コマンドライン設定

alias を使う。~/.zshrc に以下の内容を追記する。コマンドの場所は任意

alias times='~/commands/post-times.sh'

以下のようにして投稿できるようになる

times "(`・ω・´)ゞ"

参考

  • api

https://api.slack.com/methods/chat.postMessage

  • curl コマンド参考

https://api.slack.com/web

2024, Built with Gatsby. This site uses Google Analytics.