| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- NO_GOLD = 'https://cdn.discordapp.com/attachments/645493256821669888/683732758199140387/fcece3957f27d25f9c7aee13a89b7e7c.png'
- def landmark_embed(lm:, section: nil, event: nil)
- # Find the author, if they're a member
- author = event.server.member(lm.user_id)
- fields = []
- embed = Embed.new(
- title: lm.name,
- description: lm.description
- )
- # Add default image and footer
- embed.thumbnail = { url: lm.url }
- author_footer(embed, author, [lm.category, lm.id])
- # Fill out the fields based on section
- case section
- when /history/i, nil
- # Parent Landmark
- fields.push(
- { name: 'Location', value: Landmark.find(lm.location).name, inline: true }
- ) if lm.location
- # Region
- fields.push(
- {name: 'Region', value: Region.find(lm.region).name, inline: true}
- )
- # History and Folklore
- fields.push({name: 'History', value: lm.history}) if lm.history
- fields.push({name: 'Folklore', value: lm.folk_lore}) if lm.folk_lore
- when /warning/i
- # Ensure we aren't looking for NSFW material in a SFW channel
- hide = !event.channel.nsfw? && lm.w_rating == 'NSFW'
- # List Kinks, Show warning, or hide if needed
- fields.push({name: 'Kinks', value: lm.kink.join("\n")}) if lm.kink
- fields.push(
- {name: 'Warning', value: hide ? 'This warning is NSFW!' : lm.warning}
- ) if lm.warning
- # Display appropriate image
- embed.thumbnail = { url: hide ? NO_GOLD : lm.w_url }
- when /map/i
- # Display map, if it exists
- lm.map_url ?
- embed.image = { url: lm.map_url } : embed.description = 'No Map Data'
- # Remove default image
- embed.thumbnail = nil
- when /layout/i
- # Display layout map, if it exists
- lm.layout_url ?
- embed.image = { url: lm.layout_url } : embed.description = 'No Layout Data'
- # Remove default image
- embed.thumbnail = nil
- when /npcs?/i
- # Find NPCs in the landmark, case insensitive
- npcs = Character.where('location ilike ?', lm.name)
- .map{ |npc| "#{npc.name} - #{npc.species}" }
- # List NPCs that currently reside in this landmark
- fields.push({
- name: 'NPC Residents',
- value: npcs.empty? ? 'No known inhabitants' : npcs.join("\n")
- })
- end
- # Update fields and return embed
- embed.fields = fields
- embed
- end
- def landmark_list
- fields = []
- # Fetch all the Regions, and iterate through them
- Region.all.each do |r|
- # Fetch the all the Landmarks inside the region, then iterate
- landmarks = Landmark.where(region: r.id)
- children, parents = landmarks.partition{ |lm| lm.location }
- list = []
- parents.each do |p|
- list.push(p.name)
- input_children(children, p, list, 1)
- end
- fields.push({ name: r.name, value: list.join("\n"), inline: true}) unless landmarks.empty?
- end
- Embed.new(
- title: 'Places of Interest',
- fields: fields
- )
- end
- def input_children(children, parent, list, level)
- indent = "---"
- children.filter{ |c| c.location == parent.id }.each do |landmark|
- list.push("#{indent*level}#{landmark.name}")
- input_children(children, landmark, list, level+1)
- end
- end
|