| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- class CharacterCarousel < Carousel
- def self.sections
- {
- Emoji::EYES => 'all',
- Emoji::PICTURE => 'image',
- Emoji::NOTEBOOK => 'journal',
- Emoji::BAGS => 'bags',
- Emoji::FAMILY => 'family',
- Emoji::SPY => 'forms',
- Emoji::BUST => 'user'
- }
- end
- def self.update_embed(event, carousel)
- # Save reactions and determine section
- reactions = event.message.reactions
- section = 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 section
- when 'image'
- # Transition into an ImageCarousel
- event.message.delete_all_reactions
- ImageCarousel.transition(event, carousel, Character.find(carousel.char_id))
- when 'journal'
- # Transition into an JournalCarousel
- event.message.delete_all_reactions
- JournalCarousel.transition(event, carousel, Character.find(carousel.char_id))
- when 'user'
- # Find User
- character = Character.find(carousel.char_id)
- user = User.find(character.user_id)
- # Transition into a UserCarousel
- event.message.delete_all_reactions
- UserCarousel.transition_user(event, carousel, user)
- when 'forms'
- # Find User
- character = Character.find(carousel.char_id)
- base_char = character.alt_form ? Character.find(character.alt_form) : character
- # Transition into a UserCarousel
- event.message.delete_all_reactions
- UserCarousel.transition_character(event, carousel, base_char)
- when 'all', 'bags', 'family'
- # Fetch the corresponding emoji, and remove non-bot reactions
- emoji = sections.key(section)
- event.message.reacted_with(emoji).each do |r|
- event.message.delete_reaction(r.id, emoji) unless r.current_bot?
- end
- # Update character embed with new section
- BotResponse.new(
- carousel: carousel,
- embed: character_embed(
- character: Character.find(carousel.char_id),
- event: event,
- section: section
- )
- )
- end
- end
- def self.transition(event, carousel, character)
- # Update carousel to reflect new information
- carousel.update(
- char_id: character.id,
- image_id: nil,
- landmark_id: nil,
- options: nil,
- journal_page: nil
- )
- # Update reply
- BotResponse.new(
- carousel: carousel,
- reactions: sections.map{ |k,v| k }.push(Emoji::CROSS),
- embed: character_embed(
- character: character,
- event: event
- )
- )
- end
- end
|