| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- require './app/models/carousels.rb'
- require './lib/emoji.rb'
- class JournalCarousel < Carousel
- def self.sections
- {
- Emoji::UNDO => 'back',
- Emoji::LEFT => 'left',
- Emoji::RIGHT => 'right',
- }
- end
- def self.update_embed(event, carousel)
- # Save reactions and determine section
- reactions = event.message.reactions
- direction = sections.filter{ |k,v| reactions[k]&.count.to_i > 1 }.values.first
- # Close if X is chosen
- return carousel.close(event) if reactions[Emoji::CROSS]&.count.to_i > 1
- case direction
- when 'back'
- # Fetch character
- character = Character.find(carousel.char_id)
- # Transition into a MemberCarousel
- event.message.delete_all_reactions
- CharacterCarousel.transition(event, carousel, character)
- when 'left', 'right'
- # Fetch the correspoding emoji, and remove non-bot reactions
- emoji = sections.key(direction)
- event.message.reacted_with(emoji).each do |r|
- event.message.delete_reaction(r.id, emoji) unless r.current_bot?
- end
- # Next Journal Page
- page = JournalController.journal_scroll(
- char_id: carousel.char_id,
- page: carousel.journal_page,
- dir: direction
- )
- # Update Carousel
- carousel.update(char_id: carousel.char_id, journal_page: page)
- # Update embed with new page
- BotResponse.new(
- carousel: carousel,
- embed: character_embed(
- character: Character.find(carousel.char_id),
- event: event,
- section: 'journal',
- journal: JournalController.fetch_page(carousel.char_id, page)
- )
- )
- end
- end
- def self.transition(event, carousel, character)
- # Fetch inital page of journals
- journals = JournalController.fetch_page(character.id, 1)
- # Update carousel to reflect new information
- carousel.update(
- char_id: character.id,
- image_id: nil,
- landmark_id: nil,
- options: nil,
- journal_page: 1
- )
- # Update Reply
- BotResponse.new(
- carousel: carousel,
- reactions: sections.map{ |k,v| k }.push(Emoji::CROSS),
- embed: character_embed(
- character: character,
- event: event,
- section: 'journal',
- journal: journals
- )
- )
- end
- end
|