Discord で /start と /end を打つだけで勤怠がつけられる bot です。記録はサーバーごとの Google スプレッドシートにたまっていき、勤務時間も勝手に計算してくれます。無料です。
| コマンド | 使える人 | やること |
|---|---|---|
/init |
管理者 | 最初の設定。Google スプレッドシートとつなぐ |
/config |
管理者 | 設定の確認と接続テスト |
/reset |
管理者 | 設定をリセット |
/start |
全員 | 勤務開始 |
/end |
全員 | 勤務終了。todo(やったこと)は必須 |
打ち忘れても大丈夫です。time で時刻を、/start なら day で日付もあとから指定できます。
/start # いまから勤務開始
/start time:0900 day:-1 # 昨日の 9:00 に開始
/end todo:コーディング # いま勤務終了
/end todo:会議 time:18:00 # 18:00 に勤務終了
time:09:00、0900、900day:2023-03-15、20230315、today、yesterday、または-1(昨日)・0(今日)・1(明日)
- 招待リンクからサーバーに追加します。権限は「チャンネルを見る」「メッセージを送信」「スラッシュコマンドを使用」の 3 つです。
- 管理者が
/initを打つと、設定ガイドのページが出ます。その通りに Google Cloud でプロジェクトと OAuth クライアントを作って(無料)、Google でログインすれば、専用のスプレッドシートができあがります。 - 最後に、Google Cloud の OAuth の公開ステータスを「公開」にしておいてください。「テスト」のままだと、しばらくして記録できなくなることがあります。
これでメンバー全員が /start と /end を使えます。
月ごとに yyyy-MM のシートができて、1 回の勤務が 1 行になります。
| 列 | 中身 |
|---|---|
| プロジェクト名 | コマンドを打ったチャンネルの名前 |
| ユーザー名 | Discord のユーザー名 |
| やったこと | /end の todo |
| 差分 | 勤務時間(自動計算) |
| 開始時刻・終了時刻 | /start・/end の時刻 |
| channel_id・discord_id・uuid | チャンネル ID、ユーザー ID、記録の ID |
チャンネルごとに名前が残るので、プロジェクトごとの作業時間も追えます。bot にチャンネルを見る権限がないとプロジェクト名が channel-XXXXXX になりますが、記録はちゃんとされます。
勤怠の記録は、サーバーの管理者の Google アカウントにあるスプレッドシートにだけ保存されます。kintai-discord 側のサーバーには、勤務時刻や「やったこと」を保存しません。
- スプレッドシートは管理者のものなので、誰に見せるか、いつ消すかは管理者が決められます。
- kintai-discord が Google に求める権限は、Google スプレッドシートの読み書きだけです。Gmail やカレンダー、ドライブのほかのファイルには触れません。
- kintai-discord がサービスを終えても、スプレッドシートはそのまま手元に残ります。
- スプレッドシートに書き込むための Google の認証情報は、暗号化して預かっています。そのため、仕組みのうえでは運営者がスプレッドシートを開けてしまいます。不具合の調査など必要なとき以外は開きません。
- 改善のために、どのコマンドがいつ使われたか、成功したか、処理に何秒かかったかを、サーバー ID と一緒に記録しています。誰が使ったかは、日ごとに変わる値に置き換えてから記録するので、運営者にもわかりません。この記録は 3 か月で自動で消えます。
- 連携をやめたいときは、
/resetを打つか、Google アカウントの設定から kintai-discord のアクセスを外してください。
詳しくはプライバシーポリシーと利用規約に書いています。裏側でどう動いているかは 仕組み にまとめました。
- コマンドが出てこない: bot に「スラッシュコマンドを使用」の権限があるか見てみてください。だめなら、一度サーバーから外して招待し直してみてください。
- 「管理者権限が必要です」と出る:
/initと/resetはサーバーの管理者しか使えません。 - 「サーバー設定が見つかりません」と出る: まだ
/initされていません。設定がおかしくなったときは、/resetしてから/initをやり直してください。 - Google の認証でエラーになる:
redirect_uri_mismatchなら Google Cloud Console のリダイレクト URI を、権限不足なら Google Sheets API が有効になっているかを見てみてください。 - 記録されない:
/configで設定と接続を確認して、スプレッドシートの共有設定も見てみてください。通信が悪いと自動でやり直すので、「処理中...」のあとは少し待ってみてください。ずっと返事がなければ、もう一度打ってみてください。 - 前は記録できていたのに、急にできなくなった: OAuth の公開ステータスが「テスト」になっているかもしれません。Google Cloud の「APIとサービス」>「認証情報」から OAuth 2.0 クライアント ID を開いて、「公開ステータス」を確認し、「アプリを公開」してください。それでもだめなら
/resetから設定し直してください。
解決しないときは、GitHub Issues かサポート用 Discord サーバーで気軽に聞いてください。
MIT です。詳しくは LICENSE をどうぞ。
シンプルさを優先して、次の機能は作らないことにしています。
- 削除コマンド(
/delete): 消したい記録はスプレッドシートで直接消してください - グラフ表示・ダッシュボード: スプレッドシートの機能で十分なので作りません