grammerb 0.1.0-x86_64-linux

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.
@@ -0,0 +1,20 @@
1
+ module Grammerb
2
+ class Conversation
3
+ class TimeoutError < Errors::Error
4
+ end
5
+
6
+ attr_reader chat_id: String
7
+
8
+ def initialize: (Client client, String chat_id, ?timeout: Integer) -> void
9
+ def send_message: (String text, **untyped opts) -> Types::Message
10
+ def get_response: (?timeout: Integer?) -> Events::NewMessage
11
+ def get_edit: (?timeout: Integer?) -> Events::MessageEdited
12
+ def get_callback: (?timeout: Integer?) -> Events::CallbackQuery
13
+ def wait_event: (Class event_class, ?timeout: Integer?) -> Events::Event
14
+ def mark_read: () -> void
15
+ def cancel: () -> void
16
+
17
+ # Internal — called by Client#dispatch_event
18
+ def _push: (Events::Event event) -> void
19
+ end
20
+ end
@@ -0,0 +1,50 @@
1
+ module Grammerb
2
+ module Errors
3
+ class Error < StandardError
4
+ end
5
+
6
+ class ConnectionError < Error
7
+ end
8
+
9
+ class AuthError < Error
10
+ end
11
+
12
+ class NotConnectedError < Error
13
+ end
14
+
15
+ class RPCError < Error
16
+ attr_reader code: Integer
17
+ attr_reader message_text: String?
18
+ attr_reader value: Integer?
19
+
20
+ def initialize: (Integer code, ?String? message_text, ?value: Integer?) -> void
21
+ end
22
+
23
+ class FloodWait < RPCError
24
+ attr_reader seconds: Integer
25
+
26
+ def initialize: (Integer seconds) -> void
27
+ end
28
+
29
+ class UserNotFound < RPCError
30
+ def initialize: () -> void
31
+ end
32
+
33
+ class ChatWriteForbidden < RPCError
34
+ def initialize: () -> void
35
+ end
36
+
37
+ class PhoneNumberInvalid < RPCError
38
+ def initialize: () -> void
39
+ end
40
+
41
+ class SessionPasswordNeeded < RPCError
42
+ def initialize: () -> void
43
+ end
44
+
45
+ RPC_MAP: Hash[String, Class]
46
+ KIND_MAP: Hash[String, Class]
47
+
48
+ def self.from_native: (String msg) -> Error
49
+ end
50
+ end
@@ -0,0 +1,238 @@
1
+ module Grammerb
2
+ module Events
3
+ class Event
4
+ attr_reader raw: Hash[Symbol, untyped]
5
+ attr_accessor client: Client?
6
+
7
+ def initialize: (Hash[Symbol, untyped] raw) -> void
8
+ end
9
+
10
+ module MessageEvent
11
+ attr_reader message_id: Integer?
12
+ attr_reader text: String?
13
+ attr_reader chat_id: Integer?
14
+ attr_reader chat_name: String?
15
+ attr_reader sender_id: Integer?
16
+ attr_reader sender_name: String?
17
+ attr_reader date: Time?
18
+ attr_reader sender_is_bot: bool?
19
+ attr_reader chat_type: String?
20
+ attr_reader grouped_id: Integer?
21
+ attr_reader reply_to_message_id: Integer?
22
+ attr_reader media_type: String?
23
+ attr_reader media_id: Integer?
24
+ attr_reader media_file_name: String?
25
+ attr_reader media_mime_type: String?
26
+ attr_reader media_size: Integer?
27
+ attr_reader buttons: Array[Array[Types::Button]]?
28
+
29
+ def album?: () -> bool
30
+ def has_media?: () -> bool
31
+ def photo?: () -> bool
32
+ def document?: () -> bool
33
+ def sticker?: () -> bool
34
+ def has_buttons?: () -> bool
35
+ def edit: (String text, ?parse_mode: String?, ?buttons: button_rows?, ?reply_markup: reply_markup?) -> void
36
+ def delete: () -> void
37
+ def bot?: () -> bool
38
+ def private?: () -> bool
39
+ def group?: () -> bool
40
+ def channel?: () -> bool
41
+ end
42
+
43
+ class NewMessage < Event
44
+ include MessageEvent
45
+
46
+ def initialize: (Hash[Symbol, untyped] raw) -> void
47
+ def reply: (String text, **untyped opts) -> Types::Message?
48
+ def respond: (String text, **untyped opts) -> Types::Message?
49
+ def forward: (peer to_chat) -> void
50
+ end
51
+
52
+ class MessageEdited < Event
53
+ include MessageEvent
54
+
55
+ def initialize: (Hash[Symbol, untyped] raw) -> void
56
+ end
57
+
58
+ class MessageDeleted < Event
59
+ attr_reader deleted_ids: Array[Integer]
60
+ attr_reader chat_id: Integer?
61
+
62
+ def initialize: (Hash[Symbol, untyped] raw) -> void
63
+ end
64
+
65
+ class CallbackQuery < Event
66
+ attr_reader query_id: Integer?
67
+ attr_reader data: Array[Integer]?
68
+ attr_reader chat_id: Integer?
69
+ attr_reader sender_id: Integer?
70
+ attr_reader message_id: Integer?
71
+
72
+ def initialize: (Hash[Symbol, untyped] raw) -> void
73
+ def data_str: () -> String?
74
+ def answer: (?text: String?, ?alert: bool, ?cache_time: Integer?) -> void
75
+ def edit: (String text, ?parse_mode: String?, ?buttons: button_rows?, ?reply_markup: reply_markup?) -> void
76
+ def delete: () -> void
77
+ def reply: (String text, **untyped opts) -> Types::Message?
78
+ def respond: (String text, **untyped opts) -> Types::Message?
79
+ end
80
+
81
+ class InlineQuery < Event
82
+ attr_reader query_id: Integer?
83
+ attr_reader query: String?
84
+ attr_reader offset: String?
85
+ attr_reader sender_id: Integer?
86
+
87
+ def initialize: (Hash[Symbol, untyped] raw) -> void
88
+ def answer: (Array[Hash[Symbol, untyped]] results, ?cache_time: Integer?, ?is_personal: bool, ?next_offset: String?) -> void
89
+ end
90
+
91
+ class UpdateError < Event
92
+ attr_reader message: String?
93
+
94
+ def initialize: (Hash[Symbol, untyped] raw) -> void
95
+ end
96
+
97
+ class InlineSend < Event
98
+ attr_reader sender_id: Integer?
99
+ attr_reader query: String?
100
+ attr_reader result_id: String?
101
+
102
+ def initialize: (Hash[Symbol, untyped] raw) -> void
103
+ end
104
+
105
+ class PreCheckoutQuery < Event
106
+ attr_reader query_id: Integer?
107
+ attr_reader sender_id: Integer?
108
+ attr_reader currency: String?
109
+ attr_reader total_amount: Integer?
110
+ attr_reader invoice_payload: String?
111
+
112
+ def initialize: (Hash[Symbol, untyped] raw) -> void
113
+ def approve: () -> void
114
+ def reject: (?String error_message) -> void
115
+ end
116
+
117
+ class SuccessfulPayment < Event
118
+ attr_reader sender_id: Integer?
119
+ attr_reader currency: String?
120
+ attr_reader total_amount: Integer?
121
+ attr_reader invoice_payload: String?
122
+ attr_reader charge_id: String?
123
+
124
+ def initialize: (Hash[Symbol, untyped] raw) -> void
125
+ end
126
+
127
+ class Album < Event
128
+ attr_reader messages: Array[NewMessage]
129
+ attr_reader grouped_id: Integer?
130
+ attr_reader chat_id: Integer?
131
+ attr_reader chat_name: String?
132
+
133
+ def initialize: (Array[NewMessage] messages) -> void
134
+ def texts: () -> Array[String?]
135
+ def reply: (String text, **untyped opts) -> Types::Message?
136
+ def respond: (String text, **untyped opts) -> Types::Message?
137
+ end
138
+
139
+ class ChatAction < Event
140
+ attr_reader action_type: String?
141
+ attr_reader message_id: Integer?
142
+ attr_reader chat_id: Integer?
143
+ attr_reader chat_name: String?
144
+ attr_reader chat_type: String?
145
+ attr_reader sender_id: Integer?
146
+ attr_reader actor_id: Integer?
147
+ attr_reader user_ids: Array[Integer]
148
+ attr_reader new_title: String?
149
+ attr_reader pinned_message_id: Integer?
150
+ attr_reader game_score: Integer?
151
+ attr_reader date: Time?
152
+
153
+ def initialize: (Hash[Symbol, untyped] raw) -> void
154
+ def user_joined?: () -> bool
155
+ def user_added?: () -> bool
156
+ def user_kicked?: () -> bool
157
+ def user_left?: () -> bool
158
+ def title_changed?: () -> bool
159
+ def photo_changed?: () -> bool
160
+ def photo_deleted?: () -> bool
161
+ def pin_message?: () -> bool
162
+ def unpin?: () -> bool
163
+ def chat_created?: () -> bool
164
+ def channel_created?: () -> bool
165
+ def user_promoted?: () -> bool
166
+ def user_demoted?: () -> bool
167
+ def new_score?: () -> bool
168
+ def user_id: () -> Integer?
169
+ def added_by: () -> Integer?
170
+ def kicked_by: () -> Integer?
171
+ def reply: (String text, **untyped opts) -> Types::Message?
172
+ def respond: (String text, **untyped opts) -> Types::Message?
173
+ def delete: () -> void
174
+ end
175
+
176
+ class UserUpdate < Event
177
+ attr_reader sender_id: Integer?
178
+ attr_reader chat_id: Integer?
179
+ attr_reader user_status: String?
180
+ attr_reader last_seen: Time?
181
+ attr_reader online_until: Time?
182
+ attr_reader typing_action: String?
183
+
184
+ def initialize: (Hash[Symbol, untyped] raw) -> void
185
+ def online?: () -> bool
186
+ def offline?: () -> bool
187
+ def recently?: () -> bool
188
+ def within_weeks?: () -> bool
189
+ def within_months?: () -> bool
190
+ def typing?: () -> bool
191
+ def recording?: () -> bool
192
+ def uploading?: () -> bool
193
+ def playing?: () -> bool
194
+ def cancel?: () -> bool
195
+ def audio?: () -> bool
196
+ def video?: () -> bool
197
+ def round?: () -> bool
198
+ def document?: () -> bool
199
+ def photo?: () -> bool
200
+ def sticker?: () -> bool
201
+ def contact?: () -> bool
202
+ def geo?: () -> bool
203
+ alias user_id sender_id
204
+ end
205
+
206
+ class MessageRead < Event
207
+ attr_reader chat_id: Integer?
208
+ attr_reader max_id: Integer?
209
+ attr_reader outbox: bool
210
+ attr_reader unread_count: Integer?
211
+ attr_reader message_ids: Array[Integer]
212
+
213
+ def initialize: (Hash[Symbol, untyped] raw) -> void
214
+ def inbox?: () -> bool
215
+ def outbox?: () -> bool
216
+ def contents?: () -> bool
217
+ def is_read?: (Integer message_id) -> bool
218
+ def get_messages: () -> Array[untyped]
219
+ end
220
+
221
+ class RawUpdate < Event
222
+ end
223
+
224
+ class Handler
225
+ attr_reader event_class: Class
226
+ attr_reader pattern: (Regexp | String)?
227
+ attr_reader chats: Set[untyped]?
228
+ attr_reader block: Proc
229
+
230
+ def initialize: (Class event_class, ?pattern: (Regexp | String)?, ?chats: Set[untyped]?) { (Event) -> void } -> void
231
+ def matches?: (Event event) -> bool
232
+ end
233
+
234
+ TYPE_MAP: Hash[String, Class]
235
+
236
+ def self.from_raw: (Hash[Symbol, untyped] raw_hash) -> Event?
237
+ end
238
+ end
@@ -0,0 +1,246 @@
1
+ module Grammerb
2
+ module Types
3
+ class Button
4
+ attr_reader text: String
5
+ attr_reader callback_data: Array[Integer]?
6
+ attr_reader url: String?
7
+ attr_reader switch_inline: String?
8
+ attr_reader web_app_url: String?
9
+
10
+ def initialize: (Hash[Symbol, untyped] hash) -> void
11
+ def callback?: () -> bool
12
+ def url?: () -> bool
13
+ def web_app?: () -> bool
14
+ def data_str: () -> String?
15
+ def ==: (untyped other) -> bool
16
+ alias eql? ==
17
+ def hash: () -> Integer
18
+ def to_h: () -> Hash[Symbol, untyped]
19
+ def to_s: () -> String
20
+ end
21
+
22
+ class Message
23
+ attr_reader id: Integer
24
+ attr_reader text: String
25
+ attr_reader chat_id: Integer?
26
+ attr_reader chat_name: String?
27
+ attr_reader sender_id: Integer?
28
+ attr_reader sender_name: String?
29
+ attr_reader date: Time?
30
+ attr_reader chat_type: String?
31
+ attr_reader grouped_id: Integer?
32
+ attr_reader reply_to_message_id: Integer?
33
+ attr_reader buttons: Array[Array[Button]]?
34
+ attr_reader media_type: String?
35
+ attr_reader media_id: Integer?
36
+ attr_reader media_file_name: String?
37
+ attr_reader media_mime_type: String?
38
+ attr_reader media_size: Integer?
39
+ attr_reader media_duration: Float?
40
+ attr_reader media_width: Integer?
41
+ attr_reader media_height: Integer?
42
+ attr_reader media_sticker_emoji: String?
43
+ attr_accessor client: Client?
44
+ attr_accessor raw: Hash[Symbol, untyped]
45
+
46
+ def initialize: (Hash[Symbol, untyped] hash) -> void
47
+ def has_buttons?: () -> bool
48
+ def has_media?: () -> bool
49
+ def photo?: () -> bool
50
+ def document?: () -> bool
51
+ def sticker?: () -> bool
52
+ def poll?: () -> bool
53
+ def album?: () -> bool
54
+ def peer_id: () -> String
55
+ def reply: (String text, **untyped opts) -> Types::Message
56
+ def edit: (String new_text, ?parse_mode: String?, ?buttons: button_rows?, ?reply_markup: reply_markup?) -> void
57
+ def delete: () -> void
58
+ def forward: (peer to_chat) -> void
59
+ def pin: () -> void
60
+ def download: (String path) ?{ (Integer downloaded, Integer? total) -> void } -> void
61
+ def ==: (untyped other) -> bool
62
+ alias eql? ==
63
+ def hash: () -> Integer
64
+ def to_h: () -> Hash[Symbol, untyped]
65
+ def to_s: () -> String
66
+ end
67
+
68
+ class User
69
+ attr_reader id: Integer
70
+ attr_reader first_name: String?
71
+ attr_reader last_name: String?
72
+ attr_reader username: String?
73
+ attr_reader phone: String?
74
+ attr_reader bot: bool?
75
+
76
+ def initialize: (Hash[Symbol, untyped] hash) -> void
77
+ def bot?: () -> bool
78
+ def full_name: () -> String
79
+ def peer_id: () -> String
80
+ def ==: (untyped other) -> bool
81
+ alias eql? ==
82
+ def hash: () -> Integer
83
+ def to_h: () -> Hash[Symbol, untyped]
84
+ def to_s: () -> String
85
+ end
86
+
87
+ class Dialog
88
+ attr_reader name: String?
89
+ attr_reader id: Integer
90
+ attr_reader peer_type: String?
91
+ attr_reader unread_count: Integer?
92
+ attr_reader last_message_text: String?
93
+
94
+ def initialize: (Hash[Symbol, untyped] hash) -> void
95
+ def peer_id: () -> String
96
+ def ==: (untyped other) -> bool
97
+ alias eql? ==
98
+ def hash: () -> Integer
99
+ def to_h: () -> Hash[Symbol, untyped]
100
+ def to_s: () -> String
101
+ end
102
+
103
+ class Participant
104
+ attr_reader id: Integer
105
+ attr_reader first_name: String?
106
+ attr_reader last_name: String?
107
+ attr_reader username: String?
108
+
109
+ def initialize: (Hash[Symbol, untyped] hash) -> void
110
+ def full_name: () -> String
111
+ def peer_id: () -> String
112
+ def ==: (untyped other) -> bool
113
+ alias eql? ==
114
+ def hash: () -> Integer
115
+ def to_h: () -> Hash[Symbol, untyped]
116
+ def to_s: () -> String
117
+ end
118
+
119
+ class Peer
120
+ attr_reader id: Integer
121
+ attr_reader name: String?
122
+ attr_reader peer_type: String?
123
+
124
+ def initialize: (Hash[Symbol, untyped] hash) -> void
125
+ def peer_id: () -> String
126
+ def ==: (untyped other) -> bool
127
+ alias eql? ==
128
+ def hash: () -> Integer
129
+ def to_h: () -> Hash[Symbol, untyped]
130
+ def to_s: () -> String
131
+ end
132
+
133
+ class Permissions
134
+ attr_reader is_admin: bool?
135
+ attr_reader is_creator: bool?
136
+ attr_reader is_banned: bool?
137
+ attr_reader has_default_permissions: bool?
138
+
139
+ def initialize: (Hash[Symbol, untyped] hash) -> void
140
+ def admin?: () -> bool
141
+ def creator?: () -> bool
142
+ def banned?: () -> bool
143
+ def ==: (untyped other) -> bool
144
+ alias eql? ==
145
+ def hash: () -> Integer
146
+ def to_h: () -> Hash[Symbol, untyped]
147
+ end
148
+
149
+ class PollResults
150
+ attr_reader total_voters: Integer?
151
+ attr_reader results: Array[PollOption]
152
+ attr_reader solution: String?
153
+
154
+ def initialize: (Hash[Symbol, untyped] hash) -> void
155
+ def to_h: () -> Hash[Symbol, untyped]
156
+ def to_s: () -> String
157
+ end
158
+
159
+ class PollOption
160
+ attr_reader option: String?
161
+ attr_reader voters: Integer?
162
+ attr_reader chosen: bool?
163
+ attr_reader correct: bool?
164
+
165
+ def initialize: (Hash[Symbol, untyped] hash) -> void
166
+ def chosen?: () -> bool
167
+ def correct?: () -> bool
168
+ def to_h: () -> Hash[Symbol, untyped]
169
+ def to_s: () -> String
170
+ end
171
+
172
+ class PollVotes
173
+ attr_reader count: Integer?
174
+ attr_reader votes: Array[PollVote]
175
+ attr_reader next_offset: String?
176
+
177
+ def initialize: (Hash[Symbol, untyped] hash) -> void
178
+ def to_h: () -> Hash[Symbol, untyped]
179
+ def to_s: () -> String
180
+ end
181
+
182
+ class PollVote
183
+ attr_reader peer_id: Integer?
184
+ attr_reader options: Array[Integer]?
185
+ attr_reader date: Time?
186
+
187
+ def initialize: (Hash[Symbol, untyped] hash) -> void
188
+ def to_h: () -> Hash[Symbol, untyped]
189
+ def to_s: () -> String
190
+ end
191
+
192
+ class Draft
193
+ attr_reader peer_id: Integer?
194
+ attr_reader text: String?
195
+ attr_reader date: Time?
196
+ attr_reader reply_to_msg_id: Integer?
197
+
198
+ def initialize: (Hash[Symbol, untyped] hash) -> void
199
+ def to_h: () -> Hash[Symbol, untyped]
200
+ def to_s: () -> String
201
+ end
202
+
203
+ class AdminLogEvent
204
+ attr_reader id: Integer
205
+ attr_reader date: Time?
206
+ attr_reader user_id: Integer?
207
+ attr_reader action: String?
208
+
209
+ def initialize: (Hash[Symbol, untyped] hash) -> void
210
+ def to_h: () -> Hash[Symbol, untyped]
211
+ def to_s: () -> String
212
+ end
213
+
214
+ class InlineResult
215
+ attr_reader id: String?
216
+ attr_reader title: String?
217
+ attr_reader description: String?
218
+
219
+ def initialize: (Hash[Symbol, untyped] hash) -> void
220
+ def to_h: () -> Hash[Symbol, untyped]
221
+ def to_s: () -> String
222
+ end
223
+
224
+ class ChatFull
225
+ attr_reader id: Integer?
226
+ attr_reader about: String?
227
+ attr_reader participants_count: Integer?
228
+ attr_reader admins_count: Integer?
229
+ attr_reader kicked_count: Integer?
230
+ attr_reader banned_count: Integer?
231
+ attr_reader online_count: Integer?
232
+ attr_reader pinned_msg_id: Integer?
233
+ attr_reader linked_chat_id: Integer?
234
+ attr_reader slowmode_seconds: Integer?
235
+ attr_reader can_view_participants: bool?
236
+ attr_reader can_set_username: bool?
237
+
238
+ def initialize: (Hash[Symbol, untyped] hash) -> void
239
+ def ==: (untyped other) -> bool
240
+ alias eql? ==
241
+ def hash: () -> Integer
242
+ def to_h: () -> Hash[Symbol, untyped]
243
+ def to_s: () -> String
244
+ end
245
+ end
246
+ end
data/sig/grammerb.rbs ADDED
@@ -0,0 +1,13 @@
1
+ module Grammerb
2
+ VERSION: String
3
+
4
+ # Flexible peer identifier: username, numeric ID, or any Type with an id/chat_id
5
+ type peer = String | Integer | Types::Message | Types::Peer | Types::User | Types::Dialog | Types::Participant
6
+
7
+ # Inline button row: array of button hashes
8
+ type button_hash = { text: String, callback_data: String?, url: String?, switch_inline: String?, web_app: { url: String }? }
9
+ type button_rows = Array[Array[button_hash]]
10
+
11
+ # Reply markup hash for reply keyboards
12
+ type reply_markup = button_rows | { type: Symbol, keys: Array[Array[String | { text: String, request_phone: bool?, request_geo: bool?, request_poll: bool? }]]?, resize: bool?, single_use: bool?, placeholder: String? }
13
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: grammerb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: x86_64-linux
6
+ authors:
7
+ - Developer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-03-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.12'
69
+ description: A full-featured Telegram MTProto client library wrapping grammers via
70
+ Rust native extensions
71
+ email:
72
+ - dev@grammerb.local
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - README.md
78
+ - lib/grammerb.rb
79
+ - lib/grammerb/client.rb
80
+ - lib/grammerb/conversation.rb
81
+ - lib/grammerb/errors.rb
82
+ - lib/grammerb/events.rb
83
+ - lib/grammerb/grammerb.so
84
+ - lib/grammerb/types.rb
85
+ - lib/grammerb/version.rb
86
+ - sig/grammerb.rbs
87
+ - sig/grammerb/client.rbs
88
+ - sig/grammerb/conversation.rbs
89
+ - sig/grammerb/errors.rbs
90
+ - sig/grammerb/events.rbs
91
+ - sig/grammerb/types.rbs
92
+ homepage:
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '4.0'
105
+ - - "<"
106
+ - !ruby/object:Gem::Version
107
+ version: 4.1.dev
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubygems_version: 3.5.23
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Telegram MTProto client library for Ruby
118
+ test_files: []