module Modes

modes module and helpers

Public Instance Methods

auto_comment() click to toggle source
# File lib/instabot/modes.rb, line 137
def auto_comment
  all_medias  = @medias
  search(options[:tags]) if all_medias == [] || all_medias.nil?
  puts '[+] '.cyan + "[comment] ".upcase.yellow.bold + "#{all_medias.size} Media is ready".upcase
  @comments_auto_increment      = 0
  while @maximums[:comments_in_day] < @maximums[:max_comments_per_day]
    begin
      @medias -= [all_medias[@comments_auto_increment]] if all_medias[@comments_auto_increment].nil? || all_medias[@comments_auto_increment] == []
      handle_media_information_data(all_medias[@comments_auto_increment])
      if @media_information[:comments_disabled]
        puts '[-]'.cyan + 'comments are disable' + "\t[ignored]".yellow
        @comments_auto_increment += 1 
      end
      generated_comment = generate_a_comment
      puts '[+] '.cyan + "Trying to send a comment[#{generated_comment}] to media[#{all_medias[@comments_auto_increment]}]"
      comment(@media_information[:id], generated_comment)
      @medias -= [all_medias[@comments_auto_increment]]
      puts '[+] '.cyan + 'comment has been sent'.upcase.green.bold
      @maximums[:comments_in_day] += 1
      fall_in_asleep
      break
    rescue Exception => e
      puts "An error occured ... #{e.class} #{e.message}\n#{e.backtrace.inspect}\n[ignored]"
      @comments_auto_increment += 1
      break
    end
  end
end
auto_follow() click to toggle source
# File lib/instabot/modes.rb, line 52
def auto_follow
  all_users    = @users
  search(options[:tags]) if all_users == [] || all_users.nil?
  @follows_auto_increment           = 0
  puts '[+] '.cyan + "[follow] ".upcase.yellow.bold + "#{all_users.size} user is ready".upcase
  while @maximums[:follows_in_day] < @maximums[:max_follows_per_day]
    begin
      @users -= all_users[@follows_auto_increment] if all_users[@follows_auto_increment].nil? || all_users[@follows_auto_increment] == []
      handle_user_information_data_by_user_id(all_users[@follows_auto_increment])
      if !is_user_valid?(@user_information[:full_name])
        puts '[+] '.cyan + "Trying to follow user [#{all_users[@follows_auto_increment]}]"
        follow(@user_information[:id])
        @users -= [all_users[@follows_auto_increment]]
        puts '[+] '.cyan + 'User followed'.upcase.green.bold
        @maximums[:follows_in_day] += 1
        @follows_auto_increment += 1
        fall_in_asleep
      else
        puts "unwanted user(#{@user_information[:full_name]}) [ignored]".yellow
        @follows_auto_increment += 1
      end
      break
    rescue Exception => e
      puts "An error occured ... #{e.class} #{e.message}\n#{e.backtrace.inspect}\n[ignored]"
      @follows_auto_increment += 1
      break
      retry
    end
  end
end
auto_like() click to toggle source
# File lib/instabot/modes.rb, line 114
def auto_like
  all_medias  = @medias
  search(options[:tags]) if all_medias == [] || all_medias.nil?
  puts '[+] '.cyan + "[like] ".upcase.yellow.bold + "#{all_medias.size} Media is ready".upcase
  while @maximums[:likes_in_day] < @maximums[:max_likes_per_day]
    begin
      @medias -= [all_medias[@likes_auto_increment]] if all_medias[@likes_auto_increment].nil? || all_medias[@likes_auto_increment] == []
      handle_media_information_data(all_medias[@likes_auto_increment])
      puts '[+] '.cyan + "Trying to like media [#{all_medias[@likes_auto_increment]}]"
      like(@media_information[:id])
      @medias -= [all_medias[@likes_auto_increment]]
      puts '[+] '.cyan + 'Media liked'.upcase.green.bold
      @maximums[:likes_in_day] += 1
      fall_in_asleep
      break
    rescue Exception => e
      puts "An error occured ... #{e.class} #{e.message}\n#{e.backtrace.inspect}\n[ignored]"
      @medias -= [all_medias[@likes_auto_increment]]
      break
    end
  end
end
auto_unfollow() click to toggle source
# File lib/instabot/modes.rb, line 83
def auto_unfollow
  followed_users = @local_stroage[:followed_users]
  puts '[+] '.cyan + "[unfollow] ".upcase.yellow.bold + "#{followed_users.size} user is ready".upcase
  @unfollows_auto_increment = 0
  while @maximums[:unfollows_in_day] < @maximums[:max_unfollows_per_day]
    if @local_stroage[:followed_users].size < @maximums[:max_unfollows_per_day]
      if !followed_users.empty?
        begin
          puts '[+] '.cyan + "Trying to unfollow user [#{followed_users[@unfollows_auto_increment]}]"
          unfollow(followed_users[@unfollows_auto_increment])
          @local_stroage[:followed_users] -= [followed_users[@unfollows_auto_increment]]
          puts '[+] '.cyan + 'User unfollowed'.upcase.bold.green
          @maximums[:unfollows_in_day] += 1
          @unfollows_auto_increment += 1
          fall_in_asleep
          break
        rescue Exception => e
          puts "An error occured ... #{e.class} #{e.message}\n#{e.backtrace.inspect}\n[ignored]"
          @unfollows_auto_increment += 1
          break
        end
      else 
        break
      end
    else
      puts '[-] '.red + '[unfollow per day] is much bigger than [follow per day]'.upcase.red.bold
      exit!
    end
  end
end
check_date() click to toggle source
# File lib/instabot/modes.rb, line 182
def check_date
  time = (@tomorrow - Time.new).to_i # => remained time ...
  if time.zero?
    puts '[+] '.cyan + "[new day]".upcase
    @local_stroage[:followed_users]   = []
    @local_stroage[:unfollowed_users] = []
    @local_stroage[:liked_medias]     = []
    @local_stroage[:commented_medias] = []
    @maximums[:follows_in_day]        = 0
    @maximums[:unfollows_in_day]      = 0
    @maximums[:likes_in_day]          = 0
    @maximums[:comments_in_day]       = 0
    @tomorrow                         = Time.new + 1.days
    search(options[:tags]) unless @infinite_tags == true
  else
    time = Time.at(time).utc.strftime("%H:%M:%S")
    print "\r[+] ".cyan + "#{time} remained".upcase + ' '*10 # the empty space
    $stdout.flush
  end
end
comments_in_day_are_full?() click to toggle source
# File lib/instabot/modes.rb, line 220
def comments_in_day_are_full?
  @maximums[:comments_in_day] == @maximums[:max_comments_per_day]
end
fall_in_asleep(time=options[:wait_per_action]) click to toggle source
# File lib/instabot/modes.rb, line 203
def fall_in_asleep(time=options[:wait_per_action])
  puts '[+] '.cyan + "Waiting for #{time} seconds".upcase
  sleep time
end
follows_in_day_are_full?() click to toggle source
# File lib/instabot/modes.rb, line 212
def follows_in_day_are_full?
  @maximums[:follows_in_day] == @maximums[:max_follows_per_day]
end
generate_a_comment() click to toggle source

genrating random comment

# File lib/instabot/modes.rb, line 167
def generate_a_comment
  comment = ""
  options[:comments].each { |c| comment << " #{c.sample}" }
  comment
end
is_user_valid?(user) click to toggle source
# File lib/instabot/modes.rb, line 173
def is_user_valid?(user)
  if options[:white_list_users].include?(user)
    options[:unwanted_list].find { |unwanted| unwanted =~ /#{user}/ } != nil 
  else
    return false
  end
end
likes_in_day_are_full?() click to toggle source
# File lib/instabot/modes.rb, line 208
def likes_in_day_are_full?
  @maximums[:likes_in_day] == @maximums[:max_likes_per_day]
end
maximums_are_full?() click to toggle source
# File lib/instabot/modes.rb, line 224
def maximums_are_full?
    likes_in_day_are_full? && follows_in_day_are_full? &&
    unfollows_in_day_are_full? && comments_in_day_are_full?
end
mode(mode = :default) click to toggle source

main def and mode selector

# File lib/instabot/modes.rb, line 4
def mode(mode = :default)
  case mode
  when :infinite
    puts '[+] '.cyan + '[Auto] mode is turned on'.yellow
    log('[Auto] mode is turned on', 'MODES')
    search(options[:tags])
    @tomorrow = Time.new + 1.days
    actions = %w[follow unfollow like comment]
    loop do
      if !maximums_are_full?
        action = actions.sample
        case action
        when 'follow'
          if !follows_in_day_are_full?
            auto_follow
          end
        when 'unfollow'
          if !unfollows_in_day_are_full?
            auto_unfollow
          end
        when 'like'
          if !likes_in_day_are_full?
            auto_like
          end
        when 'comment'
          if !comments_in_day_are_full?
            auto_comment
          end
        end
      else
        check_date
        sleep 1
      end
    end
  when :clean_up
    puts '[+] '.cyan + '[Clean up] mode is turned on'.upcase.yellow
    log('[Clean up] mode is turned on', 'MODES')
    @local_stroage[:followed_users].each do |user|
      unfollow(user)
      fall_in_asleep
    end
  when :default
    puts '[-] '.cyan + 'Please choose a mode'.upcase.red
  else
    puts '[-] '.cyan + 'Please choose a mode'.upcase.red
  end
end
unfollows_in_day_are_full?() click to toggle source
# File lib/instabot/modes.rb, line 216
def unfollows_in_day_are_full?
  @maximums[:unfollows_in_day] == @maximums[:max_unfollows_per_day]
end