member.rb 2.5 KB

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