journal.rb 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. require './app/models/carousels.rb'
  2. require './lib/emoji.rb'
  3. class JournalCarousel < Carousel
  4. def self.sections
  5. {
  6. Emoji::UNDO => 'back',
  7. Emoji::LEFT => 'left',
  8. Emoji::RIGHT => 'right',
  9. }
  10. end
  11. def self.update_embed(event, carousel)
  12. # Save reactions and determine section
  13. reactions = event.message.reactions
  14. direction = sections.filter{ |k,v| reactions[k]&.count.to_i > 1 }.values.first
  15. # Close if X is chosen
  16. return carousel.close(event) if reactions[Emoji::CROSS]&.count.to_i > 1
  17. case direction
  18. when 'back'
  19. # Fetch character
  20. character = Character.find(carousel.char_id)
  21. # Transition into a MemberCarousel
  22. event.message.delete_all_reactions
  23. CharacterCarousel.transition(event, carousel, character)
  24. when 'left', 'right'
  25. # Fetch the correspoding emoji, and remove non-bot reactions
  26. emoji = sections.key(direction)
  27. event.message.reacted_with(emoji).each do |r|
  28. event.message.delete_reaction(r.id, emoji) unless r.current_bot?
  29. end
  30. # Next Journal Page
  31. page = JournalController.journal_scroll(
  32. char_id: carousel.char_id,
  33. page: carousel.journal_page,
  34. dir: direction
  35. )
  36. # Update Carousel
  37. carousel.update(char_id: carousel.char_id, journal_page: page)
  38. # Update embed with new page
  39. BotResponse.new(
  40. carousel: carousel,
  41. embed: character_embed(
  42. character: Character.find(carousel.char_id),
  43. event: event,
  44. section: 'journal',
  45. journal: JournalController.fetch_page(carousel.char_id, page)
  46. )
  47. )
  48. end
  49. end
  50. def self.transition(event, carousel, character)
  51. # Fetch inital page of journals
  52. journals = JournalController.fetch_page(character.id, 1)
  53. # Update carousel to reflect new information
  54. carousel.update(
  55. char_id: character.id,
  56. image_id: nil,
  57. landmark_id: nil,
  58. options: nil,
  59. journal_page: 1
  60. )
  61. # Update Reply
  62. BotResponse.new(
  63. carousel: carousel,
  64. reactions: sections.map{ |k,v| k }.push(Emoji::CROSS),
  65. embed: character_embed(
  66. character: character,
  67. event: event,
  68. section: 'journal',
  69. journal: journals
  70. )
  71. )
  72. end
  73. end