instabot 0.1.11 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aebf42d0021ce467f9c61e3f47f7fb9ec36881d3
4
- data.tar.gz: ffa73b58b8da993f113794e59c694254214ba25b
3
+ metadata.gz: f808851229fae36a82e51941365164b50749f143
4
+ data.tar.gz: 52b4340f9cf369c776493d0f394a32fd347eda2e
5
5
  SHA512:
6
- metadata.gz: 9a97f7548c1da4c93f5c91245533a30d283661126a7aec292cf36c923a4bbaaf5fc0976510e3fec481b7d66e6d4d09fac0ac25b7a104a9052c4496f6798d8c07
7
- data.tar.gz: 393421fd38087109569499ebab60fe7acdcc0f4a293c9eea188eac5b130c5334aa88f7ec28ee407e337208854ecfa163473ab3f9e149d2cd2af9f04a2a706620
6
+ metadata.gz: 1f1d2fba7b8916ce434eb64506afc72b49780d7b7c01b51564715b3974c0ae004cffd8fbfc19b0d7b6df01a5668c06a55285f3ee38233de00a56c6dffc9d753c
7
+ data.tar.gz: 86d9f7bb7271f831ce0ce63f804385190f45a17034d85f621e1ade9f9f4fcbfc3afb626ece683f8fa9f49a4470f61ed2eab592206b7ff5fc00091823caaab203
@@ -2,7 +2,7 @@ module Actions
2
2
 
3
3
  def follow(user_id)
4
4
  log("trying to follow a user [#{user_id}]")
5
- check_login_status
5
+ check_login_status(:auto_retry)
6
6
  follow_url = "https://www.instagram.com/web/friendships/#{user_id}/follow/"
7
7
  set_mechanic_data
8
8
  response = @agent.post(follow_url, @params, @headers)
@@ -14,7 +14,7 @@ module Actions
14
14
 
15
15
  def unfollow(user_id)
16
16
  log("trying to unfollow a user [#{user_id}]")
17
- check_login_status
17
+ check_login_status(:auto_retry)
18
18
  unfollow_url = "https://www.instagram.com/web/friendships/#{user_id}/unfollow/"
19
19
  set_mechanic_data
20
20
  response = @agent.post(unfollow_url, @params, @headers)
@@ -26,7 +26,7 @@ module Actions
26
26
 
27
27
  def like(media_id)
28
28
  log("trying to like a media[#{media_id}]")
29
- check_login_status
29
+ check_login_status(:auto_retry)
30
30
  comment_url = "https://www.instagram.com/web/likes/#{media_id}/like/"
31
31
  set_mechanic_data
32
32
  response = @agent.post(comment_url, @params, @headers)
@@ -38,7 +38,7 @@ module Actions
38
38
 
39
39
  def comment(media_id=0, text="")
40
40
  log("trying to send a comment to media[#{media_id}]")
41
- check_login_status
41
+ check_login_status(:auto_retry)
42
42
  comment_url = "https://www.instagram.com/web/comments/#{media_id}/add/"
43
43
  set_mechanic_data({ comment_text: text.to_s })
44
44
  response = @agent.post(comment_url, @params, @headers)
@@ -1,9 +1,18 @@
1
1
  module Banner
2
2
 
3
3
  def print_banner()
4
- puts <<-BANNER
5
- banner location ...
6
- BANNER
4
+ if options[:print_banner]
5
+ puts <<-BANNER
6
+ ██╗███╗ ██╗███████╗████████╗ █████╗ ██████╗ ██████╗ ████████╗
7
+ ██║████╗ ██║██╔════╝╚══██╔══╝██╔══██╗██╔══██╗██╔═══██╗╚══██╔══╝
8
+ ██║██╔██╗ ██║███████╗ ██║ ███████║██████╔╝██║ ██║ ██║
9
+ ██║██║╚██╗██║╚════██║ ██║ ██╔══██║██╔══██╗██║ ██║ ██║
10
+ ██║██║ ╚████║███████║ ██║ ██║ ██║██████╔╝╚██████╔╝ ██║
11
+ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═╝
12
+
13
+ BANNER
14
+ puts "A instagram bot works without IG api".white.bold + " #Author ".yellow + "github.com/eVanilla".cyan
15
+ end
7
16
  end
8
17
 
9
18
  end
@@ -1,5 +1,5 @@
1
1
  module Config
2
-
2
+
3
3
  class << self
4
4
  attr_accessor :options
5
5
  end
@@ -10,16 +10,19 @@ module Config
10
10
  end
11
11
 
12
12
  class Configuration
13
- attr_accessor :username, :password, :tags, :comments, :pretty_print, :pre_load, :wait_per_action, :infinite_tags, :max_like_per_day, :max_follow_per_day, :max_unfollow_per_day, :max_comment_per_day, :unwanted_list, :white_list_users
13
+ attr_accessor :username, :password, :tags, :comments, :pretty_print, :print_banner, :pre_load, :wait_per_action, :infinite_tags, :max_like_per_day, :max_follow_per_day, :max_unfollow_per_day, :max_comment_per_day, :unwanted_list, :white_list_users#, :print_logs
14
14
  def initialize
15
15
  @username = nil
16
16
  @password = nil
17
- @tags = ["test","hello","hello_world","birthday","food"]
18
- @max_like_per_day = 10
19
- @max_follow_per_day = 10
20
- @max_unfollow_per_day = 10
21
- @max_comment_per_day = 10
17
+ @white_list_users = nil
22
18
  @unwanted_list = nil
19
+ @wait_per_action = 1 * 60
20
+ @tags = ["test","hello","hello_world","birthday","food"]
21
+ @max_like_per_day = 50
22
+ @max_follow_per_day = 50
23
+ @max_unfollow_per_day = 50
24
+ @max_comment_per_day = 50
25
+ @print_logs = true
23
26
  @comments = [
24
27
  ["this", "the", "your"],
25
28
  ["photo", "picture", "pic", "shot", "snapshot"],
@@ -27,11 +30,11 @@ module Config
27
30
  ["great", "super", "good", "very good", "good","wow", "WOW", "cool", "GREAT","magnificent","magical", "very cool", "stylish", "beautiful","so beautiful", "so stylish","so professional","lovely", "so lovely","very lovely", "glorious","so glorious","very glorious", "adorable", "excellent","amazing"],
28
31
  [".", "..", "...", "!","!!","!!!"]
29
32
  ]
30
- @wait_per_action = 1 * 60
31
- @white_list_users = nil
32
- @infinite_tags = false
33
+ @infinite_tags = true
34
+ @pre_load = true
33
35
  @pretty_print = true
34
- @pre_load = false
36
+ @print_banner = true
37
+ # @print_logs = true
35
38
  end
36
39
  end
37
40
 
@@ -14,7 +14,7 @@ class Instabot
14
14
  attr_accessor :users, :medias
15
15
 
16
16
  def initialize(mode=:default)
17
-
17
+ @login_mode = mode
18
18
  @users = []
19
19
  @medias = []
20
20
  @log_counter = 0
@@ -23,6 +23,7 @@ class Instabot
23
23
  @root_dir = "#{Dir.pwd}"
24
24
  @logs_dir = "#@root_dir/logs"
25
25
  @global_time = Time.new.strftime("%H-%M-%S--%y-%m-%d")
26
+ Configuration.new if @login_mode == :manual
26
27
  @local_stroage = {
27
28
  :followed_users => [],
28
29
  :unfollowed_users => [],
@@ -67,23 +68,32 @@ class Instabot
67
68
 
68
69
 
69
70
  def options
70
- return {
71
- :username => Config.options.username,
72
- :password => Config.options.password,
73
- :tags => Config.options.tags,
74
- :max_like_per_day => Config.options.max_like_per_day,
75
- :max_follow_per_day => Config.options.max_follow_per_day,
76
- :max_unfollow_per_day => Config.options.max_unfollow_per_day,
77
- :max_comment_per_day => Config.options.max_comment_per_day,
78
- :unwanted_list => Config.options.unwanted_list,
79
- :white_list_users => Config.options.white_list_users,
80
- :wait_per_action => Config.options.wait_per_action,
81
- :comments => Config.options.comments,
82
- :pre_load => Config.options.pre_load,
83
- :pretty_print => Config.options.pretty_print
84
- # :medias => [],
85
- # :users => []
86
- }
71
+ if @login_mode == :default
72
+ return {
73
+ :username => Config.options.username,
74
+ :password => Config.options.password,
75
+ :tags => Config.options.tags,
76
+ :max_like_per_day => Config.options.max_like_per_day,
77
+ :max_follow_per_day => Config.options.max_follow_per_day,
78
+ :max_unfollow_per_day => Config.options.max_unfollow_per_day,
79
+ :max_comment_per_day => Config.options.max_comment_per_day,
80
+ :unwanted_list => Config.options.unwanted_list,
81
+ :white_list_users => Config.options.white_list_users,
82
+ :wait_per_action => Config.options.wait_per_action,
83
+ :comments => Config.options.comments,
84
+ :pre_load => Config.options.pre_load,
85
+ :pretty_print => Config.options.pretty_print,
86
+ :print_banner => Config.options.print_banner
87
+ # :print_logs => Config.options.print_logs
88
+ }
89
+ else
90
+ return {
91
+ :max_like_per_day => :infinite,
92
+ :max_follow_per_day => :infinite,
93
+ :max_unfollow_per_day => :infinite,
94
+ :max_comment_per_day => :infinite
95
+ }
96
+ end
87
97
  end
88
98
 
89
99
  def custom_puts(text="")
@@ -118,9 +128,12 @@ class Instabot
118
128
  create_mechanic
119
129
  custom_print "[+] ".cyan + "Processing successfully completed"
120
130
  puts
121
- # unless mode != :default
131
+
132
+ if mode == :default
122
133
  login
123
- # end
134
+ elsif mode == :manual
135
+ else
136
+ end
124
137
 
125
138
  end
126
139
 
@@ -12,7 +12,7 @@ module Protocol
12
12
 
13
13
 
14
14
  def get_page(url)
15
- @page = @agent.get(url)
15
+ response = @agent.get(url)
16
16
  # @temp_jar = @agent.cookie_jar
17
17
  # @temp_jar.save("#{@lib_dir}/cookies.yaml", session: true) # => saving the cookies
18
18
  end
@@ -2,12 +2,24 @@ module Grabber
2
2
 
3
3
  def get_user_informations(user_id)
4
4
  # puts "=".cyan*10
5
- user_page = "https://www.instagram.com/web/friendships/#{user_id}/follow/"
6
- @agent.get(user_page)
7
- last_page = @agent.history.last.uri.to_s
8
- username = last_page.split('/')[3]
9
- user_info = @agent.get("https://instagram.com/#{username}/?__a=1")
10
- data = JSON.parse(user_info.body)
5
+ begin
6
+ user_page = "https://www.instagram.com/web/friendships/#{user_id}/follow/"
7
+ response = get_page(user_page)
8
+ last_page = @agent.history.last.uri.to_s
9
+ username = last_page.split('/')[3]
10
+ response = @agent.get("https://instagram.com/#{username}/?__a=1")
11
+ rescue Exception => e
12
+ if response.code == "404"
13
+ puts "ERORR: [404] Notfound\t#{e.message}".red
14
+ exit!
15
+ elsif response.code == "403"
16
+ exit! if @error_403_times == 3
17
+ @error_403_times += 1
18
+ puts "ERROR: [403] (looks like you're banned from IG)".red
19
+ retry
20
+ end
21
+ end
22
+ data = JSON.parse(response.body)
11
23
  data.extend Hashie::Extensions::DeepFind
12
24
 
13
25
  # File.open("body.json", "w+") {|file| file.puts data.extend Hashie::Extensions::DeepFind }
@@ -22,14 +34,25 @@ module Grabber
22
34
  id: data.deep_find("id")
23
35
  }
24
36
  # puts @informations
25
-
26
37
  end
27
38
 
28
39
  def get_media_informations(media_id)
29
40
  # puts "=".cyan*10
30
41
  custom_puts "[+] ".cyan + "Trying to get media (#{media_id}) information"
31
- media_info = @agent.get("https://www.instagram.com/p/#{media_id}/?__a=1")
32
- data = JSON.parse(media_info.body)
42
+ begin
43
+ response = @agent.get("https://www.instagram.com/p/#{media_id}/?__a=1")
44
+ rescue Exception => e
45
+ if response.code == "404"
46
+ puts "ERORR: [404] Notfound\t#{e.message}".red
47
+ exit!
48
+ elsif response.code == "403"
49
+ exit! if @error_403_times == 3
50
+ @error_403_times += 1
51
+ puts "ERROR: [403] (looks like you're banned from IG)".red
52
+ retry
53
+ end
54
+ end
55
+ data = JSON.parse(response.body)
33
56
  data.extend Hashie::Extensions::DeepFind
34
57
  # pp data.extend Hashie::Extensions::DeepFind
35
58
 
@@ -74,7 +97,6 @@ module Grabber
74
97
  end
75
98
  # puts @informations
76
99
 
77
-
78
100
  end
79
101
 
80
102
 
@@ -35,6 +35,8 @@ module Log
35
35
  write_file("commented_medias.txt",id)
36
36
  when :default
37
37
  puts "please choice a type"
38
+ else
39
+ puts "please choice a type"
38
40
  end
39
41
  end
40
42
 
@@ -1,27 +1,34 @@
1
1
  module Login
2
2
 
3
- def login
3
+ def login(username="", password="")
4
+ if @login_mode == :manual
5
+ username = username.to_s
6
+ password = password.to_s
7
+ else
8
+ username = options[:username]
9
+ password = options[:password]
10
+ end
4
11
  log("trying to login")
5
- custom_print "[+] ".cyan + "Trying to login into [#{options[:username]}] account"
12
+ custom_print "[+] ".cyan + "Trying to login into [#{username}] account"
6
13
  login_page = @agent.get("https://www.instagram.com/accounts/login/?force_classic_login")
7
14
  page_form = login_page.forms.last
8
- page_form.username = options[:username]
9
- page_form.password = options[:password]
15
+ page_form.username = username
16
+ page_form.password = password
10
17
  page = page_form.submit
11
- if page.code == "200" || page.code == "302"
18
+ if page.code == "200"
12
19
  @login_status = true
13
20
  log("successfully logged in")
14
21
  custom_print "[+] ".cyan + "Successfully logged in".green.bold
15
22
  else
16
23
  @login_status = false
17
- custom_print "[-] ".cyan + "Invalid username or password".red.bold
24
+ custom_print "[-] ".cyan + "Invalid username or password or maybe a bug!".red.bold
18
25
  exit
19
26
  end
20
27
  puts
21
28
  rescue Exception => e
22
29
  log("a error detected: #{e.class} #{e}")
23
30
  @login_status = false
24
- custom_print "[-] ".cyan + "#{e.class} #{e.message}\n#{e.backtrace.inspect}".red
31
+ custom_print "[-] ".cyan + "#{e.class} #{e.message}".red
25
32
  end
26
33
 
27
34
  def logout
@@ -34,12 +41,15 @@ module Login
34
41
  custom_print "[+] ".cyan + "Successfully logged out"
35
42
  end
36
43
 
37
- def check_login_status
44
+ def check_login_status(mode=:default)
38
45
  # custom_print "[+] ".cyan + "Checking login status"
39
46
  log("checking loging status")
40
- unless @login_status
47
+ if @login_status
48
+ return true
49
+ else
41
50
  custom_print "[-] ".cyan + "you're not logged in.".red.bold
42
- login
51
+ return false
52
+ login if mode == :auto_retry
43
53
  end
44
54
  end
45
55
 
@@ -47,15 +47,11 @@ module Modes
47
47
  sleep 1
48
48
  end
49
49
  end
50
- when :cleanup
50
+ when :clean_up
51
51
  custom_puts "[+] ".cyan + "Clean up mode is turned on"
52
52
  @local_stroage[:followed_users].each do |user|
53
53
  unfollow(user)
54
54
  end
55
- # users.each do |user|
56
- # get_user_informations(user)
57
- # unfollow(@informations[:id])
58
- # end
59
55
  when :default
60
56
  custom_print "[-] ".cyan + "Please choose a mode".red
61
57
  else
@@ -104,7 +100,7 @@ module Modes
104
100
  # users.each do |user|
105
101
  followed_users = @local_stroage[:followed_users]
106
102
  custom_puts "[+] ".cyan + "#{followed_users.size} users ready to unfollow"
107
- id = 0
103
+ id = 0
108
104
  while @maximums[:unfollows_in_day] < @maximums[:max_unfollows_per_day]
109
105
  if @local_stroage[:followed_users].size < @maximums[:max_unfollows_per_day]
110
106
  begin
@@ -114,7 +110,7 @@ module Modes
114
110
  # custom_print "unfollowed_users[id] => #{unfollowed_users[id]}"
115
111
  custom_puts "[+] ".cyan + "Trying to unfollow a user [#{followed_users[id]}]"
116
112
  unfollow(followed_users[id])
117
- custom_puts "\n[+] ".cyan + "User unfollowed!".bold.green
113
+ custom_puts "\n[+] ".cyan + "User unfollowed".bold.green
118
114
  @maximums[:unfollows_in_day] += 1
119
115
  id += 1
120
116
  # custom_print "unfollows_in_day = #{@maximums[:unfollows_in_day]} || max_unfollows_per_day = #{@maximums[:max_unfollows_per_day]} || id = #{id}"
@@ -125,8 +121,8 @@ module Modes
125
121
  retry
126
122
  end
127
123
  else
128
- custom_print "[+] ".cyan + "[unfollow users per day] is bigger than followed users"
129
- break
124
+ custom_print "[+] ".cyan + "[unfollow per day] is bigger than [follow per day]"
125
+ exit
130
126
  end
131
127
  end
132
128
  end
@@ -134,7 +130,7 @@ module Modes
134
130
  def auto_like
135
131
  # medias.each do |media|
136
132
  all_medias = medias
137
- custom_puts "[+] ".cyan + "#{all_medias.size} medias ready to like"
133
+ custom_puts "[+] ".cyan + "#{all_medias.size} Medias ready to like"
138
134
  id = 0
139
135
  while @maximums[:likes_in_day] < @maximums[:max_likes_per_day]
140
136
  begin
@@ -159,11 +155,12 @@ module Modes
159
155
  def auto_comment
160
156
  # medias.each do |media|
161
157
  all_medias = medias
162
- custom_puts "[+] ".cyan + "#{all_medias.size} medias ready to send a comment"
158
+ custom_puts "[+] ".cyan + "#{all_medias.size} Medias ready to send a comment"
163
159
  id = 0
164
160
  while @maximums[:comments_in_day] < @maximums[:max_comments_per_day]
165
161
  begin
166
162
  get_media_informations(all_medias[id])
163
+ id += 1 if @informations[:comments_disabled]
167
164
  # custom_print "media informations:".cyan
168
165
  # @informations.map {|key,val| custom_print "#{key}: #{val}"}
169
166
  custom_puts "[+] ".cyan + "Trying to send a comment to media[#{all_medias[id]}]"
@@ -1,4 +1,4 @@
1
1
  module Version
2
- VERSION = "0.1.11"
2
+ VERSION = "0.1.38"
3
3
  # DESCRIPTION = ""
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instabot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - eVanilla
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-29 00:00:00.000000000 Z
11
+ date: 2017-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -113,7 +113,7 @@ dependencies:
113
113
  - !ruby/object:Gem::Version
114
114
  version: 5.1.4
115
115
  description: A instagram bot works without instagram api, only needs your username
116
- and password. written on ruby
116
+ and password
117
117
  email:
118
118
  - ''
119
119
  executables: []