class Cosgrove::CommentJob

Public Instance Methods

merge(template, message = nil, username = 'someone', markup = :html) click to toggle source
# File lib/cosgrove/comment_job.rb, line 95
def merge(template, message = nil, username = 'someone', markup = :html)
  @comment_md ||= "support/#{template}.md"
  @comment_body ||= {}
  @comment_body[template] ||= if File.exist?(@comment_md)
    File.read(@comment_md)
  end
  
  raise "Cannot read #{template} template or template is empty." unless @comment_body[template].present?
  
  merged = @comment_body[template]
  merged = merged.gsub('${message}', message) unless message.nil?
  merged = merged.gsub('${username}', username) unless username.nil?
  
  case markup
  when :html then RDiscount.new(merged).to_html
  when :markdown then merged
  end
end
perform(event, slug, template, message = nil) click to toggle source
# File lib/cosgrove/comment_job.rb, line 8
def perform(event, slug, template, message = nil)
  chain = :hive
  author_name, permlink = parse_slug slug
  muted = muted by: hive_account, chain: chain
  
  author = find_author(chain: chain, author_name: author_name)
  
  return if author.nil?
  
  post = find_comment(chain: chain, author_name: author_name, permlink: permlink)
  
  if post.nil?
    cannot_find_input(event)
    return
  end
  
  created ||= post.created
  cashout_time ||= post.cashout_time
  
  if created.class == String
    created = Time.parse(created + 'Z')
    cashout_time = Time.parse(cashout_time + 'Z')
  end
  
  nope = if post.nil?
    "Sorry, couldn't find that."
  elsif cashout_time < Time.now.utc
    'Unable to comment on that.  Too old.'
  elsif post.parent_permlink == 'nsfw'
    puts "Won't comment because parent_permlink: nsfw"
    'Unable to comment on that.'
  elsif post.json_metadata.include?('nsfw')
    puts "Won't comment because json_metadata includes: nsfw"
    'Unable to comment on that.'
  elsif post.active_votes.map{ |v| v['voter'] }.include?('blacklist-a')
    puts "Won't comment blacklist-a voted."
    'Unable to comment on that.'
  elsif (rep = to_rep(post.author_reputation).to_f) < 25.0
    puts "Won't comment because rep too low: #{rep}"
    'Unable to comment on that.'
  elsif muted.include? author_name
    puts "Won't vote because author muted."
    'Unable to vote.'
  # elsif template == :welcome && author.post_count != 1
  #   'Sorry, this function is intended to welcome new authors.'
  elsif find_comment(chain: :hive, author_name: hive_account, parent_permlink: post.permlink).any?
    title = post.title
    title = post.permlink if title.empty?
    "I already commented on #{title} by #{post.author}."
  end

  if !!nope
    event.respond nope
    return
  end
  
  now = Time.now
  comment = {
    type: :comment,
    parent_permlink: post.permlink,
    author: hive_account,
    permlink: "re-#{post.author.gsub(/[^a-z0-9\-]+/, '-')}-#{post.permlink}-#{now.utc.strftime('%Y%m%dt%H%M%S%Lz')}", # e.g.: 20170225t235138025z
    title: '',
    body: merge(template, message, event.author.username),
    json_metadata: "{\"tags\":[\"#{post.parent_permlink}\"],\"app\":\"#{Cosgrove::AGENT_ID}\"}",
    parent_author: post.author
  }
  
  ap comment
  
  tx = new_tx :steem
  op = Radiator::Operation.new(comment)
  tx.operations << op
  
  response = tx.process(true)
  
  ap response.inspect
  
  if !!response.error
    'Unable to comment right now.  Maybe I already commented on that.  Try again later.'
  elsif !!response.result.id
    "Wrote #{template} comment on: #{post.title} by #{author_name}"
  else
    ':question:'
  end
end
preview(template, event, message) click to toggle source
# File lib/cosgrove/comment_job.rb, line 114
def preview(template, event, message)
  m = "Your Message Here"
  discord_id = event.author.id
  
  @author = if (a = Cosgrove::Account.find_by_discord_id(discord_id)).nil?
    event.author.username
  else
    "@#{a.account_name}"
  end
  
  if message.present?
    @message = message
  end
  
  preview = []
  preview << "Set by **#{@author}**" if @author.present?
  preview << "```md\n"
  preview << merge(template, @message || m, @author, :markdown)
  preview << "\n```"
  
  preview.join('')
end