steam-trade 0.1.4 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ec0d0b02e28d0786909bc9aa8291e3a6985b842
4
- data.tar.gz: a953614b30f1b7a38a32de697b6bc08007a51526
3
+ metadata.gz: 6fbde2803532a7f2bd6bf50986fcd678230e07db
4
+ data.tar.gz: 9ce311c6a2568ea06ca4068046f2958177e135ce
5
5
  SHA512:
6
- metadata.gz: b5d516bdd1738fa7eed8513a4743f117ad4ca33c888c221762ff1909a548c31ef2329c8cf8fb8aac5aadcb5909cfbcc324873370d798404b530b7d4ae97f0701
7
- data.tar.gz: 39e2643a0402a09d82431fdeb0c3a89c88d55e24bb9f2ed926b9be6647a42575f4620e64955f7d60def1f0d8c3553efb14d8ba3e15194403af16ad4f75739a80
6
+ metadata.gz: 3dc473b18d24ee21829ea9b61504f80faf03cdf377f0fe7789f350d0ab432354a888ba664a89d8945d4ac3045f6be26f556240744a1f576bfbbcbb03aa72e618
7
+ data.tar.gz: 6de09926ac61687084e583b9adcba6c382400af597001a11ecefe92e4114d999a1ed3a620eeb5a70bffe5ec036270118bcc6c42ddbafe9711a2f35ea11ad57e8
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # steam-trade V0.1.3
1
+ # steam-trade V0.1.4
2
2
  Please check constantly for updates cause i'm still making this gem.
3
3
 
4
4
  This gem simplifes/allows sending steam trade offers programmatically.
@@ -7,6 +7,11 @@ this gem is primarly for trading cards, tho can be used to CS:GO and other games
7
7
 
8
8
  # Changelog
9
9
  ```
10
+ 0.1.4:
11
+ - added Social commands : send friend request, accept friend request, remove friend, send message, get messages
12
+ - added function to update badges blueprint (useful when there is no gem update)
13
+
14
+
10
15
  0.1.3:
11
16
  - decreased cooldown between requests from 2 seconds to 1 second.
12
17
  - added a 0.6 second wait before attempting to confirm a trade offer (mobile).
@@ -41,8 +46,15 @@ this gem is primarly for trading cards, tho can be used to CS:GO and other games
41
46
  - [cancel_trade_offer()](#cancel_trade_offertrade_offer_id)
42
47
  - [Counting badges owned](#counting-badges-owned)
43
48
  - [sets_count()](#sets_counttargetnon_marketable)
49
+ - [update_blueprint()](#update_blueprint)
44
50
  - [2FA codes](#2fa-codes)
45
51
  - [fa()](#fashared_secret-time_difference)
52
+ - [Social Features](#social-commands)
53
+ - [send_friend_request()](#send_friend_requesttarget)
54
+ - [accept_friend_request()](#accept_friend_requesttarget)
55
+ - [remove_friend()](#remove_friendtarget)
56
+ - [send_message()](#send_messagetarget-message)
57
+ - [poll_messages()](#poll_messages)
46
58
  - [More commands](#more-commands)
47
59
 
48
60
  ## Installation
@@ -371,6 +383,16 @@ hash = account.sets_count('CardExchange')
371
383
  hash = account.sets_count(76561198370420964)
372
384
  hash = account.sets_count('https://steamcommunity.com/tradeoffer/new/?partner=410155236&token=H-yK-GFt',false)
373
385
 
386
+ ```
387
+
388
+ #### update_blueprint()
389
+ - updates your locally saved badges blueprint
390
+ ```ruby
391
+ require 'steam-trade'
392
+
393
+ handler = Handler.new
394
+
395
+ handler.update_blueprint()
374
396
  ```
375
397
  ## 2FA codes
376
398
  #### `fa(shared_secret, time_difference)`
@@ -393,6 +415,64 @@ nonlogged = Handler.new()
393
415
  puts nonlogged.fa() # will not work
394
416
  puts logged.fa() # will give a random code
395
417
 
418
+ ```
419
+ ## Social Commands
420
+ **ALL OF THE COMMANDS BELOW REQUIRES LOGIN**
421
+ ### `send_friend_request(target)`
422
+ sends a friend request to the target
423
+ - `target` can be a steamID64, tradelink, or profileID
424
+
425
+ ```ruby
426
+ require 'steam-trade'
427
+
428
+ h = Handler.new('username', 'password')
429
+ h.send_friend_request('nomg3r')
430
+ ```
431
+
432
+ ### `accept_friend_request(target)`
433
+ accepts a friend request from the target
434
+ - `target` can be a steamID64, tradelink, or profileID
435
+
436
+ ```ruby
437
+ require 'steam-trade'
438
+
439
+ h = Handler.new('username', 'password')
440
+ h.accept_friend_request('nomg3r')
441
+ ```
442
+
443
+ ### `remove_friend(target)`
444
+ removes a friend
445
+ - `target` can be a steamID64, tradelink, or profileID
446
+
447
+ ```ruby
448
+ require 'steam-trade'
449
+
450
+ h = Handler.new('username', 'password')
451
+ h.remove_friend('nomg3r')
452
+ ```
453
+ ### `send_message(target, message)`
454
+ sends a message to the target
455
+ - `target` can be a steamID64, tradelink, or profileID
456
+ - `message` the message to send
457
+ ```ruby
458
+ require 'steam-trade'
459
+
460
+ h = Handler.new('username', 'password')
461
+ h.send_message('nomg3r', "Hello, Friend)
462
+ ```
463
+
464
+ ### `poll_messages()`
465
+ gives you the messages you receieved (after mobile login is initiated (after you call send_message() or poll_messages() ) )
466
+
467
+ ```ruby
468
+ require 'steam-trade'
469
+
470
+ h = Handler.new('username', 'password')
471
+ print h.poll_messages() # will not return messages so you call at again ( only the first time in the whole program )
472
+ puts ""
473
+ puts "------"
474
+ sleep(10) #send a message to the logged in account
475
+ print h.poll_messages() # actually have messages ( if you received some in the time between the first and the second request )
396
476
  ```
397
477
  ## More commands
398
478
  you can find more non-vital commands in the [wiki](https://github.com/OmG3r/steam-trade/wiki)
data/lib/LoginExecutor.rb CHANGED
@@ -4,7 +4,7 @@ module LoginCommands
4
4
  private
5
5
  def login()
6
6
  response = @session.post('https://store.steampowered.com/login/getrsakey/', {'username' => @username})
7
- data = pass_stamp(response)
7
+ data = pass_stamp(response,@password)
8
8
  encrypted_password = data["password"]
9
9
  timestamp = data["timestamp"]
10
10
  repeater = 0
@@ -89,7 +89,7 @@ module LoginCommands
89
89
 
90
90
 
91
91
  ########################################################################################
92
- def pass_stamp(give)
92
+ def pass_stamp(give,password)
93
93
 
94
94
  data = JSON::parse(give)
95
95
  mod = data["publickey_mod"].hex
@@ -99,7 +99,7 @@ module LoginCommands
99
99
  key = OpenSSL::PKey::RSA.new
100
100
  key.e = OpenSSL::BN.new(exp)
101
101
  key.n = OpenSSL::BN.new(mod)
102
- ep = Base64.encode64(key.public_encrypt(@password.force_encoding("utf-8"))).gsub("\n", '')
102
+ ep = Base64.encode64(key.public_encrypt(password.force_encoding("utf-8"))).gsub("\n", '')
103
103
  return {'password' => ep, 'timestamp' => timestamp }
104
104
  end
105
105
  ########################################################################################
data/lib/Misc.rb CHANGED
@@ -26,7 +26,9 @@ module MiscCommands
26
26
  end
27
27
  ########################################################################################
28
28
 
29
-
29
+ def use_chat_session()
30
+ @chat_session
31
+ end
30
32
 
31
33
 
32
34
 
@@ -76,7 +78,7 @@ module MiscCommands
76
78
  end
77
79
  if value == nil
78
80
  begin
79
- @session.cookie_jar.jar["store.steampowered.com"]["/"]["sessionid"].value
81
+ value = @session.cookie_jar.jar["store.steampowered.com"]["/"]["sessionid"].value
80
82
  rescue
81
83
  value = nil
82
84
  end
data/lib/Social.rb CHANGED
@@ -42,8 +42,8 @@ module SocialCommands
42
42
  end
43
43
 
44
44
  def send_message(id, message)
45
- raise "you must be logged in to send a message" if @loggedin == false
46
- chat_start() if @chat_session.nil?
45
+ raise "no account details given cannot poll messages" if @chat_session.nil? && @username.nil?
46
+ mobile_login() if @chat_session.nil?
47
47
 
48
48
  steamid = verify_profileid_or_trade_link_or_steamid(id)
49
49
 
@@ -59,8 +59,8 @@ module SocialCommands
59
59
 
60
60
 
61
61
  def poll_messages()
62
- raise "you must be logged in to pool messages" if @loggedin == false
63
- chat_start() if @chat_session.nil?
62
+ raise "no account details given cannot poll messages" if @chat_session.nil? && @username.nil?
63
+ mobile_login() if @chat_session.nil?
64
64
  response = @chat_session.post('https://api.steampowered.com/ISteamWebUserPresenceOAuth/Poll/v1', {
65
65
  "umqid": @umqid,
66
66
  "message": @message_id,
@@ -77,17 +77,18 @@ module SocialCommands
77
77
  end
78
78
 
79
79
 
80
- private
81
- def chat_start()
82
- mobile_login()
83
- get_umqid()
84
- end
85
80
 
86
81
 
87
- def mobile_login()
88
- @chat_session = Mechanize.new { |agent| # the session which will hold your cookies to communicate with steam
89
- agent.follow_meta_refresh = true
90
- agent.log = Logger.new('read.log')
82
+
83
+
84
+ def mobile_login(username = @username, password = @password, secret = nil)
85
+ secret = @secret if username == @username
86
+ raise "username is required to do a chat login" if username.nil?
87
+ raise "password is required to do a chat login" if password.nil?
88
+
89
+ @chat_session = Mechanize.new { |a| # the session which will hold your cookies to communicate with steam
90
+ a.follow_meta_refresh = true
91
+ # a.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
91
92
  }
92
93
 
93
94
  mobileheaders = {
@@ -108,16 +109,16 @@ module SocialCommands
108
109
  @chat_session.cookie_jar << cookie
109
110
 
110
111
 
111
- response = @chat_session.post('https://steamcommunity.com/login/getrsakey/', {'username' => @username}, mobileheaders).content
112
+ response = @chat_session.post('https://steamcommunity.com/login/getrsakey/', {'username' => username}, mobileheaders).content
112
113
 
113
114
 
114
- data = pass_stamp(response)
115
+ data = pass_stamp(response,password)
115
116
  encrypted_password = data["password"]
116
117
  timestamp = data["timestamp"]
117
118
  repeater = 0
118
119
  until repeater == true
119
- if @secret != nil
120
- guardcode = fa(@secret,@time_difference)
120
+ if secret != nil
121
+ guardcode = fa(secret,0)
121
122
  else
122
123
  puts "please write your 2FA code (mobile login to send messages)"
123
124
  guardcode = gets.chomp
@@ -130,10 +131,10 @@ module SocialCommands
130
131
  'emailauth' => '',
131
132
  'emailsteamid' => '',
132
133
  'password' => encrypted_password,
133
- 'remember_login' => 'false',
134
+ 'remember_login' => 'true',
134
135
  'rsatimestamp' => timestamp,
135
136
  'twofactorcode' =>guardcode,
136
- 'username' => @username,
137
+ 'username' => username,
137
138
  'loginfriendlyname' => '#login_emailauth_friendlyname_mobile',
138
139
  'oauth_scope' => "read_profile write_profile read_client write_client",
139
140
  'oauth_client_id' => "DE45CD61"
@@ -145,7 +146,7 @@ module SocialCommands
145
146
  if response["success"] == true
146
147
  repeater = true
147
148
  elsif repeater == 3
148
- raise "Login (mobile) failed username: #{@username}, password: #{@password}, shared_scret: #{@secret} tried 3 times"
149
+ raise "Login (mobile) failed username: #{username}, password: #{password}, shared_scret: #{secret} tried 3 times"
149
150
  else
150
151
 
151
152
  sleep(2)
@@ -157,11 +158,54 @@ module SocialCommands
157
158
 
158
159
  oauth_hash = JSON.parse(response["oauth"]) # steam returns a hash as a string
159
160
  @oauth_token = oauth_hash["oauth_token"]
161
+ machinevalue = steammachine_cookie(oauth_hash["steamid"])
162
+ get_umqid()
163
+ return {"oauth_token" => @oauth_token, "machine" => machinevalue}
164
+ end
165
+
166
+
167
+
168
+ def oauth_login(oauth_token,machinevalue)
169
+
170
+ @chat_session = Mechanize.new { |a| # the session which will hold your cookies to communicate with steam
171
+ a.follow_meta_refresh = true
172
+ # a.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
173
+ }
174
+
175
+
176
+ @oauth_token = oauth_token
177
+ response = @chat_session.post('https://api.steampowered.com/IMobileAuthService/GetWGToken/v1/', {"access_token" => oauth_token}).content
178
+ data = JSON.parse(response)
179
+ data = data["response"]
180
+
181
+ raise "error. cannot login" if data["token"].nil? || data["token_secure"].nil?
182
+
183
+
184
+ steamid = get_umqid(true) ##umqid got
185
+
186
+ ## loading cookies
187
+ container = []
188
+ container << (Mechanize::Cookie.new :domain => 'store.steampowered.com', :name =>'steamLogin', :value =>data["token"], :path => '/')
189
+ container << (Mechanize::Cookie.new :domain => 'steamcommunity.com', :name =>'steamLogin', :value =>data["token"], :path => '/')
190
+ container << (Mechanize::Cookie.new :domain => 'help.steampowered.com', :name =>'steamLogin', :value =>data["token"], :path => '/')
191
+
192
+ container << (Mechanize::Cookie.new :domain => 'store.steampowered.com', :name =>'steamLoginSecure', :value =>data["token_secure"], :path => '/')
193
+ container << (Mechanize::Cookie.new :domain => 'steamcommunity.com', :name =>'steamLoginSecure', :value =>data["token_secure"], :path => '/')
194
+ container << (Mechanize::Cookie.new :domain => 'help.steampowered.com', :name =>'steamLoginSecure', :value =>data["token_secure"], :path => '/')
195
+
196
+ container << (Mechanize::Cookie.new :domain => 'store.steampowered.com', :name => "steamMachineAuth#{steamid}" , :value => machinevalue, :path => '/')
197
+ container << (Mechanize::Cookie.new :domain => 'steamcommunity.com', :name => "steamMachineAuth#{steamid}" , :value => machinevalue, :path => '/')
198
+ container << (Mechanize::Cookie.new :domain => 'help.steampowered.com', :name => "steamMachineAuth#{steamid}" , :value => machinevalue, :path => '/')
199
+
200
+ container.each { |cookie|
201
+ @chat_session.cookie_jar << cookie
202
+ }
160
203
 
161
204
 
162
205
  end
163
206
 
164
- def get_umqid()
207
+ private
208
+ def get_umqid(re = false)
165
209
  response = @chat_session.post('https://api.steampowered.com/ISteamWebUserPresenceOAuth/Logon/v1', {
166
210
  'ui_mode' => 'web',
167
211
  'access_token' => @oauth_token
@@ -170,16 +214,32 @@ module SocialCommands
170
214
  @umqid = hash["umqid"]
171
215
  @message_id = hash["message"]
172
216
 
173
- ## starting polling
174
- response = @chat_session.post('https://api.steampowered.com/ISteamWebUserPresenceOAuth/Poll/v1', {
175
- "umqid": @umqid,
176
- "message": @message_id,
177
- "pollid": 1,
178
- "sectimeout": 20,
179
- "secidletime": 0,
180
- "use_accountids": 0,
181
- "access_token": @oauth_token
182
- })
217
+ (return hash["steamid"]) if re == true
218
+ end
219
+
183
220
 
221
+ def steammachine_cookie(steamid)
222
+ value = nil
223
+ begin
224
+ value = @chat_session.cookie_jar.jar["steamcommunity.com"]["/"]["steamMachineAuth#{steamid}"].value
225
+ rescue
226
+ value = nil
227
+ end
228
+ if value == nil
229
+ begin
230
+ value = @chat_session.cookie_jar.jar["store.steampowered.com"]["/"]["steamMachineAuth#{steamid}"].value
231
+ rescue
232
+ value = nil
233
+ end
234
+ end
235
+
236
+ if value == nil
237
+ @chat_session.cookies.each { |c|
238
+ if c.name == "steamMachineAuth#{steamid}"
239
+ value = c.value
240
+ end
241
+ }
242
+ end
243
+ return value
184
244
  end
185
245
  end