app_form.rb 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. deny(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. elsif reactions[Emoji::CABINET]&.count.to_i > 0
  26. to_office(event, ENV['R0RY_CH'])
  27. elsif reactions[Emoji::COW]&.count.to_i > 0
  28. to_office(event, ENV['R0RY_CH'])
  29. elsif reactions[Emoji::CAT]&.count.to_i > 0
  30. to_office(event, ENV['R0RY_CH'])
  31. end
  32. end
  33. def self.approve
  34. raise 'NYI'
  35. end
  36. def self.deny
  37. raise 'NYI'
  38. end
  39. def self.majority(event)
  40. # The total number of voters, divided by 2, +1
  41. (event.server.roles.find{ |r| r.id == ENV['ADMINS'].to_i }.members.count / 2) + 1
  42. end
  43. def self.star(event)
  44. stars = event.message.reacted_with(Emoji::STAR)
  45. stars.each do |star|
  46. member = event.server.member(star.id)
  47. return true if Util::Roles.admin?(member)
  48. end
  49. return false
  50. end
  51. def self.remove(event)
  52. crosses = event.message.reacted_with(Emoji::CROSS)
  53. crosses.each do |cross|
  54. member = event.server.member(cross.id)
  55. event.message&.delete unless member.current_bot?
  56. end
  57. end
  58. def self.to_office(event, office)
  59. app = Embed.convert(event.message.embeds.first)
  60. BotResponse.new(destination: office, embed: app)
  61. end
  62. end