Slack-AFK は Slack で離席状態を管理するためのボットです。このリポジトリは Ruby 版の Slack-AFK を Golang に移植したものです。
/afk [メッセージ]- 離席状態にする/lunch [メッセージ]- ランチ中の状態にする(1 時間後に自動解除)/start- 始業状態にする/finish [メッセージ]- 退勤状態にする(翌日朝まで自動応答)/comeback- 離席状態を解除する@bot-name ping- ping に対して「pong」と応答@bot-name help- ヘルプを表示
- Socket Mode で動作
- リッチな応答(絵文字やブロックを使用)
- メンションの代理応答機能
- メンション履歴の記録と表示
- Go 1.25.2 以上
- Redis または DynamoDB(ローカル開発には DynamoDB Local を使用可能)
このボットは以下の2つのデータストアをサポートしています:
# .envファイルまたは環境変数
STORE_TYPE=redis
REDIS_URL=redis://localhost:6379# .envファイルまたは環境変数
STORE_TYPE=dynamodb
# ローカル開発の場合
DYNAMO_LOCAL=1
DYNAMO_ENDPOINT=http://localhost:8000
# テーブル名のカスタマイズ(オプション)
DYNAMO_TABLE_PREFIX=slack_afk必須の環境変数:
SLACK_BOT_TOKEN- Slack ボットの OAuth トークン(xoxb-で始まる)SLACK_APP_TOKEN- Slack アプリのトークン(xapp-で始まる)
ストア設定:
STORE_TYPE- データストアのタイプ(redisまたはdynamodb、デフォルト:redis)REDIS_URL- Redis の URL(STORE_TYPE=redis の場合)DYNAMO_LOCAL- DynamoDB Local を使用する場合は1に設定DYNAMO_ENDPOINT- DynamoDB のエンドポイント(ローカル開発時)DYNAMO_TABLE_PREFIX- DynamoDB テーブル名のプレフィックス(デフォルト:slack_afk)
その他のオプション:
SLACK_DOMAIN- Slack のドメイン(オプション、デフォルトはslack.com)AFK_START_MESSAGE- 始業時のカスタムメッセージAFK_FINISH_MESSAGE- 退勤時のカスタムメッセージ
環境変数は直接設定するか、.envファイルを使用して設定できます:
# .env ファイルの例
SLACK_BOT_TOKEN=xoxb-your-token
SLACK_APP_TOKEN=xapp-your-token
REDIS_URL=redis://localhost:6379.env.sampleファイルをコピーして.envファイルを作成することもできます:
cp .env.sample .env
# 編集して適切な値を設定# DynamoDB Local と Redis を起動
docker-compose up -d
# DynamoDB Local のみを起動
docker-compose up -d dynamodb-local
# Redis のみを起動
docker-compose up -d redis
# DynamoDB Admin(GUIツール)を起動
docker-compose up -d dynamodb-admin
# http://localhost:8001 でアクセス可能# すべてのテスト(DynamoDB Local と Redis を自動起動してテスト)
make test
# Redis のみのテスト
make test-redis
# DynamoDB のみのテスト
make test-dynamodb
# 手動でテストを実行する場合
# DynamoDB のテスト
DYNAMO_LOCAL=1 go test -v ./store/... -run TestDynamoDBClient
# Redis のテスト
REDIS_URL=redis://localhost:6379 go test -v ./store/... -run TestRedisClient注意:
make testは自動的に DynamoDB Local と Redis を起動します- Docker が起動していない場合は、外部サービスを必要とするテストはスキップされます
- 両方のデータストア実装(Redis と DynamoDB)のテストが実行されます
cd go
go build -o slack-afk./slack-afkまたは、環境変数を指定して実行:
SLACK_BOT_TOKEN=xoxb-xxx SLACK_APP_TOKEN=xapp-xxx REDIS_URL=redis://localhost:6379 ./slack-afk- メインパッケージ: アプリケーションのエントリーポイント
- Slack パッケージ: ソケットモードの処理
- ハンドラーパッケージ: コマンドとイベントの処理
- コマンドパッケージ: 各コマンドの実装
- ストアパッケージ: データストアとの連携(Redis / DynamoDB)
- プレゼンテーションパッケージ: リッチな応答の構築
ストアパッケージは Datastore インターフェースを定義しており、Redis と DynamoDB の両方の実装を提供しています。これにより、環境変数の設定だけで簡単にデータストアを切り替えることができます。
type Datastore interface {
Set(key string, value string) error
Get(key string) (string, error)
Delete(key string) error
Expire(key string, duration time.Duration) error
AddToList(key string, value string) error
GetListRange(key string, start, stop int64) ([]string, error)
RemoveFromList(key string, value string) error
GetUserPresence(uid string) (map[string]interface{}, error)
SetUserPresence(uid string, data map[string]interface{}) error
}