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.
- checksums.yaml +7 -0
- data/README.md +554 -0
- data/lib/grammerb/client.rb +802 -0
- data/lib/grammerb/conversation.rb +81 -0
- data/lib/grammerb/errors.rb +108 -0
- data/lib/grammerb/events.rb +438 -0
- data/lib/grammerb/grammerb.so +0 -0
- data/lib/grammerb/types.rb +530 -0
- data/lib/grammerb/version.rb +4 -0
- data/lib/grammerb.rb +19 -0
- data/sig/grammerb/client.rbs +145 -0
- data/sig/grammerb/conversation.rbs +20 -0
- data/sig/grammerb/errors.rbs +50 -0
- data/sig/grammerb/events.rbs +238 -0
- data/sig/grammerb/types.rbs +246 -0
- data/sig/grammerb.rbs +13 -0
- metadata +118 -0
|
@@ -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: []
|