mtproto 0.0.9 → 0.0.11
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 +4 -4
- data/data/tl-schema.json +42686 -0
- data/ext/aes_ige/extconf.rb +1 -1
- data/ext/factorization/extconf.rb +1 -1
- data/lib/mtproto/client/api/get_dialogs.rb +21 -0
- data/lib/mtproto/client/api/get_history.rb +20 -0
- data/lib/mtproto/client/api.rb +8 -0
- data/lib/mtproto/client/rpc.rb +4 -7
- data/lib/mtproto/client.rb +7 -7
- data/lib/mtproto/errors.rb +8 -0
- data/lib/mtproto/tl/constructor_names.rb +2271 -0
- data/lib/mtproto/tl/constructors.rb +91 -2261
- data/lib/mtproto/tl/object.rb +1 -1
- data/lib/mtproto/tl/objects/account_password.rb +2 -5
- data/lib/mtproto/tl/objects/authorization.rb +2 -5
- data/lib/mtproto/tl/objects/check_password.rb +2 -5
- data/lib/mtproto/tl/objects/client_dh_inner_data.rb +1 -3
- data/lib/mtproto/tl/objects/dh_gen_response.rb +3 -7
- data/lib/mtproto/tl/objects/dialogs.rb +453 -0
- data/lib/mtproto/tl/objects/export_login_token.rb +2 -5
- data/lib/mtproto/tl/objects/get_config.rb +1 -3
- data/lib/mtproto/tl/objects/get_dialogs.rb +51 -0
- data/lib/mtproto/tl/objects/get_difference.rb +1 -3
- data/lib/mtproto/tl/objects/get_history.rb +49 -0
- data/lib/mtproto/tl/objects/get_password.rb +1 -3
- data/lib/mtproto/tl/objects/get_state.rb +1 -3
- data/lib/mtproto/tl/objects/get_users.rb +3 -7
- data/lib/mtproto/{type → tl/objects}/gzip_packed.rb +1 -3
- data/lib/mtproto/tl/objects/help_config.rb +4 -5
- data/lib/mtproto/tl/objects/import_login_token.rb +1 -3
- data/lib/mtproto/tl/objects/init_connection.rb +1 -3
- data/lib/mtproto/tl/objects/invoke_with_layer.rb +1 -3
- data/lib/mtproto/tl/objects/login_token.rb +3 -7
- data/lib/mtproto/{type → tl/objects}/message.rb +1 -1
- data/lib/mtproto/tl/objects/messages.rb +162 -0
- data/lib/mtproto/{type → tl/objects}/msg_container.rb +1 -3
- data/lib/mtproto/{type → tl/objects}/new_session_created.rb +1 -3
- data/lib/mtproto/tl/objects/pq_inner_data.rb +1 -4
- data/lib/mtproto/tl/objects/req_dh_params.rb +1 -3
- data/lib/mtproto/tl/objects/req_pq_multi.rb +1 -3
- data/lib/mtproto/tl/objects/res_pq.rb +2 -4
- data/lib/mtproto/{type → tl/objects}/rpc_error.rb +1 -3
- data/lib/mtproto/tl/objects/send_code.rb +2 -5
- data/lib/mtproto/tl/objects/sent_code.rb +4 -4
- data/lib/mtproto/tl/objects/server_dh_inner_data.rb +3 -3
- data/lib/mtproto/tl/objects/server_dh_params.rb +3 -3
- data/lib/mtproto/tl/objects/set_client_dh_params.rb +1 -3
- data/lib/mtproto/tl/objects/sign_in.rb +1 -3
- data/lib/mtproto/tl/objects/update.rb +3 -6
- data/lib/mtproto/tl/objects/update_short.rb +0 -2
- data/lib/mtproto/tl/objects/update_short_message.rb +0 -2
- data/lib/mtproto/tl/objects/updates_difference.rb +6 -11
- data/lib/mtproto/tl/objects/updates_state.rb +1 -3
- data/lib/mtproto/tl/objects/users.rb +2 -5
- data/lib/mtproto/tl/schema.rb +102 -0
- data/lib/mtproto/version.rb +1 -1
- data/lib/mtproto.rb +6 -10
- metadata +15 -11
- data/lib/mtproto/type/bad_msg_notification.rb +0 -46
- data/lib/mtproto/type/client_dh_inner_data.rb +0 -29
- data/lib/mtproto/type/pq_inner_data.rb +0 -41
- data/lib/mtproto/type/serializer.rb +0 -55
- data/lib/mtproto/type/server_dh_inner_data.rb +0 -85
data/ext/aes_ige/extconf.rb
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../tl/objects/get_dialogs'
|
|
4
|
+
require_relative '../../tl/objects/dialogs'
|
|
5
|
+
|
|
6
|
+
module MTProto
|
|
7
|
+
class Client
|
|
8
|
+
class API
|
|
9
|
+
def get_dialogs(offset_date: 0, offset_id: 0, offset_peer: nil, limit: 100, exclude_pinned: false, folder_id: nil)
|
|
10
|
+
rpc_call(
|
|
11
|
+
TL::GetDialogs.new(
|
|
12
|
+
offset_date: offset_date, offset_id: offset_id,
|
|
13
|
+
offset_peer: offset_peer, limit: limit,
|
|
14
|
+
exclude_pinned: exclude_pinned, folder_id: folder_id
|
|
15
|
+
),
|
|
16
|
+
TL::Dialogs
|
|
17
|
+
).body
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../tl/objects/get_history'
|
|
4
|
+
require_relative '../../tl/objects/messages'
|
|
5
|
+
|
|
6
|
+
module MTProto
|
|
7
|
+
class Client
|
|
8
|
+
class API
|
|
9
|
+
def get_history(peer:, offset_id: 0, offset_date: 0, add_offset: 0, limit: 100, max_id: 0, min_id: 0)
|
|
10
|
+
rpc_call(
|
|
11
|
+
TL::GetHistory.new(
|
|
12
|
+
peer: peer, offset_id: offset_id, offset_date: offset_date,
|
|
13
|
+
add_offset: add_offset, limit: limit, max_id: max_id, min_id: min_id
|
|
14
|
+
),
|
|
15
|
+
TL::Messages
|
|
16
|
+
).body
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/mtproto/client/api.rb
CHANGED
|
@@ -6,6 +6,8 @@ require_relative 'api/export_login_token'
|
|
|
6
6
|
require_relative 'api/import_login_token'
|
|
7
7
|
require_relative 'api/check_password'
|
|
8
8
|
require_relative 'api/get_users'
|
|
9
|
+
require_relative 'api/get_dialogs'
|
|
10
|
+
require_relative 'api/get_history'
|
|
9
11
|
require_relative 'api/get_updates_state'
|
|
10
12
|
require_relative 'api/get_updates_difference'
|
|
11
13
|
|
|
@@ -22,6 +24,12 @@ module MTProto
|
|
|
22
24
|
response = @client.rpc.call(request, response_class)
|
|
23
25
|
response.wait!(@client.timeout)
|
|
24
26
|
response
|
|
27
|
+
rescue RpcError => e
|
|
28
|
+
raise unless e.flood_wait?
|
|
29
|
+
|
|
30
|
+
warn "[MTProto] FLOOD_WAIT: retrying in #{e.flood_wait_seconds}s..."
|
|
31
|
+
sleep(e.flood_wait_seconds)
|
|
32
|
+
retry
|
|
25
33
|
end
|
|
26
34
|
end
|
|
27
35
|
end
|
data/lib/mtproto/client/rpc.rb
CHANGED
|
@@ -6,9 +6,6 @@ require_relative 'rpc/response'
|
|
|
6
6
|
module MTProto
|
|
7
7
|
class Client
|
|
8
8
|
class RPC
|
|
9
|
-
CONSTRUCTOR_RPC_RESULT = 0xf35c6d01
|
|
10
|
-
CONSTRUCTOR_BAD_SERVER_SALT = 0xedab447b
|
|
11
|
-
|
|
12
9
|
attr_reader :pending_requests
|
|
13
10
|
|
|
14
11
|
def initialize(client)
|
|
@@ -48,16 +45,16 @@ module MTProto
|
|
|
48
45
|
result = response_body[12..]
|
|
49
46
|
|
|
50
47
|
result_constructor = result[0, 4].unpack1('L<')
|
|
51
|
-
if result_constructor ==
|
|
52
|
-
result =
|
|
48
|
+
if result_constructor == TL::Constructors::GZIP_PACKED
|
|
49
|
+
result = TL::GzipPacked.unpack(result)
|
|
53
50
|
result_constructor = result[0, 4].unpack1('L<')
|
|
54
51
|
end
|
|
55
52
|
|
|
56
53
|
response = @pending_requests.delete(req_msg_id)
|
|
57
54
|
return unless response
|
|
58
55
|
|
|
59
|
-
if result_constructor ==
|
|
60
|
-
error =
|
|
56
|
+
if result_constructor == TL::Constructors::RPC_ERROR
|
|
57
|
+
error = TL::RpcError.deserialize(result)
|
|
61
58
|
response.signal_error(RpcError.new(error.error_code, error.error_message))
|
|
62
59
|
else
|
|
63
60
|
response.signal(result)
|
data/lib/mtproto/client.rb
CHANGED
|
@@ -8,7 +8,7 @@ require 'async/condition'
|
|
|
8
8
|
require_relative 'transport/tcp_connection'
|
|
9
9
|
require_relative 'transport/connection'
|
|
10
10
|
require_relative 'transport/abridged_packet_codec'
|
|
11
|
-
require_relative '
|
|
11
|
+
require_relative 'tl/objects/message'
|
|
12
12
|
require_relative 'client/rpc'
|
|
13
13
|
require_relative 'client/api'
|
|
14
14
|
require_relative 'tl/objects/invoke_with_layer'
|
|
@@ -226,13 +226,13 @@ module MTProto
|
|
|
226
226
|
constructor = response_body[0, 4].unpack1('L<')
|
|
227
227
|
|
|
228
228
|
case constructor
|
|
229
|
-
when
|
|
229
|
+
when TL::Constructors::BAD_SERVER_SALT
|
|
230
230
|
rpc.handle_bad_server_salt(response_body, self)
|
|
231
|
-
when
|
|
231
|
+
when TL::Constructors::NEW_SESSION_CREATED
|
|
232
232
|
handle_new_session(response_body)
|
|
233
|
-
when
|
|
233
|
+
when TL::Constructors::MSG_CONTAINER
|
|
234
234
|
handle_container(response_body)
|
|
235
|
-
when
|
|
235
|
+
when TL::Constructors::RPC_RESULT
|
|
236
236
|
rpc.handle_rpc_result(response_body)
|
|
237
237
|
else
|
|
238
238
|
@on_update_callbacks.each { |cb| cb.call(constructor, response_body) }
|
|
@@ -240,12 +240,12 @@ module MTProto
|
|
|
240
240
|
end
|
|
241
241
|
|
|
242
242
|
def handle_new_session(response_body)
|
|
243
|
-
session_info =
|
|
243
|
+
session_info = TL::NewSessionCreated.deserialize(response_body)
|
|
244
244
|
@server_salt = session_info.server_salt
|
|
245
245
|
end
|
|
246
246
|
|
|
247
247
|
def handle_container(response_body)
|
|
248
|
-
container =
|
|
248
|
+
container = TL::MsgContainer.deserialize(response_body)
|
|
249
249
|
|
|
250
250
|
container.messages.each do |msg|
|
|
251
251
|
process_message(msg[:body])
|
data/lib/mtproto/errors.rb
CHANGED
|
@@ -23,6 +23,14 @@ module MTProto
|
|
|
23
23
|
@error_message = error_message
|
|
24
24
|
super("RPC Error #{error_code}: #{error_message}")
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
def flood_wait?
|
|
28
|
+
error_message&.start_with?('FLOOD_WAIT_')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def flood_wait_seconds
|
|
32
|
+
error_message&.match(/FLOOD_WAIT_(\d+)/)&.[](1)&.to_i
|
|
33
|
+
end
|
|
26
34
|
end
|
|
27
35
|
|
|
28
36
|
class UnexpectedConstructorError < Error
|