Last active
October 29, 2017 16:19
-
-
Save mohemohe/db8a1846753a9506e28104cdf093847d to your computer and use it in GitHub Desktop.
心.io | require: curl, jq
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
KokoroShVersion=1 | |
KokoroRc="${HOME}/.kokororc" | |
####################################### | |
# ホーム直下の.kokororcを読む | |
# Globals: | |
# KokoroRc: kokoro.shの設定ファイルの保存場所 | |
# Arguments: | |
# None | |
# Returns: | |
# None | |
####################################### | |
function loadConfig() { | |
if [[ -r "${KokoroRc}" ]]; then { | |
source "${KokoroRc}" | |
checkConfig | |
} else { | |
createConfig | |
} fi | |
} | |
####################################### | |
# .kokororcに必要な変数が定義されているか確認する | |
# Globals: | |
# ACCESS_TOKEN: kokoro.ioのアクセストークン | |
# Arguments: | |
# None | |
# Returns: | |
# None | |
####################################### | |
function checkConfig() { | |
if [[ "${ACCESS_TOKEN}" == "" ]]; then { | |
errorLog "'${KokoroRc}' の 'ACCESS_TOKEN' が空っぽだよ💢" | |
exit 1 | |
} fi | |
} | |
####################################### | |
# ホーム直下に.kokororcを作成する | |
# Globals: | |
# KokoroRc: kokoro.shの設定ファイルの保存場所 | |
# Arguments: | |
# None | |
# Returns: | |
# None | |
####################################### | |
function createConfig() { | |
cat << EOS >| "${KokoroRc}" | |
API_BASE_URL='https://kokoro.io/api' | |
ACCESS_TOKEN='' | |
EOS | |
errorLog "'${KokoroRc}' にコンフィグファイルを作ったから 'ACCESS_TOKEN' にアクセストークンを入れてね♥" | |
exit 1 | |
} | |
####################################### | |
# 動作環境チェック | |
# Globals: | |
# None | |
# Arguments: | |
# None | |
# Returns: | |
# 0: 問題なし | |
# 1: なんかたりない | |
####################################### | |
function checkCommand() { | |
local result=0 | |
local requireCommandList=' | |
basename | |
cat | |
sort | |
curl | |
jq | |
' | |
for command in ${requireCommandList}; do { | |
type "${command}" &> /dev/null | |
if [[ "$?" == "1" ]]; then { | |
result=1 | |
} fi | |
} done | |
echo $result | |
} | |
####################################### | |
# チャンネルの情報を取得する | |
# Globals: | |
# ACCESS_TOKEN: kokoro.ioのアクセストークン | |
# Arguments: | |
# $1: チャンネル名 | |
# Returns: | |
# *: チャンネルのリスト または チャンネルID | |
####################################### | |
function getChannelList() { | |
local result= | |
local channels=$(curl -X GET \ | |
--header 'Accept: application/json' \ | |
--header "X-Access-Token: ${ACCESS_TOKEN}" \ | |
'https://kokoro.io/api/v1/memberships?archived=false' \ | |
2>/dev/null) | |
if [[ "${1}" == "" ]]; then { | |
# チャンネルリストを出力 | |
local list=$(echo "${channels}" | jq -r ".[] | { id: .channel.id, name: .channel.channel_name} | .id, .name") | |
result=$(echo "${list}" | while read id; read name; [ "$id$name" ]; do { | |
echo "${id} ${name}" | |
} done | sort -k 2,2) | |
echo "${result}" | |
} else { | |
# チャンネルIDを出力 | |
result=$(echo "${channels}" | jq -r ".[] | select(.channel.channel_name == \"${1}\") | .channel.id") | |
echo -e "${result}" | |
} fi | |
} | |
####################################### | |
# 指定したチャンネルのメッセージを取得する | |
# Globals: | |
# ACCESS_TOKEN: kokoro.ioのアクセストークン | |
# Arguments: | |
# $1: チャンネルID | |
# Returns: | |
# None | |
####################################### | |
function getChannelMessage() { | |
local channelId="$(getChannelList "${1}")" | |
local messages=$(curl -X GET \ | |
--header 'Content-Type: application/x-www-form-urlencoded' \ | |
--header 'Accept: application/json' \ | |
--header "X-Access-Token: ${ACCESS_TOKEN}" \ | |
"https://kokoro.io/api/v1/channels/${channelId}/messages" \ | |
2> /dev/null) | |
echo "${messages}" \ | |
| jq -r "reverse | .[] | { display_name: .display_name, raw_content: .raw_content, published_at: .published_at} | .display_name, .published_at, .raw_content" \ | |
| while read name; read date; read message; [ "$name$date$message" ]; do { | |
echo "${name} ${date}" | |
echo " ${message}" | |
echo | |
} done | |
} | |
####################################### | |
# 指定したチャンネルにメッセージを投稿する | |
# Globals: | |
# ACCESS_TOKEN: kokoro.ioのアクセストークン | |
# Arguments: | |
# $1: チャンネルID | |
# $2: メッセージ | |
# Returns: | |
# None | |
####################################### | |
function postChannelMessage() { | |
local channelId="$(getChannelList "${1}")" | |
curl -X POST \ | |
--header 'Content-Type: application/x-www-form-urlencoded' \ | |
--header 'Accept: application/json' \ | |
--header "X-Access-Token: ${ACCESS_TOKEN}" \ | |
--data-urlencode "message=${2}" \ | |
"https://kokoro.io/api/v1/channels/${channelId}/messages" \ | |
&> /dev/null | |
} | |
####################################### | |
# 標準エラー出力にログを吐く | |
# Globals: | |
# None | |
# Arguments: | |
# $1: 吐き出す文字列 | |
# Returns: | |
# None | |
####################################### | |
function errorLog() { | |
echo "$1" 1>&2 | |
} | |
####################################### | |
# helpだす | |
# Globals: | |
# None | |
# Arguments: | |
# $1...$n | |
# Returns: | |
# None | |
####################################### | |
function man() { | |
local me=$(basename "${0}") | |
cat << EOS 1>&2 | |
${me} get channel : チャンネルリスト取得 | |
${me} get [name] : 指定チャンネルのメッセージを取得 | |
${me} post channel [name] : チャンネル作成(未実装) | |
${me} post [name] [message] : 指定チャンネルにメッセージを投稿 | |
EOS | |
} | |
####################################### | |
# main関数 | |
# Globals: | |
# None | |
# Arguments: | |
# $1...$n | |
# Returns: | |
# None | |
####################################### | |
function main() { | |
local mode="${1}" | |
local channel="${2}" | |
local name="${3}" | |
shift 2 | |
local message= | |
if [ -p /dev/stdin ]; then { | |
message=$(cat -) | |
} else { | |
message="$*" | |
} fi | |
if [[ "$(checkCommand)" == "1" ]]; then { | |
errorLog "動作に必要なコマンドがないよ" | |
exit 1 | |
} fi | |
loadConfig | |
case "${mode}" in | |
"get" ) { | |
if [[ "${channel}" == "channel" ]]; then { | |
getChannelList | |
} else { | |
getChannelMessage "${channel}" | |
} fi | |
} ;; | |
"post" ) { | |
if [[ "${channel}" == "channel" ]]; then { | |
createPublicChannel "${name}" | |
} else { | |
postChannelMessage "${channel}" "${message}" | |
} fi | |
} ;; | |
* ) { | |
man | |
exit 1 | |
} ;; | |
esac | |
exit 0 | |
} | |
main $* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
## CONFIG | |
# トークンを入れてね | |
ACCESS_TOKEN='' | |
# 投稿先のチャンネル名を入れてね | |
TARGET_CHANNNEL='kokoro.io/テスト用' | |
## CONFIG kokomade | |
IFS=$'\n' | |
CHANNELS=$(curl -X GET --header 'Accept: application/json' --header "X-Access-Token: ${ACCESS_TOKEN}" 'https://kokoro.io/api/v1/channels?archived=false' 2>/dev/null) | |
TARGET_CHANNEL_ID=$(echo ${CHANNELS} | jq -r "map(select( .[\"channel_name\"] == \"${TARGET_CHANNNEL}\")) | .[].id" ) | |
# $1: id, $2: message | |
function post() { | |
echo ${2} | |
curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --header "X-Access-Token: ${ACCESS_TOKEN}" --data-urlencode "message=${2}" "https://kokoro.io/api/v1/channels/${1}/messages" &> /dev/null | |
} | |
if [ -p /dev/stdin ]; then { | |
cat - | while read LINE; do { | |
post ${TARGET_CHANNEL_ID} "🐈 ${LINE}" | |
} done | |
} else { | |
post ${TARGET_CHANNEL_ID} "🐈 $*" | |
} fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
Version 2, December 2004 | |
Copyright (C) 2017 mohemohe <[email protected]> | |
Everyone is permitted to copy and distribute verbatim or modified | |
copies of this license document, and changing it is allowed as long | |
as the name is changed. | |
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
0. You just DO WHAT THE FUCK YOU WANT TO. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment