Discordチャットに今日と明日分の開催イベント一覧を投稿する + 祝日非開催である定期イベントはDiscordに投稿しない#6565
Discordチャットに今日と明日分の開催イベント一覧を投稿する + 祝日非開催である定期イベントはDiscordに投稿しない#6565
Conversation
ef8d860 to
dd0d0b9
Compare
|
@OdenTakashi 二つ分のissueが混ざっており、動作確認も少し手間がかかってしまいますので、 |
|
@syo-tokeshi レビュー依頼いただいて申し訳ないのですが、体調を崩してしまっているため他の方にレビュー依頼をお願いしていただいてもよろしいでしょうか?🙇♂️ |
|
@OdenTakashi @ymmtd0x0b 二つ分のissueが混ざっており、動作確認も少し手間がかかってしまいますので、 |
|
@syo-tokeshi |
ありがとうございます🙇♂️ |
|
@ymmtd0x0b それまでしばらくレビューをお待ち頂けたら嬉しいです🙇♂️ |
|
@ymmtd0x0b ゆっくりで良いので、レビューよろしくお願い致します🙇♂️ |
fb549e1 to
78bf85b
Compare
ymmtd0x0b
left a comment
There was a problem hiding this comment.
お待たせしました🙏
動作確認OKでした!動的に変化する定形文章の構築は凄い難しそうですね...!
いくつかコメントさせて頂いているので、確認をお願いします🙇♂️
app/notifiers/discord_notifier.rb
Outdated
| event_info = "⚡️⚡️⚡️イベントのお知らせ⚡️⚡️⚡️\n\n" | ||
| event_info = add_event_info(today_events, '今日', today, event_info) | ||
| event_info += "------------------------------\n\n" if today_events.present? | ||
| event_info = add_event_info(tomorrow_events, '明日', tomorrow, event_info) | ||
| event_info += '⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️' |
There was a problem hiding this comment.
ココと add_event_infoメソッド にて evnet_info へ定形文を追加している部分は、文字列リテラルを利用した方が保守しやすそうかなと思いましたが、いかがでしょうか?🙋♂️
add_event_infoメソッド で返された文字列を埋め込むカタチにすると event_info を渡す必要も無くなりそうです🙌 ( その場合、後置if でメソッドの実行判定を行うかメソッドの最初でイベントが無い場合は return する処理が必要になると思います )
event_info = <<~TEXT.gsub(/^\n+/, "\n").chomp
⚡️⚡️⚡️イベントのお知らせ⚡️⚡️⚡️
#{add_event_info(today_events, '今日', today)}
#{"------------------------------" if today_events.present?}
#{add_event_info(tomorrow_events, '明日', tomorrow)}
⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️⚡️
TEXTThere was a problem hiding this comment.
実際に試した結果、正しくその通りだと思いました🙇♂️(劇的に読みやすくなったし引数も減ってgood過ぎました!)
採用させて頂きます🙇♂️
そして勉強になりました!!😊
[追記]
<<~TEXT.gsub(/^\n+/, "\n").chompこちら、何を参考に学んだ感じでしょうか?
上手いですね😊
There was a problem hiding this comment.
[追記]
<<~TEXT.gsub(/^\n+/, "\n").chompこちら、何を参考に学んだ感じでしょうか?
上手いですね😊
ありがとうございます🙌
変更前のコードで <<~TEXT.chomp と記述されていたので、通常の文字列と同様に処理できそうだなと思って試してみたら上手く言った感じです!
There was a problem hiding this comment.
なるほどです!
そう思って解決されたのですね😊
参考になりました!🙇♂️
app/notifiers/discord_notifier.rb
Outdated
| def add_event_info(events, date_message, date, event_info) | ||
| day_of_the_week = %w[日 月 火 水 木 金 土] | ||
| event_info += "< #{date_message} (#{date.strftime('%m/%d')} #{day_of_the_week[date.wday]} 開催 >\n\n" if events.present? | ||
| held_events, not_held_events = separate_events(events, date) |
There was a problem hiding this comment.
開催イベントとお休みイベントの抽出処理は partitionメソッド を利用するとスッキリ記述できそうかなと思いました!
held_events, not_held_events =
events.partition { |event| event.hold_national_holiday || !HolidayJp.holiday?(date) }There was a problem hiding this comment.
スッキリして最高でした!😊
便利なメソッドを知らず、無駄な処理書いて複雑にしていましたね、、😭
1件ですが、「祝日には開催しないイベント」の判定ですが、
山本さんのコードの方が素直で読みやすいと思うのですが、
&&演算子を使ったほうが、
- 開催されるイベント
- 開催されないイベント
の条件が明確で良い気がします🙇♂️
not_held_events, held_events = events.partition { |event| !event.hold_national_holiday && HolidayJp.holiday?(date) }特定の条件が揃った時のみイベントは開催されないので、こっちの方が良いと思いました🙇♂️
ただ、私の方がベターでない可能性もあるので、駒形さんに判断を委ねたいと思いました、、(山本さんの方がコードが素直で読みやすいからです)
&&の方が条件が限定的になるので、予期せぬ不具合が起きにくくなって良いと思うんだけど、どうなんだろう?
1
held_events, not_held_events = events.partition { |event| event.hold_national_holiday || !HolidayJp.holiday?(date) }2
not_held_events, held_events = events.partition { |event| !event.hold_national_holiday && HolidayJp.holiday?(date) }こちら、どちらを採用した方が良さそうでしょうか?
There was a problem hiding this comment.
@syo-tokeshi
駒形さんへの確認ありがとうございます!
判定式の内容的には同じはずなので、私としては syo-tokeshiさんの好みの方を採用して頂いて問題ないように思ってます〜
There was a problem hiding this comment.
@syo-tokeshi どちらでもいいかなと思います。
ただ1行が長いので改行するなに何かした方がいいと思います〜
There was a problem hiding this comment.
@komagata
こちらで対応しました🙇♂️
コンフリクトの修正 + 一部処理を複数行に分ける
not_held_events, held_events = events.partition do |event|
!event.hold_national_holiday && HolidayJp.holiday?(date)
end| regular_event_repeat_rule35: | ||
| frequency: 0 | ||
| day_of_the_week: 6 | ||
| regular_event: regular_event30 No newline at end of file |
There was a problem hiding this comment.
失礼しました🙇♂️
ご指摘ありがとうございます🙇♂️
| travel_to Time.zone.local(2023, 5, 5, 6, 0, 0) do | ||
| assert_notifications_enqueued 2, **expected do | ||
| DiscordNotifier.with(params).coming_soon_regular_events.notify_later | ||
| DiscordNotifier.coming_soon_regular_events(params).notify_later |
There was a problem hiding this comment.
実際に利用されているのが notify_now だけでしたら、この部分は不要そうとも思ったのですがいかがでしょうか🤔?
bootcamp/app/models/notification_facade.rb
Lines 40 to 42 in 78bf85b
There was a problem hiding this comment.
確認いたしました🙇♂️
確かに、かなりごもっともですね、、
1点気になることがございまして、
test/notifiers/discord_notifier_test.rb
こちらの他のテストコードもnotify_now しか使ってないけど、
- 同期
- 非同期
両方テストを行なっているので、無意味な気がしますがそのまま前例に倣っても良い気がしました、、 (が、消すべきかな?やっぱり)
例えばこちらの、invalid_userというメソッドも、notify_nowしか使っていない
駒形さんに聞いてみます🙇♂️
@komagata
こちら、使ってない非同期のテスト(notify_laterを使ったテスト)は削除した方がよろしいでしょうか?
There was a problem hiding this comment.
@syo-tokeshi
すみません!変更前のコードは notify_now だけだったので、てっきり利用する方だけをテストすれば良いのかなと思っていました🙏
確かに他の箇所では使用の有無に関わらず両方テストされていますね...!ですので、両方記載した方が良さそうですね!
There was a problem hiding this comment.
@syo-tokeshi AbstructNotrifierは同期・非同期に対応しているものと作るライブラリなので使う人は両方が対応されていることを想定しています。ですので両方のテストが欲しいです。
There was a problem hiding this comment.
| travel_to Time.zone.local(2023, 5, 5, 6, 0, 0) do | ||
| visit_with_auth '/scheduler/daily/notify_coming_soon_regular_events', 'komagata' |
There was a problem hiding this comment.
スケジューラへのリクエストは非ログインでもOKに変更されたようなので、予想外のテストエラーを予防する意味で仕様と合わせた方が良さそうに思いました!
There was a problem hiding this comment.
情報ありがとうございます!!🙇♂️
確認し、修正致しました😄
app/notifiers/discord_notifier.rb
Outdated
| today_events = params[:today_events] || RegularEvent.today_events | ||
| tomorrow_events = params[:tomorrow_events] || RegularEvent.tomorrow_events |
There was a problem hiding this comment.
変更前のコードもパラメータからの代入のみとなっているので、OR演算子以降の部分は削除しても支障はなさそうですが、いかがでしょうか? ( もし、開催するイベントが無い場合はコントローラー側と同じ処理を実行する事になりそう...? )
bootcamp/app/notifiers/discord_notifier.rb
Lines 42 to 44 in 0ac049e
There was a problem hiding this comment.
その通りでした、、
コントローラーから処理がスタートして、
eventのパラメーターを渡しているので、OR演算子以降はいらないですね、、🙇♂️
ご指摘ありがとうございます🙇♂️
|
@ymmtd0x0b |
|
@machida こちらでよろしいでしょうか? 変更点
|
|
@syo-tokeshi 確認しましたー👍 |
7f8c540 to
63e08a0
Compare
|
@komagata |
| travel_to Time.zone.local(2022, 7, 30, 0, 0, 0) do | ||
| visit_with_auth '/scheduler/daily/notify_tomorrow_regular_event', 'komagata' | ||
| travel_to Time.zone.local(2023, 5, 5, 6, 0, 0) do | ||
| visit '/scheduler/daily/notify_coming_soon_regular_events' |
|
@komagata こちらの通知が本番で飛んでないそうです。確認をお願いします。 @syo-tokeshi 足りない情報がありましたらこちらに追記お願いします。 |
|
@machida かしこまりました。 @syo-tokeshi 僕のミスで本番で該当URLが毎日アクセスされる設定がされておりませんでした。先ほど設定して実行したので再度確認いただければありがたいです。 |
|
@komagata ご対応ありがとうございました🙇♂️ |



Issue
チャットに投稿される明日開催のイベント一覧の表示を変えたい。 #6457
祝日非開催である定期イベント開催のお知らせがDiscordに通知されている #6486
概要
Discordチャットに投稿される、開催イベント一覧の表示方法を変更 + 仕様変更を行いました。
変更により、以下の仕様になります。
変更確認方法
feature/change_event_notification_to_discordをローカルに取り込む※過去にDiscord通知サーバーの作成方法を書いた資料があったので、リンクを載せます
「サーバーを追加」を押す

「オリジナルの作成」を押す

名前を付けて新規作成を押したら「自分専用のDiscordサーバーの作成」が完了

こちらの写真のように、「チャネルの編集ボタン」を押す(歯車マーク)

「連携サービス」から「ウェブックの作成」を押す

「URLをコピー」を押せば、「Webhook URL」の取得は完了です

[完成形]

bootcamp/app/notifiers/discord_notifier.rb
Line 58 in addcd1b
webhook_urlのバリューを、自分で取得した「Webhook URL」にする↓
「自分専用のDiscordサーバー」に通知が届く
Screenshot
変更前
[明日の分のみ、このように投稿されていた]

[祝日非開催のイベントも投稿されていた]

変更後
このように、「今日 + 明日」開催のイベントが投稿されるようになった(祝日非開催のイベントは注意書き(⚠️ )をして、開催されないのが分かるようにした)
