浏览代码

allow archive flag on apps, fix nsfw char info & inactive teams

Kylie Jo Swistak 5 年之前
父节点
当前提交
81a059917b
共有 3 个文件被更改,包括 100 次插入47 次删除
  1. 9 3
      app/models/characters.rb
  2. 36 1
      app/responses/character.rb
  3. 55 43
      bot.rb

+ 9 - 3
app/models/characters.rb

@@ -60,7 +60,14 @@ class Character < ActiveRecord::Base
     }
 
     user_id = UID.match(app.description)
-    active = app.title == "Personal Character" ? 'Active' : 'NPC'
+    active = case app.title
+             when /Personal Character/
+               'Active'
+             when /NPC/
+               'NPC'
+             when /Archived Character/
+               'Archived'
+             end
 
     hash["user_id"] = case app.description
                       when /public/i
@@ -114,10 +121,9 @@ class Character < ActiveRecord::Base
     if user
       active_chars =
         Character.where(user_id: user_id[1]).where(active: "Active")
-      active_chars = active_chars.map(&:edit_url)
 
       new_active =
-        active == "Personal Character" && !active_chars.include?(edit_url)
+        active == "Personal Character" && !active_chars.map(&:edit_url).include?(edit_url)
 
       too_many = new_active ? active_chars.count >= allowed_chars : false
       approval_react(event) unless too_many

+ 36 - 1
app/responses/character.rb

@@ -26,7 +26,7 @@ def character_embed(char:, img: nil, user: nil, color:, section: nil, event: nil
   footer_text += " | #{navigate}" unless section.nil?
 
   status_effects = CharStatus.where(char_id: char.id)
-  char_teams = CharTeam.where(char_id: char.id)
+  char_teams = CharTeam.where(char_id: char.id, active: true)
 
   embed = Embed.new(
     footer: {
@@ -372,3 +372,38 @@ def image_list_embed(char, images, user, color)
     }
   )
 end
+
+def nsfw_char_embed(char:, user: nil, color:, event: nil)
+  icon = nil
+
+  user_name = case user
+              when /Public/i
+                'Adopt Me!'
+              when /Server/i
+                icon = event.server.icon_url if event
+                'Server Owned'
+              when nil
+                icon = UNKNOWN_USER_IMG
+                'Unknown User'
+              else
+                icon = user.avatar_url
+                "#{user.name}##{user.tag}"
+              end
+
+  footer_text = "#{user_name} | #{char.active}"
+  footer_text += " | #{char.rating}" if char.rating
+
+  embed = Embed.new(
+    footer: {
+      icon_url: icon,
+      text: footer_text
+    },
+    title: char.name,
+    color: color,
+    fields: [
+      { name: 'Wrong Channel!', value: "The requested information has contains NSFW content" }
+    ]
+  )
+
+  embed
+end

+ 55 - 43
bot.rb

@@ -360,9 +360,7 @@ app = Command.new(:app, desc, opts) do |event, name, status|
       msg.react(Emoji::CRAYON)
       msg.react(Emoji::CROSS)
 
-      #character.update!(active: active[0].capitalize)
-      #character.reload
-      #success_embed("Successfully updated #{name} to be #{active[0].downcase}")
+      success_embed("Successfully requested #{name} to be Reactivated!")
     elsif allowed && !active
       character.update!(active: 'Archived')
       character.reload
@@ -513,10 +511,6 @@ member = Command.new(:member, desc, opts) do |event, name, section, keyword|
     user_id = UID.match(name)
   when String
     chars = Character.where(name: name)
-    unless event.channel.nsfw?
-      chars = chars.reject { |c| c['rating'] == 'NSFW' }
-    end
-
     char = chars.first if chars.length == 1
 
     if char
@@ -564,10 +558,7 @@ member = Command.new(:member, desc, opts) do |event, name, section, keyword|
     option_react(msg, chars_id)
   when name && char && !section
     if char.rating == 'NSFW' && !event.channel.nsfw?
-      embed = error_embed(
-        "Wrong Channel!",
-        "The requested character is NSFW"
-      )
+      embed = nsfw_char_embed(char: char, user: user, color: color, event: event)
     else
       embed = character_embed(
         char: char,
@@ -577,12 +568,11 @@ member = Command.new(:member, desc, opts) do |event, name, section, keyword|
         color: color,
         event: event
       )
-
-      msg = event.send_embed("", embed)
-      Carousel.create(message_id: msg.id, char_id: char.id)
-
-      section_react(msg)
     end
+    msg = event.send_embed("", embed)
+    Carousel.create(message_id: msg.id, char_id: char.id)
+
+    section_react(msg)
   when char && section && keyword
     img = CharImage.where(char_id: char.id).find_by!(keyword: keyword)
 
@@ -622,10 +612,15 @@ member = Command.new(:member, desc, opts) do |event, name, section, keyword|
     )if section == :image
 
     if char.rating == 'NSFW' && !event.channel.nsfw?
-      embed = error_embed(
-        "Wrong Channel!",
-        "The requested character is NSFW"
+      embed = nsfw_char_embed(char: char, user: user, color: color, event: event)
+
+      msg = event.send_embed("", embed)
+      Carousel.create(
+        message_id: msg.id,
+        char_id: char.id,
       )
+
+      section_react(msg)
     elsif sections.detect{ |s| s == sect }
       embed = character_embed(
         char: char,
@@ -1523,6 +1518,7 @@ bot.reaction_add do |event|
     end
 
     char = Character.find(carousel.char_id)
+    color = CharacterController.type_color(char)
     user =
       case
       when char.user_id.match(/public/i)
@@ -1533,14 +1529,19 @@ bot.reaction_add do |event|
         nil
       end
 
-    embed = character_embed(
-      char: char,
-      img: CharImage.where(char_id: char.id).find_by(keyword: 'Default'),
-      user: user,
-      color: CharacterController.type_color(char),
-      section: :all,
-      event: event
-    )
+    embed = if char.rating == 'NSFW' && !event.channel.nsfw?
+              nsfw_char_embed(char: char, user: user, color: color, event: event)
+            else
+              character_embed(
+                char: char,
+                img: CharImage.where(char_id: char.id).find_by(keyword: 'Default'),
+                user: user,
+                color: color,
+                section: :bags,
+                event: event
+              )
+            end
+
     event.message.edit("", embed)
 
   when [:member, :bust]
@@ -1570,6 +1571,7 @@ bot.reaction_add do |event|
   when [:member, :back]
     event.message.delete_all_reactions
     char = Character.find(carousel.char_id)
+    color = CharacterController.type_color(char)
     user =
       case
       when char.user_id.match(/public/i)
@@ -1580,14 +1582,19 @@ bot.reaction_add do |event|
         nil
       end
 
-    embed = character_embed(
-      char: char,
-      img: CharImage.where(char_id: char.id).find_by(keyword: 'Default'),
-      user: user,
-      color: CharacterController.type_color(char),
-      section: :default,
-      event: event
-    )
+    embed = if char.rating == 'NSFW' && !event.channel.nsfw?
+              nsfw_char_embed(char: char, user: user, color: color, event: event)
+            else
+              character_embed(
+                char: char,
+                img: CharImage.where(char_id: char.id).find_by(keyword: 'Default'),
+                user: user,
+                color: color,
+                section: :bags,
+                event: event
+              )
+            end
+
     event.message.edit("", embed)
     section_react(event.message)
   when [:member, :left], [:member, :right]
@@ -1637,6 +1644,7 @@ bot.reaction_add do |event|
 
       char = Character.find(carousel.options[char_index])
       carousel.update(id: carousel.id, char_id: char.id)
+      color =  CharacterController.type_color(char)
       user =
         case
         when char.user_id.match(/public/i)
@@ -1647,15 +1655,19 @@ bot.reaction_add do |event|
           nil
         end
 
+    embed = if char.rating == 'NSFW' && !event.channel.nsfw?
+              nsfw_char_embed(char: char, user: user, color: color, event: event)
+            else
+              character_embed(
+                char: char,
+                img: CharImage.where(char_id: char.id).find_by(keyword: 'Default'),
+                user: user,
+                color: color,
+                section: :bags,
+                event: event
+              )
+            end
 
-      embed = character_embed(
-        char: char,
-        img: CharImage.where(char_id: char.id).find_by(keyword: 'Default'),
-        user: user,
-        color: CharacterController.type_color(char),
-        section: :default,
-        event: event
-      )
       event.message.edit("", embed)
       section_react(event.message)
     end