member.rb 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. class CharacterCarousel < Carousel
  2. def self.sections
  3. {
  4. Emoji::EYES => 'all',
  5. Emoji::PICTURE => 'image',
  6. Emoji::NOTEBOOK => 'journal',
  7. Emoji::BAGS => 'bags',
  8. Emoji::FAMILY => 'family',
  9. Emoji::BUST => 'user'
  10. }
  11. end
  12. def self.update_embed(event, carousel)
  13. # Save reactions and determine section
  14. reactions = event.message.reactions
  15. section = sections.filter{ |k,v| reactions[k]&.count.to_i > 1 }.values.first
  16. # Close if X is chosen
  17. return carousel.close(event) if reactions[Emoji::CROSS]&.count.to_i > 1
  18. case section
  19. when 'image'
  20. # Transition into an ImageCarousel
  21. event.message.delete_all_reactions
  22. ImageCarousel.transition(event, carousel, Character.find(carousel.char_id))
  23. when 'journal'
  24. # Transition into an JournalCarousel
  25. event.message.delete_all_reactions
  26. JournalCarousel.transition(event, carousel, Character.find(carousel.char_id))
  27. when 'user'
  28. # Find User
  29. character = Character.find(carousel.char_id)
  30. user = User.find(character.user_id)
  31. # Transition into a UserCarousel
  32. event.message.delete_all_reactions
  33. UserCarousel.transition(event, carousel, user)
  34. when 'all', 'bags', 'family'
  35. # Fetch the corresponding emoji, and remove non-bot reactions
  36. emoji = sections.key(section)
  37. event.message.reacted_with(emoji).each do |r|
  38. event.message.delete_reaction(r.id, emoji) unless r.current_bot?
  39. end
  40. # Update character embed with new section
  41. BotResponse.new(
  42. carousel: carousel,
  43. embed: character_embed(
  44. character: Character.find(carousel.char_id),
  45. event: event,
  46. section: section
  47. )
  48. )
  49. end
  50. end
  51. def self.transition(event, carousel, character)
  52. # Update carousel to reflect new information
  53. carousel.update(
  54. char_id: character.id,
  55. image_id: nil,
  56. landmark_id: nil,
  57. options: nil,
  58. journal_page: nil
  59. )
  60. # Update reply
  61. BotResponse.new(
  62. carousel: carousel,
  63. reactions: sections.map{ |k,v| k }.push(Emoji::CROSS),
  64. embed: character_embed(
  65. character: character,
  66. event: event
  67. )
  68. )
  69. end
  70. end