mtproto 0.0.13 → 0.0.14

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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/FUTURE.md +9 -0
  3. data/docs/test_architecture_level1.md +237 -0
  4. data/lib/mtproto/auth_key_generator.rb +5 -5
  5. data/lib/mtproto/client/api/get_contacts.rb +14 -0
  6. data/lib/mtproto/client/api/send_message.rb +15 -0
  7. data/lib/mtproto/client/api.rb +2 -0
  8. data/lib/mtproto/client/rpc/response.rb +1 -1
  9. data/lib/mtproto/client/rpc.rb +2 -2
  10. data/lib/mtproto/client.rb +28 -18
  11. data/lib/mtproto/tl/constructors.rb +26 -0
  12. data/lib/mtproto/tl/object.rb +1 -1
  13. data/lib/mtproto/tl/objects/account_password.rb +1 -1
  14. data/lib/mtproto/tl/objects/authorization.rb +1 -1
  15. data/lib/mtproto/tl/objects/channels_create_channel.rb +48 -0
  16. data/lib/mtproto/tl/objects/channels_delete_messages.rb +32 -0
  17. data/lib/mtproto/tl/objects/channels_delete_participant_history.rb +34 -0
  18. data/lib/mtproto/tl/objects/channels_edit_banned.rb +54 -0
  19. data/lib/mtproto/tl/objects/channels_get_messages.rb +33 -0
  20. data/lib/mtproto/tl/objects/channels_get_participant.rb +36 -0
  21. data/lib/mtproto/tl/objects/channels_join_channel.rb +22 -0
  22. data/lib/mtproto/tl/objects/channels_leave_channel.rb +22 -0
  23. data/lib/mtproto/tl/objects/channels_report_spam.rb +37 -0
  24. data/lib/mtproto/tl/objects/check_password.rb +1 -1
  25. data/lib/mtproto/tl/objects/client_dh_inner_data.rb +1 -1
  26. data/lib/mtproto/tl/objects/contacts.rb +156 -0
  27. data/lib/mtproto/tl/objects/delete_messages.rb +25 -0
  28. data/lib/mtproto/tl/objects/dh_gen_response.rb +1 -1
  29. data/lib/mtproto/tl/objects/dialogs.rb +8 -4
  30. data/lib/mtproto/tl/objects/edit_message.rb +58 -0
  31. data/lib/mtproto/tl/objects/export_login_token.rb +1 -1
  32. data/lib/mtproto/tl/objects/forward_messages.rb +49 -0
  33. data/lib/mtproto/tl/objects/get_channel_difference.rb +41 -0
  34. data/lib/mtproto/tl/objects/get_config.rb +1 -1
  35. data/lib/mtproto/tl/objects/get_contacts.rb +17 -0
  36. data/lib/mtproto/tl/objects/get_dialogs.rb +1 -1
  37. data/lib/mtproto/tl/objects/get_difference.rb +1 -1
  38. data/lib/mtproto/tl/objects/get_file.rb +54 -0
  39. data/lib/mtproto/tl/objects/get_full_channel.rb +29 -0
  40. data/lib/mtproto/tl/objects/get_full_user.rb +28 -0
  41. data/lib/mtproto/tl/objects/get_history.rb +1 -1
  42. data/lib/mtproto/tl/objects/get_messages_reactions.rb +39 -0
  43. data/lib/mtproto/tl/objects/get_password.rb +1 -1
  44. data/lib/mtproto/tl/objects/get_state.rb +1 -1
  45. data/lib/mtproto/tl/objects/get_users.rb +1 -1
  46. data/lib/mtproto/tl/objects/help_config.rb +1 -1
  47. data/lib/mtproto/tl/objects/import_bot_authorization.rb +44 -0
  48. data/lib/mtproto/tl/objects/import_login_token.rb +1 -1
  49. data/lib/mtproto/tl/objects/init_connection.rb +2 -2
  50. data/lib/mtproto/tl/objects/invite_to_channel.rb +35 -0
  51. data/lib/mtproto/tl/objects/invoke_with_layer.rb +2 -2
  52. data/lib/mtproto/tl/objects/login_token.rb +2 -2
  53. data/lib/mtproto/tl/objects/messages.rb +1 -1
  54. data/lib/mtproto/tl/objects/pq_inner_data.rb +1 -1
  55. data/lib/mtproto/tl/objects/raw_response.rb +29 -0
  56. data/lib/mtproto/tl/objects/req_dh_params.rb +1 -1
  57. data/lib/mtproto/tl/objects/req_pq_multi.rb +1 -1
  58. data/lib/mtproto/tl/objects/res_pq.rb +1 -1
  59. data/lib/mtproto/tl/objects/resolve_username.rb +40 -0
  60. data/lib/mtproto/tl/objects/save_file_part.rb +40 -0
  61. data/lib/mtproto/tl/objects/send_code.rb +1 -1
  62. data/lib/mtproto/tl/objects/send_media.rb +85 -0
  63. data/lib/mtproto/tl/objects/send_message.rb +70 -0
  64. data/lib/mtproto/tl/objects/send_reaction.rb +68 -0
  65. data/lib/mtproto/tl/objects/sent_code.rb +1 -1
  66. data/lib/mtproto/tl/objects/server_dh_inner_data.rb +1 -1
  67. data/lib/mtproto/tl/objects/server_dh_params.rb +1 -1
  68. data/lib/mtproto/tl/objects/set_client_dh_params.rb +1 -1
  69. data/lib/mtproto/tl/objects/sign_in.rb +1 -1
  70. data/lib/mtproto/tl/objects/update.rb +1 -1
  71. data/lib/mtproto/tl/objects/update_short.rb +2 -2
  72. data/lib/mtproto/tl/objects/update_short_message.rb +1 -1
  73. data/lib/mtproto/tl/objects/update_short_sent_message.rb +36 -0
  74. data/lib/mtproto/tl/objects/update_username.rb +39 -0
  75. data/lib/mtproto/tl/objects/updates_difference.rb +2 -2
  76. data/lib/mtproto/tl/objects/updates_state.rb +1 -1
  77. data/lib/mtproto/tl/objects/users.rb +1 -1
  78. data/lib/mtproto/version.rb +1 -1
  79. metadata +36 -1
@@ -13,7 +13,7 @@ module MTProto
13
13
  @timeout = timeout
14
14
  end
15
15
 
16
- def self.parse(data)
16
+ def self.deserialize(data)
17
17
  constructor = data[0, 4].unpack1('L<')
18
18
  raise UnexpectedConstructorError, constructor unless constructor == Constructors::AUTH_SENT_CODE
19
19
 
@@ -5,7 +5,7 @@ module MTProto
5
5
  class ServerDHInnerData
6
6
  attr_reader :nonce, :server_nonce, :g, :dh_prime, :g_a, :server_time
7
7
 
8
- def self.parse(bytes)
8
+ def self.deserialize(bytes)
9
9
  constructor = bytes[0, 4].unpack1('L<')
10
10
  unless constructor == Constructors::SERVER_DH_INNER_DATA
11
11
  raise "Unexpected constructor: 0x#{constructor.to_s(16)}"
@@ -7,7 +7,7 @@ module MTProto
7
7
 
8
8
  attr_reader :nonce, :server_nonce, :encrypted_answer
9
9
 
10
- def self.parse(message)
10
+ def self.deserialize(message)
11
11
  data = message.body
12
12
  constructor = b_u32(data[0, 4])
13
13
  unless constructor == Constructors::SERVER_DH_PARAMS_OK
@@ -16,7 +16,7 @@ module MTProto
16
16
  @encrypted_data = encrypted_data
17
17
  end
18
18
 
19
- def body
19
+ def serialize
20
20
  result = u32_b(Constructors::SET_CLIENT_DH_PARAMS)
21
21
  result += @nonce.bytes
22
22
  result += @server_nonce.bytes
@@ -13,7 +13,7 @@ module MTProto
13
13
  @phone_code = phone_code
14
14
  end
15
15
 
16
- def body
16
+ def serialize
17
17
  flags = 1 << 0
18
18
 
19
19
  u32_b(Constructors::AUTH_SIGN_IN) +
@@ -10,7 +10,7 @@ module MTProto
10
10
  @text = text
11
11
  end
12
12
 
13
- def self.parse(bytes)
13
+ def self.deserialize(bytes)
14
14
  constructor_id = bytes[0, 4].unpack1('L<')
15
15
  type = type_name(constructor_id)
16
16
 
@@ -10,9 +10,9 @@ module MTProto
10
10
  @date = date
11
11
  end
12
12
 
13
- def self.parse(bytes)
13
+ def self.deserialize(bytes)
14
14
  date = bytes[-4, 4].unpack1('l<')
15
- update = Update.parse(bytes[4...-4])
15
+ update = Update.deserialize(bytes[4...-4])
16
16
  new(update, date)
17
17
  end
18
18
  end
@@ -23,7 +23,7 @@ module MTProto
23
23
  flags & (1 << 4) != 0
24
24
  end
25
25
 
26
- def self.parse(bytes)
26
+ def self.deserialize(bytes)
27
27
  offset = 4 # skip constructor
28
28
  flags = bytes[offset, 4].unpack1('L<')
29
29
  offset += 4
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MTProto
4
+ module TL
5
+ class UpdateShortSentMessage
6
+ attr_reader :flags, :id, :pts, :pts_count, :date
7
+
8
+ def initialize(flags:, id:, pts:, pts_count:, date:)
9
+ @flags = flags
10
+ @id = id
11
+ @pts = pts
12
+ @pts_count = pts_count
13
+ @date = date
14
+ end
15
+
16
+ def out?
17
+ flags & (1 << 1) != 0
18
+ end
19
+
20
+ def self.deserialize(bytes)
21
+ offset = 4 # skip constructor
22
+ flags = bytes[offset, 4].unpack1('L<')
23
+ offset += 4
24
+ id = bytes[offset, 4].unpack1('l<')
25
+ offset += 4
26
+ pts = bytes[offset, 4].unpack1('l<')
27
+ offset += 4
28
+ pts_count = bytes[offset, 4].unpack1('l<')
29
+ offset += 4
30
+ date = bytes[offset, 4].unpack1('l<')
31
+
32
+ new(flags: flags, id: id, pts: pts, pts_count: pts_count, date: date)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MTProto
4
+ module TL
5
+ class UpdateUsername
6
+ include Binary
7
+
8
+ CONSTRUCTOR = 0x3e0bdd7c
9
+
10
+ def initialize(username:)
11
+ @username = username
12
+ end
13
+
14
+ def serialize
15
+ result = u32_b(CONSTRUCTOR)
16
+ result += serialize_tl_string(@username)
17
+ result
18
+ end
19
+
20
+ private
21
+
22
+ def serialize_tl_string(str)
23
+ bytes = str.encode('UTF-8').bytes
24
+ length = bytes.length
25
+
26
+ if length <= 253
27
+ [length] + bytes + padding(length + 1)
28
+ else
29
+ [254] + u32_b(length)[0, 3] + bytes + padding(length + 4)
30
+ end
31
+ end
32
+
33
+ def padding(current_length)
34
+ pad_length = (4 - (current_length % 4)) % 4
35
+ [0] * pad_length
36
+ end
37
+ end
38
+ end
39
+ end
@@ -22,7 +22,7 @@ module MTProto
22
22
  @schema ||= Schema.new(SCHEMA_PATH)
23
23
  end
24
24
 
25
- def self.parse(data)
25
+ def self.deserialize(data)
26
26
  constructor = data[0, 4].unpack1('L<')
27
27
 
28
28
  case constructor
@@ -62,7 +62,7 @@ module MTProto
62
62
  offset = schema.skip_vector(data, offset) # other_updates
63
63
  offset = schema.skip_vector(data, offset) # chats
64
64
  offset = schema.skip_vector(data, offset) # users
65
- state = UpdatesState.parse(data[offset..])
65
+ state = UpdatesState.deserialize(data[offset..])
66
66
 
67
67
  new(
68
68
  type: constructor == Constructors::UPDATES_DIFFERENCE ? :difference : :slice,
@@ -13,7 +13,7 @@ module MTProto
13
13
  @unread_count = unread_count
14
14
  end
15
15
 
16
- def self.parse(data)
16
+ def self.deserialize(data)
17
17
  constructor = data[0, 4].unpack1('L<')
18
18
  raise UnexpectedConstructorError, constructor unless constructor == Constructors::UPDATES_STATE
19
19
 
@@ -6,7 +6,7 @@ module MTProto
6
6
  User = Struct.new(:id, :access_hash, :first_name, :last_name, :username, :phone, :flags, :flags2,
7
7
  keyword_init: true)
8
8
 
9
- def self.parse(data)
9
+ def self.deserialize(data)
10
10
  constructor = data[0, 4].unpack1('L<')
11
11
  raise "Expected Vector constructor, got 0x#{constructor.to_s(16)}" unless constructor == Constructors::VECTOR
12
12
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MTProto
4
- VERSION = '0.0.13'
4
+ VERSION = '0.0.14'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mtproto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Levenkov
@@ -49,8 +49,10 @@ extra_rdoc_files: []
49
49
  files:
50
50
  - ".env.example"
51
51
  - ".ruby-version"
52
+ - FUTURE.md
52
53
  - Rakefile
53
54
  - data/tl-schema.json
55
+ - docs/test_architecture_level1.md
54
56
  - ext/aes_ige/aes_ige.c
55
57
  - ext/aes_ige/extconf.rb
56
58
  - ext/factorization/extconf.rb
@@ -62,6 +64,7 @@ files:
62
64
  - lib/mtproto/client/api.rb
63
65
  - lib/mtproto/client/api/check_password.rb
64
66
  - lib/mtproto/client/api/export_login_token.rb
67
+ - lib/mtproto/client/api/get_contacts.rb
65
68
  - lib/mtproto/client/api/get_dialogs.rb
66
69
  - lib/mtproto/client/api/get_history.rb
67
70
  - lib/mtproto/client/api/get_updates_difference.rb
@@ -69,6 +72,7 @@ files:
69
72
  - lib/mtproto/client/api/get_users.rb
70
73
  - lib/mtproto/client/api/import_login_token.rb
71
74
  - lib/mtproto/client/api/send_code.rb
75
+ - lib/mtproto/client/api/send_message.rb
72
76
  - lib/mtproto/client/api/sign_in.rb
73
77
  - lib/mtproto/client/rpc.rb
74
78
  - lib/mtproto/client/rpc/response.rb
@@ -92,22 +96,43 @@ files:
92
96
  - lib/mtproto/tl/object.rb
93
97
  - lib/mtproto/tl/objects/account_password.rb
94
98
  - lib/mtproto/tl/objects/authorization.rb
99
+ - lib/mtproto/tl/objects/channels_create_channel.rb
100
+ - lib/mtproto/tl/objects/channels_delete_messages.rb
101
+ - lib/mtproto/tl/objects/channels_delete_participant_history.rb
102
+ - lib/mtproto/tl/objects/channels_edit_banned.rb
103
+ - lib/mtproto/tl/objects/channels_get_messages.rb
104
+ - lib/mtproto/tl/objects/channels_get_participant.rb
105
+ - lib/mtproto/tl/objects/channels_join_channel.rb
106
+ - lib/mtproto/tl/objects/channels_leave_channel.rb
107
+ - lib/mtproto/tl/objects/channels_report_spam.rb
95
108
  - lib/mtproto/tl/objects/check_password.rb
96
109
  - lib/mtproto/tl/objects/client_dh_inner_data.rb
110
+ - lib/mtproto/tl/objects/contacts.rb
111
+ - lib/mtproto/tl/objects/delete_messages.rb
97
112
  - lib/mtproto/tl/objects/dh_gen_response.rb
98
113
  - lib/mtproto/tl/objects/dialogs.rb
114
+ - lib/mtproto/tl/objects/edit_message.rb
99
115
  - lib/mtproto/tl/objects/export_login_token.rb
116
+ - lib/mtproto/tl/objects/forward_messages.rb
117
+ - lib/mtproto/tl/objects/get_channel_difference.rb
100
118
  - lib/mtproto/tl/objects/get_config.rb
119
+ - lib/mtproto/tl/objects/get_contacts.rb
101
120
  - lib/mtproto/tl/objects/get_dialogs.rb
102
121
  - lib/mtproto/tl/objects/get_difference.rb
122
+ - lib/mtproto/tl/objects/get_file.rb
123
+ - lib/mtproto/tl/objects/get_full_channel.rb
124
+ - lib/mtproto/tl/objects/get_full_user.rb
103
125
  - lib/mtproto/tl/objects/get_history.rb
126
+ - lib/mtproto/tl/objects/get_messages_reactions.rb
104
127
  - lib/mtproto/tl/objects/get_password.rb
105
128
  - lib/mtproto/tl/objects/get_state.rb
106
129
  - lib/mtproto/tl/objects/get_users.rb
107
130
  - lib/mtproto/tl/objects/gzip_packed.rb
108
131
  - lib/mtproto/tl/objects/help_config.rb
132
+ - lib/mtproto/tl/objects/import_bot_authorization.rb
109
133
  - lib/mtproto/tl/objects/import_login_token.rb
110
134
  - lib/mtproto/tl/objects/init_connection.rb
135
+ - lib/mtproto/tl/objects/invite_to_channel.rb
111
136
  - lib/mtproto/tl/objects/invoke_with_layer.rb
112
137
  - lib/mtproto/tl/objects/login_token.rb
113
138
  - lib/mtproto/tl/objects/message.rb
@@ -115,11 +140,17 @@ files:
115
140
  - lib/mtproto/tl/objects/msg_container.rb
116
141
  - lib/mtproto/tl/objects/new_session_created.rb
117
142
  - lib/mtproto/tl/objects/pq_inner_data.rb
143
+ - lib/mtproto/tl/objects/raw_response.rb
118
144
  - lib/mtproto/tl/objects/req_dh_params.rb
119
145
  - lib/mtproto/tl/objects/req_pq_multi.rb
120
146
  - lib/mtproto/tl/objects/res_pq.rb
147
+ - lib/mtproto/tl/objects/resolve_username.rb
121
148
  - lib/mtproto/tl/objects/rpc_error.rb
149
+ - lib/mtproto/tl/objects/save_file_part.rb
122
150
  - lib/mtproto/tl/objects/send_code.rb
151
+ - lib/mtproto/tl/objects/send_media.rb
152
+ - lib/mtproto/tl/objects/send_message.rb
153
+ - lib/mtproto/tl/objects/send_reaction.rb
123
154
  - lib/mtproto/tl/objects/sent_code.rb
124
155
  - lib/mtproto/tl/objects/server_dh_inner_data.rb
125
156
  - lib/mtproto/tl/objects/server_dh_params.rb
@@ -128,6 +159,8 @@ files:
128
159
  - lib/mtproto/tl/objects/update.rb
129
160
  - lib/mtproto/tl/objects/update_short.rb
130
161
  - lib/mtproto/tl/objects/update_short_message.rb
162
+ - lib/mtproto/tl/objects/update_short_sent_message.rb
163
+ - lib/mtproto/tl/objects/update_username.rb
131
164
  - lib/mtproto/tl/objects/updates_difference.rb
132
165
  - lib/mtproto/tl/objects/updates_state.rb
133
166
  - lib/mtproto/tl/objects/users.rb
@@ -151,6 +184,8 @@ metadata:
151
184
  rdoc_options: []
152
185
  require_paths:
153
186
  - lib
187
+ - ext/aes_ige
188
+ - ext/factorization
154
189
  required_ruby_version: !ruby/object:Gem::Requirement
155
190
  requirements:
156
191
  - - ">="