characters.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. class Character < ActiveRecord::Base
  2. validates :user_id, presence: true
  3. validates :name, presence: true
  4. validates :species, presence: true
  5. validates :types, presence: true
  6. def self.from_form(params)
  7. key_mapping = {
  8. "_New Character Application_" => "active",
  9. "Submitted by" => "user_id",
  10. " >>> **Characters Name**" => "name",
  11. "**Species**" => "species",
  12. "**Type**" => "types",
  13. "**Age**" => "age",
  14. "**Weight**" => "weight",
  15. "**Height**" => "height",
  16. "**Gender**" => "gender",
  17. "**Sexual Orientation**" => "orientation",
  18. "**Relationship Status**" => "relationship",
  19. "**Attacks**" => "attacks",
  20. "**Likes**" => "likes",
  21. "**Dislikes**" => "dislikes",
  22. "**Personality**" => "personality",
  23. "**Hometown**" => "hometown",
  24. "**Warnings**" => "warnings",
  25. "**Rumors**" => "rumors",
  26. "**Backstory**" => "backstory",
  27. "**Other**" => "other",
  28. "**Rating**" => "rating",
  29. "**Current Location**" => "location",
  30. "**DM Notes**" => "dm_notes",
  31. "Edit Key (ignore)" => "edit_url",
  32. }
  33. hash = {
  34. "user_id" => nil,
  35. "name" => nil,
  36. "species" => nil,
  37. "types" => nil,
  38. "age" => nil,
  39. "weight" => nil,
  40. "height" => nil,
  41. "gender" => nil,
  42. "orientation" => nil,
  43. "relationship" => nil,
  44. "attacks" => nil,
  45. "likes" => nil,
  46. "dislikes" => nil,
  47. "personality" => nil,
  48. "backstory" => nil,
  49. "other" => nil,
  50. "edit_url" => nil,
  51. "active" => nil,
  52. "dm_notes" => nil,
  53. "location" => nil,
  54. "rumors" => nil,
  55. "hometown" => nil,
  56. "warnings" => nil,
  57. "rating" => nil
  58. }
  59. params.map do |item|
  60. next if item.empty?
  61. key,value = item.split(": ")
  62. db_column = key_mapping[key]
  63. if db_column == "active" && value == "Personal Character"
  64. hash[db_column] = "Active"
  65. elsif v = value.match(/<@([0-9]+)>/)
  66. hash[db_column] = v[1]
  67. else
  68. hash[db_column] = value
  69. end
  70. end
  71. hash = hash.reject { |k,v| k == nil }
  72. hash
  73. end
  74. def self.check_user(event)
  75. content = event.message.content
  76. edit_url = Regex::EDIT_URL.match(content)
  77. active = Regex::CHAR_APP.match(content)
  78. user_id = Regex::UID.match(content)
  79. user = User.find_by(id: user_id[1])
  80. if user
  81. member = event.server.member(user_id[1])
  82. calc_max = (user.level / 10 + 1)
  83. allowed_characters = calc_max > 6 ? 6 : calc_max
  84. active_characters = Character.where(user_id: user_id[1]).where(active: "Active").count
  85. new_active = active[1] == "Personal Character" && Character.where(active: 'NPC').find_by(edit_url: edit_url[1])
  86. too_many = new_active ? active_characters < allowed_characters : false
  87. end
  88. if member
  89. too_many(event, member, edit_url, 'characters') if too_many
  90. approval_react(event) unless too_many
  91. else
  92. unknown_member(event)
  93. end
  94. end
  95. end