[v1.0.0-alpha] 研究室用スラックボット - Slack Bot for Laboratory
- 研究室用のSlackワークスペースを利用している方に便利なSlackボットです.
- 私が所属する大学研究室のSlackワークスペースで以前から実際に稼働していたボットがベースです.
- パブリックなリポジトリは初めてなので,READMEに何を書くか,ディレクトリ構成をどのようにすれば良いか,といった作法的なことがあまりよくわかってません.気になる点がありましたらご指摘いただけると幸いです.
- プルリク大歓迎です.また追加希望等ございましたら,適宜イシューを立てて貰えればと思います.
Table of Contents
開発環境で,以下では動作確認済みという意味です.特別なことはしてないので3系であれば動くかと思います.
- Python 3.8.2
- requirements_dev.txt
- まずはお好きな3系バージョンでrequirements.txtのライブラリを入れてみてください(使い方参照).
.
├── LICENSE ライセンス
├── README.md 今閲覧しているファイル
├── config 設定関連(詳細は以下設定等参照)
│ ├── __init__.py 設定処理スクリプト
│ ├── _config.yml Bot設定
│ ├── _gcalendar.gs Googleカレンダープラグイン用スクリプト
│ ├── _member.yml 研究室メンバー設定
│ ├── setting.py 設定読み書きスクリプト
│ └── [ignore] job.txt Crontabファイル(自動生成)
├── requirements.txt 必須Pythonパッケージ
├── requirements_dev.txt 必須Pythonパッケージ(開発環境)
├── guide Bot初期設定ガイド
│ ├── images 説明用画像
│ └── README.md Bot初期設定説明
├── plugins Botプラグイン
│ ├── __init__.py パッケージ用
│ ├── gcalendar.py プラグイン:Googleカレンダー
│ ├── group.py プラグイン:グループ分け
│ ├── order.py プラグイン:順番シャッフル
│ ├── listen.py コマンド受け取り
│ └── post.py メッセージ投稿
├── run.py Bot起動スクリプト
├── slackbot_settings.py slackbot設定ファイル(編集不要)
├── .devcontainer.json VSCode Remote Container用(開発環境)
└── Dockerfile 開発環境
-
本リポジトリをクローンする
- 研究室用のサーバーなど,常時稼働できる環境をオススメします.システムへの負担はほとんどないと思います.
- SSHの場合(鍵設定を別途行ってください)
git clone --depth 1 git@github.com:n-yU/labot.git
- HTTPSの場合
git clone --depth 1 https://github.com/n-yU/labot.git
--depth 1
はshallow cloneで,リポジトリの最新版のみ取得するオプションです- もしくはコチラからzipやtar.gzファイルをダウンロードしてください
-
Pythonインストール&以下コマンド実行
- Pythonのインストール方法は省略します.dockerやvenv等使って用意してください.
3.8.2
で動作確認済みですが,多少バージョンが違っても多分動きます.pip install -r requirements.txt
-
初期設定する
- 詳細はguide.mdを確認してください
- 一部項目は最初に必ず設定しないとBotが全く動作しません
-
起動する
- 通常
python3 run.py
- サーバーにSSHで接続してBotを常時稼働させたい場合
nohup python3 run.py &
- 終了時は
ctrl+c
やkill
コマンドなど使ってください config.yml
の設定は再起動の必要なくすぐに反映されます.ただし,APIトークンやGoogleカレンダープラグインのスケジュール設定など,Bot起動時に必要な設定を変更した場合は再起動が必要です.
- 通常
初期設定についてはguide.mdをご確認ください.
Bot設定 - config.yml
token: x***-********-********-****************
name: bot
icon: https://****.**/***/***.png
order:
text: DEFAULT
group:
text: DEFAULT
gcalendar:
gas: https://script.google.com/macros/s/******/exec
channel: calendar
time: mon9
colors: [f8e352, d5848b, 7b9ad0, 51a1a2, ae8dbc, c08e47, e5ab47]
text: お疲れ様です!今週も頑張っていきましょう!
token
- Slack API トークン(guide.md参照)name
- Botの名前.Botからメッセージが返される際に適用されます.icon
- Botのアイコン画像ファイル直リンク.Botからメッセージが返される際に適用されます.order
- "プラグイン:順番シャッフル"に関連する設定text
- シャッフル順番結果メッセージ投稿時の冒頭テキスト
group
- "プラグイン:グループ分け"に関連する設定text
- グループ分け結果メッセージ投稿時の冒頭テキスト
gcalendar
- "プラグイン:Googleカレンダー"に関連する設定-
gas
- GASウェブアプリURL(guide.md参照) -
channel
- ウィークイベント投稿チャンネル名 -
time
- ウィークイベント投稿曜日&時間(ex.mon9
(月曜9時)) -
colors
- 投稿メッセージに使用する曜日カラー.16進数カラーコードで指定する(シャープ不要).デフォルトカラーは以下の通り. -
text
- ウィークイベント投稿時の冒頭テキスト
-
コマンドでの読設定の読み書きはできません.config.yml
を参照・編集してください.
- labotのバージョンを確認する
!version
研究室メンバー設定 - member.yml
FamilyName:
name: LastName
class: [student, teacher, B3, B4, M1, M2]
Family Name
- メンバー姓.順番シャッフルやグループ分けの結果を表示する際に使用されます.キャピタライズしてください.name
- メンバー名class
- メンバーが所属するクラス.
- 順番シャッフルやグループ分け時にクラスを指定することで,限定したメンバー集合に対する操作が可能です.- カンマ区切りで1メンバーに対して複数のクラスを設定できます.
- 学生には必ず
student
クラスを割り当ててください.順番シャッフル時にクラスを指定しない場合,自動的にstudent
クラスに所属するメンバー集合が対象になります(進捗報告ゼミを想定した機能です). all
というクラス名は与えないでください.
- 全メンバーの情報を取得する
!config get member
- 指定メンバーの情報を取得する
!config get member [FamilyName]
FamilyName
- メンバー姓FamilyName
はキャピタライズされるため,大文字小文字が混在してても正常に動作します.
- 全メンバークラスを取得する
!config get class
- 指定メンバークラスを取得する
!config get class [class]
class
- メンバークラス名
- 指定メンバーの情報を編集する
!config edit [FamilyName] [info] [value]
FamilyName
- メンバー姓info
- 情報名value
-info
の新しい値- 例1: メンバー
Sato
のname
をIchiro
にする!config edit Sato name Ichiro
- 例2: メンバー
Tanaka
のclass
をstudent,M1
にする!config edit Tanaka class student,M1
- このBotには現在以下のプラグイン(機能)が用意されてます.
- コマンド入力時は頭に
!
を必ずつけてください(/
ではありません)
order - 順番シャッフル
member.yml
で設定済みのメンバーに対し,指定クラスに所属するメンバーの順番をシャッフルして投稿します.- 進捗報告ゼミでの発表順や懇親会での話題提供などの順番を決める際に使えます.
- コマンド
!shuffle [class]
class
: メンバークラス名
- 例1:
student
クラスに所属するメンバー(学生)の順番をシャッフルする!shuffle
- 例2:
!shuffle [class]
の場合,class
に所属するメンバーがシャッフル対象になる.!shuffle M1
- 例3: クラス名を
all
にすると,member.yml
に登録されている全メンバーが対象になる.!shuffle all
group - グループ分け
member.yml
で設定済みのメンバーに対し,指定クラスに所属するメンバーをグループ分けして投稿します.- ZoomのBORの割り当てを決めたいときなどに使えます(全員ではなくクラスごとに).
- グループ間のメンバー数差が最小になるように分けられます.
- グループ分けの基準として,グループ数や1グループメンバー数が指定できます.
- コマンド
!group [standard][value] [class]
standard
: グループ分け基準(n
:グループ数 /s
:1グループメンバー数)value
: グループ分け基準の設定値class
: メンバークラス名(all
にすると全メンバーが対象)
- 例1:
student
クラスに所属するメンバー(学生)を3つのグループに分ける.!group n3 student
- 例2:
M1
クラスに所属するメンバーを対象に2人のグループ(ペア)を作る.!group s2 M1
gcalendar - Googleカレンダー
- GASで登録したGoogleカレンダーから取得日を含む1週間分のイベント(ウィークイベント)を取得し,投稿します.
- Googleカレンダー登録の詳細はguide.mdを確認してください.
- ウィークイベントは
config.yml
で指定した曜日&時間に自動的に毎週投稿されます. - 定期実行だけでなく,以下コマンドでウィークイベントを確認することもできます.
- コマンド
!gcal
- コマンド実行日を含む1週間先までの予定をGoogleカレンダーから取得する.!gcal schedule
- Googleカレンダーからイベントを自動的に取得する曜日と時間を取得する.
- 本リポジトリについて質問等ありましたら,Twitterへのリプライが最も反応が早いです(DMはご遠慮ください).
- イシューを立てて頂いても結構です.