steam-trade 0.1.4 → 0.1.7

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: 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