app_form.rb 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. class ApplicationForm
  2. def self.name
  3. process.name
  4. end
  5. def self.call(event)
  6. process.call(event)
  7. end
  8. def self.process
  9. raise 'NYI'
  10. end
  11. def self.check_votes(event, maj)
  12. reactions = event.message.reactions
  13. if reactions[Emoji::Y]&.count.to_i > maj && star(event)
  14. approve(event)
  15. elsif reactions[Emoji::N]&.count.to_i > maj
  16. reject(event)
  17. elsif reactions[Emoji::CRAYON]&.count.to_i > 1
  18. edit(event)
  19. elsif reactions[Emoji::CROSS]&.count.to_i > 1
  20. remove(event)
  21. elsif reactions[Emoji::GHOST]&.count.to_i > 0
  22. to_office(event, ENV['MIZU_CH'])
  23. elsif reactions[Emoji::FISH]&.count.to_i > 0
  24. to_office(event, ENV['NEIRO_CH'])
  25. end
  26. end
  27. def self.approve
  28. raise 'NYI'
  29. end
  30. def self.deny
  31. raise 'NYI'
  32. end
  33. def self.majority(event)
  34. # The total number of voters, divided by 2, +1
  35. (event.server.roles.find{ |r| r.id == ENV['ADMINS'].to_i }.members.count / 2) + 1
  36. end
  37. def self.star(event)
  38. stars = event.message.reacted_with(Emoji::STAR)
  39. stars.each do |star|
  40. member = event.server.member(star.id)
  41. return true if Util::Roles.admin?(member)
  42. end
  43. return false
  44. end
  45. def self.remove(event)
  46. crosses = event.message.reacted_with(Emoji::CROSS)
  47. crosses.each do |cross|
  48. member = event.server.member(cross.id)
  49. event.message&.delete unless member.current_bot?
  50. end
  51. end
  52. def self.to_office(event, office)
  53. app = Embed.convert(event.message.embeds.first)
  54. BotResponse.new(destination: office, embed: app)
  55. end
  56. end