# LINEのチャットbotを作る5 ### <font color='red'>コード解説</font> --- 「LINEのチャットbotを作る4」の続きです. 終わりが見えてきた〜 ```python= > BadMain.py elif activity == "選手名": BadPush.changePlayer(UserID,text) BadPush.changeActivity(UserID,"補足") line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text='その他補足事項等があれば入力し送信して下さい. \n特になければ「なし」で送信して下さい. ') ] ) ``` ```python= > BadPush.py def changePlayer(UserID,PlayerName): cell = worksheet.find(UserID) worksheet.update_cell(cell.row, 6, PlayerName) ``` 変数activityの値が”選手名”に変わったので, elifの中に入っていきます. ![](https://i.imgur.com/dWOsSwN.png) ここで, 先ほど入力してもらった子供の名前が上の画像の名前の下の部分に書きこまれます. 書き込むのは関数changePlayerです. なんで毎回名前を聞くのか, ユーザーIDと一緒に管理すればいいじゃないか. まぁそれはそうなんですけどね, その通りだけど, 自分も何回も考えたよ. けど兄弟がいる子とか, 新しく兄弟が入った子, クラブを卒業した子などとにかく兄弟がいる子の管理が難しかったんですよね. 何かいい案あれば教えて下さい. まぁそんなことはよくて, 名前を入力してもらったら補足事項の入力をしてもらいます. ここは自由記述欄なので, 特に何も連絡がなければ, なしでいいけど, 複数日間休みますって連絡もあるかもなと思い準備してあります. ```python= > BadMain.py elif activity == "補足": BadPush.changeRemarks(UserID,text) BadPush.changeActivity(UserID,"最終状態") Status_text = BadPush.getStatus(UserID) Reason_text = BadPush.getReason(UserID) Player_text = BadPush.getPlayer(UserID) Remarks_text = BadPush.getRemarks(UserID) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=Player_text+"\n"+Status_text+":"+Reason_text+"\n"+Remarks_text), TextSendMessage(text="上記で登録します. よろしければ「はい」を, 訂正がある場合は「いいえ」を送信して下さい. ") ] ) to = ["通知飛ばしたい人のIDを書く(複数人に送りたかったら,でつなぐ)"] messages = TextSendMessage(text=Player_text+"\n"+Status_text+":"+Reason_text+"\n"+Remarks_text) line_bot_api.multicast(to, messages=messages) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text = '連絡を受け付けました. ありがとうございました. '), TextSendMessage(text='本日の練習をお休みする場合は「休み」, 遅れて参加の場合は「遅刻」と送信して下さい. ') ] ) elif (text == 'いいえ'): BadPush.changeActivity(UserID,"初期状態") line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text = 'お手数ですが初めからやり直して下さい. '), TextSendMessage(text='本日の練習をお休みする場合は「休み」, 遅れて参加の場合は「遅刻」と送信して下さい. ') ] ) else: Status_text = BadPush.getStatus(UserID) Reason_text = BadPush.getReason(UserID) Player_text = BadPush.getPlayer(UserID) Remarks_text = BadPush.getRemarks(UserID) line_bot_api.reply_message(event.reply_token, [ TextSendMessage(text=Player_text+"\n"+Status_text+":"+Reason_text+"\n"+Remarks_text), TextSendMessage(text="上記で登録します. よろしければ「はい」を, 訂正がある場合は「いいえ」を送信して下さい. ") ] ) ``` ```python= > BadPush.py def getStatus(UserID): cell = worksheet.find(UserID) ChildStatus = worksheet.cell(cell.row, 4).value return ChildStatus def getReason(UserID): cell = worksheet.find(UserID) Reason = worksheet.cell(cell.row, 5).value return Reason def getPlayer(UserID): cell = worksheet.find(UserID) PlayerName = worksheet.cell(cell.row, 6).value return PlayerName def getRemarks(UserID): cell = worksheet.find(UserID) Remarks = worksheet.cell(cell.row, 7).value return Remarks ``` 補足事項の入力が終わったら確認に入っていきます. 上の4つの関数によって, 今まで入力されてきた項目. それがどこに入力されているか?今まで意味がなかったように見えたspreadSheetの値だよ. ![](https://i.imgur.com/GWFMRTB.jpg) 日付も違えば理由も違うけど許して下さい. 保護者の方が入力を終えると, 上の画像のように入力してきたものがまとめられて表示され, これでいい?って聞きます. はい, と入力されたら, このまま監督のLINEに通知されます. これは監督の画面なので, 本当にこのまま通知されます. もし, いいえ, と入力されたら初めからやり直しになります. 特定の部分だけ訂正できるようにしないといけないなこれは. 監督へ通知飛ばしているのは, BadMain.pyの15行目〜18行目の部分になります. 通知したい人のユーザーIDをリスト化することで複数人に通知することもできますし, 一人だけでいいならリストでなく直接書き込めばいいです. たしかグループに通知することもできるから面白い使い方考えたいな. 監督への通知が完了したかどうかの判断は, 連絡を受け付けましたメッセージが届くかどうかです. 届いていれば正しく通知できています. まぁこの後も少し問題で, 通知後常に休みか遅刻かの質問待ちにリセットされた状態で待っているので, 必要な時にこいつ呼び出してなんの連絡?って聞けるように改善します. ### <font color='red'>最後に</font> --- だらだらとしたまとまりのない文章を, ここまで読んでいただきありがとうございました. 自分としては正直めちゃくちゃ疲れたし, こんなことやってられっかって, 4回は思いました. けど自分の進捗とか, その時思ったことは書いてないと忘れてしまうし, あーこんなところで詰まってたのか, カスかよ. ここいらんくない?ちゃんとコード書けよ. なんでこれにこんな時間かかってたんだろ, カス. とかとか. 色々な思い出が浮かんできました!辛い!学部3年でこんなことしてても遅すぎるだろって思いはするけど, バドミントンのコーチなんて, したくてもできない経験だし, 子供の成長を見守って指導するとか, 県内外に上下に歳の離れた人と新しく知り合いになれる. 自分が小中でお世話になった先生たちに今でも可愛がってもらえるとか. 人生においてなんの無駄にもならない, 貴重な時間だと思ってます. (ぜーーーんぶ完全無給だから, 時間どれだけ使ったとかは考えないようにしてる)けどお金をもらうこと以上に大事な経験できてるし, 今後のどこかしらでこれが生きてくるだろうって思ってます. 信じてます. 頼むよマジで. てな感じで, 「LINEのチャットbotを作る」シリーズ完結です. 早く次の記事書けるように進捗出します!!