telegram-bot-ruby 0.3.11 → 0.4.0
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/README.md +34 -0
- data/lib/telegram/bot/api.rb +14 -2
- data/lib/telegram/bot/client.rb +8 -7
- data/lib/telegram/bot/exceptions/response_error.rb +1 -1
- data/lib/telegram/bot/types.rb +7 -0
- data/lib/telegram/bot/types/chosen_inline_result.rb +13 -0
- data/lib/telegram/bot/types/inline_query.rb +14 -0
- data/lib/telegram/bot/types/inline_query_result_article.rb +21 -0
- data/lib/telegram/bot/types/inline_query_result_gif.rb +19 -0
- data/lib/telegram/bot/types/inline_query_result_mpeg4_gif.rb +19 -0
- data/lib/telegram/bot/types/inline_query_result_photo.rb +20 -0
- data/lib/telegram/bot/types/inline_query_result_video.rb +21 -0
- data/lib/telegram/bot/types/message.rb +2 -0
- data/lib/telegram/bot/types/update.rb +2 -0
- data/lib/telegram/bot/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f97dd430cc9b267ecc9bb00d55bd50dfb34b091
|
4
|
+
data.tar.gz: cfff29e4848daad38fdd280e968f62f31b987ee8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9763fcfe74b8e3bb067cd923182ebaa3418a7b68e9f71719baa8cf2a437810f3f58c8cefd76a8caaabb3eb1b8188fc7f0453213cf57d634aa841e7d8fade106
|
7
|
+
data.tar.gz: 9530676f3ee98dbb7edbf0901bf3a97a4a010f00209afdb7316f189e1f8c2b6df255761e3ca8de3e8c1a6b97fb6cef30c71bdf4fabc4da750621bcb46d8972c0
|
data/README.md
CHANGED
@@ -50,6 +50,10 @@ Note that `bot.api` object implements [Telegram Bot API methods](https://core.te
|
|
50
50
|
|
51
51
|
Same thing about `message` object - it implements [Message](https://core.telegram.org/bots/api#message) spec, so you always know what to expect from it.
|
52
52
|
|
53
|
+
## Webhooks
|
54
|
+
|
55
|
+
If you are going to use [webhooks](https://core.telegram.org/bots/api#setwebhook) instead of [long polling](https://core.telegram.org/bots/api#getupdates), you need to implement your own webhook callbacks server. Take a look at [this repo](https://github.com/solyaris/BOTServer) as an example.
|
56
|
+
|
53
57
|
## Custom keyboards
|
54
58
|
|
55
59
|
You can use your own [custom keyboards](https://core.telegram.org/bots#keyboards). Here is an example:
|
@@ -72,6 +76,31 @@ bot.listen do |message|
|
|
72
76
|
end
|
73
77
|
```
|
74
78
|
|
79
|
+
## Inline bots
|
80
|
+
|
81
|
+
If you are going to create [inline bot](https://core.telegram.org/bots/inline), check the example below:
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
bot.listen do |message|
|
85
|
+
case message
|
86
|
+
when Telegram::Bot::Types::InlineQuery
|
87
|
+
results = [
|
88
|
+
Telegram::Bot::Types::InlineQueryResultArticle
|
89
|
+
.new(id: 1, title: 'First article', message_text: 'Very interesting text goes here.'),
|
90
|
+
Telegram::Bot::Types::InlineQueryResultArticle
|
91
|
+
.new(id: 2, title: 'Second article', message_text: 'Another interesting text here.')
|
92
|
+
]
|
93
|
+
bot.api.answer_inline_query(inline_query_id: message.id, results: results)
|
94
|
+
when Telegram::Bot::Types::Message
|
95
|
+
bot.api.send_message(chat_id: message.chat.id, text: "Hello, #{message.from.first_name}!")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
Now, with `inline` mode enabled, your `message` object can be an instance of [Message](https://core.telegram.org/bots/api#message), [InlineQuery](https://core.telegram.org/bots/api#inlinequery) or [ChosenInlineResult](https://core.telegram.org/bots/api#choseninlineresult). That's why you need to check type of each message and decide how to handle it.
|
101
|
+
|
102
|
+
Using `answer_inline_query` you can send query results to user. `results` field must be an array of [query result objects](https://core.telegram.org/bots/api#inlinequeryresult).
|
103
|
+
|
75
104
|
## File upload
|
76
105
|
|
77
106
|
Your bot can even upload files ([photos](https://core.telegram.org/bots/api#sendphoto), [audio](https://core.telegram.org/bots/api#sendaudio), [documents](https://core.telegram.org/bots/api#senddocument), [stickers](https://core.telegram.org/bots/api#sendsticker), [video](https://core.telegram.org/bots/api#sendvideo)) to Telegram servers. Just like this:
|
@@ -133,6 +162,11 @@ Sometimes you need to do some heavy work in another thread and send response fro
|
|
133
162
|
$ TELEGRAM_BOT_POOL_SIZE=4 ruby bot.rb
|
134
163
|
```
|
135
164
|
|
165
|
+
## Boilerplates
|
166
|
+
|
167
|
+
If you don't know how to setup database for your bot or how to use it with different languages here are some boilerplates which can help you to start faster:
|
168
|
+
- [Ruby Telegram Bot boilerplate](https://github.com/telegram-bots/ruby-telegram-bot-boilerplate)
|
169
|
+
|
136
170
|
## Contributing
|
137
171
|
|
138
172
|
1. Fork it
|
data/lib/telegram/bot/api.rb
CHANGED
@@ -6,13 +6,20 @@ module Telegram
|
|
6
6
|
ENDPOINTS = %w(
|
7
7
|
getMe sendMessage forwardMessage sendPhoto sendAudio sendDocument
|
8
8
|
sendSticker sendVideo sendVoice sendLocation sendChatAction
|
9
|
-
getUserProfilePhotos getUpdates setWebhook getFile
|
9
|
+
getUserProfilePhotos getUpdates setWebhook getFile answerInlineQuery
|
10
10
|
).freeze
|
11
11
|
REPLY_MARKUP_TYPES = [
|
12
12
|
Telegram::Bot::Types::ReplyKeyboardMarkup,
|
13
13
|
Telegram::Bot::Types::ReplyKeyboardHide,
|
14
14
|
Telegram::Bot::Types::ForceReply
|
15
15
|
].freeze
|
16
|
+
INLINE_QUERY_RESULT_TYPES = [
|
17
|
+
Telegram::Bot::Types::InlineQueryResultArticle,
|
18
|
+
Telegram::Bot::Types::InlineQueryResultGif,
|
19
|
+
Telegram::Bot::Types::InlineQueryResultMpeg4Gif,
|
20
|
+
Telegram::Bot::Types::InlineQueryResultPhoto,
|
21
|
+
Telegram::Bot::Types::InlineQueryResultVideo
|
22
|
+
].freeze
|
16
23
|
POOL_SIZE = ENV.fetch('TELEGRAM_BOT_POOL_SIZE', 1).to_i.freeze
|
17
24
|
|
18
25
|
attr_reader :token
|
@@ -53,7 +60,7 @@ module Telegram
|
|
53
60
|
end
|
54
61
|
|
55
62
|
def sanitize_value(value)
|
56
|
-
jsonify_reply_markup(value)
|
63
|
+
jsonify_inline_query_results(jsonify_reply_markup(value))
|
57
64
|
end
|
58
65
|
|
59
66
|
def jsonify_reply_markup(value)
|
@@ -61,6 +68,11 @@ module Telegram
|
|
61
68
|
value.to_h.to_json
|
62
69
|
end
|
63
70
|
|
71
|
+
def jsonify_inline_query_results(value)
|
72
|
+
return value unless Array(value).all? { |i| INLINE_QUERY_RESULT_TYPES.include?(i.class) }
|
73
|
+
value.map { |i| i.to_h.select { |_, v| v } }.to_json
|
74
|
+
end
|
75
|
+
|
64
76
|
def camelize(method_name)
|
65
77
|
words = method_name.split('_')
|
66
78
|
words.drop(1).map(&:capitalize!)
|
data/lib/telegram/bot/client.rb
CHANGED
@@ -37,8 +37,9 @@ module Telegram
|
|
37
37
|
response['result'].each do |data|
|
38
38
|
update = Types::Update.new(data)
|
39
39
|
@offset = update.update_id.next
|
40
|
-
|
41
|
-
|
40
|
+
message = extract_message(update)
|
41
|
+
log_incoming_message(message)
|
42
|
+
yield message
|
42
43
|
end
|
43
44
|
rescue *TIMEOUT_EXCEPTIONS
|
44
45
|
retry
|
@@ -50,13 +51,13 @@ module Telegram
|
|
50
51
|
{ offset: 0, timeout: 20, logger: NullLogger.new }
|
51
52
|
end
|
52
53
|
|
54
|
+
def extract_message(update)
|
55
|
+
update.inline_query || update.chosen_inline_result || update.message
|
56
|
+
end
|
57
|
+
|
53
58
|
def log_incoming_message(message)
|
54
59
|
logger.info(
|
55
|
-
format(
|
56
|
-
'Incoming message: text="%s" uid=%i',
|
57
|
-
message.text,
|
58
|
-
message.from.id
|
59
|
-
)
|
60
|
+
format('Incoming message: text="%s" uid=%i', message, message.from.id)
|
60
61
|
)
|
61
62
|
end
|
62
63
|
end
|
data/lib/telegram/bot/types.rb
CHANGED
@@ -10,6 +10,13 @@ require 'telegram/bot/types/contact'
|
|
10
10
|
require 'telegram/bot/types/location'
|
11
11
|
require 'telegram/bot/types/chat'
|
12
12
|
require 'telegram/bot/types/message'
|
13
|
+
require 'telegram/bot/types/inline_query'
|
14
|
+
require 'telegram/bot/types/inline_query_result_article'
|
15
|
+
require 'telegram/bot/types/inline_query_result_photo'
|
16
|
+
require 'telegram/bot/types/inline_query_result_gif'
|
17
|
+
require 'telegram/bot/types/inline_query_result_mpeg4_gif'
|
18
|
+
require 'telegram/bot/types/inline_query_result_video'
|
19
|
+
require 'telegram/bot/types/chosen_inline_result'
|
13
20
|
require 'telegram/bot/types/update'
|
14
21
|
require 'telegram/bot/types/reply_keyboard_markup'
|
15
22
|
require 'telegram/bot/types/reply_keyboard_hide'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultArticle < Base
|
5
|
+
attribute :type, String, default: 'article'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :title, String
|
8
|
+
attribute :message_text, String
|
9
|
+
attribute :parse_mode, String
|
10
|
+
attribute :parse_mode, String
|
11
|
+
attribute :disable_web_page_preview, Boolean
|
12
|
+
attribute :url, String
|
13
|
+
attribute :hide_url, Boolean
|
14
|
+
attribute :description, String
|
15
|
+
attribute :thumb_url, String
|
16
|
+
attribute :thumb_width, Integer
|
17
|
+
attribute :thumb_height, Integer
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultGif < Base
|
5
|
+
attribute :type, String, default: 'gif'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :gif_url, String
|
8
|
+
attribute :gif_width, Integer
|
9
|
+
attribute :gif_height, Integer
|
10
|
+
attribute :thumb_url, String
|
11
|
+
attribute :title, String
|
12
|
+
attribute :caption, String
|
13
|
+
attribute :message_text, String
|
14
|
+
attribute :parse_mode, String
|
15
|
+
attribute :disable_web_page_preview, Boolean
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultMpeg4Gif < Base
|
5
|
+
attribute :type, String, default: 'mpeg4_gif'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :mpeg4_url, String
|
8
|
+
attribute :mpeg4_width, Integer
|
9
|
+
attribute :mpeg4_height, Integer
|
10
|
+
attribute :thumb_url, String
|
11
|
+
attribute :title, String
|
12
|
+
attribute :caption, String
|
13
|
+
attribute :message_text, String
|
14
|
+
attribute :parse_mode, String
|
15
|
+
attribute :disable_web_page_preview, Boolean
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultPhoto < Base
|
5
|
+
attribute :type, String, default: 'photo'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :photo_url, String
|
8
|
+
attribute :photo_width, Integer
|
9
|
+
attribute :photo_height, Integer
|
10
|
+
attribute :thumb_url, String
|
11
|
+
attribute :title, String
|
12
|
+
attribute :description, String
|
13
|
+
attribute :caption, String
|
14
|
+
attribute :message_text, String
|
15
|
+
attribute :parse_mode, String
|
16
|
+
attribute :disable_web_page_preview, Boolean
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultVideo < Base
|
5
|
+
attribute :type, String, default: 'video'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :video_url, String
|
8
|
+
attribute :mime_type, String
|
9
|
+
attribute :message_text, String
|
10
|
+
attribute :parse_mode, String
|
11
|
+
attribute :disable_web_page_preview, Boolean
|
12
|
+
attribute :video_width, Integer
|
13
|
+
attribute :video_height, Integer
|
14
|
+
attribute :video_duration, Integer
|
15
|
+
attribute :thumb_url, String
|
16
|
+
attribute :title, String
|
17
|
+
attribute :description, String
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/telegram/bot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: telegram-bot-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Tipugin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httmultiparty
|
@@ -137,10 +137,17 @@ files:
|
|
137
137
|
- lib/telegram/bot/types/audio.rb
|
138
138
|
- lib/telegram/bot/types/base.rb
|
139
139
|
- lib/telegram/bot/types/chat.rb
|
140
|
+
- lib/telegram/bot/types/chosen_inline_result.rb
|
140
141
|
- lib/telegram/bot/types/contact.rb
|
141
142
|
- lib/telegram/bot/types/document.rb
|
142
143
|
- lib/telegram/bot/types/file.rb
|
143
144
|
- lib/telegram/bot/types/force_reply.rb
|
145
|
+
- lib/telegram/bot/types/inline_query.rb
|
146
|
+
- lib/telegram/bot/types/inline_query_result_article.rb
|
147
|
+
- lib/telegram/bot/types/inline_query_result_gif.rb
|
148
|
+
- lib/telegram/bot/types/inline_query_result_mpeg4_gif.rb
|
149
|
+
- lib/telegram/bot/types/inline_query_result_photo.rb
|
150
|
+
- lib/telegram/bot/types/inline_query_result_video.rb
|
144
151
|
- lib/telegram/bot/types/location.rb
|
145
152
|
- lib/telegram/bot/types/message.rb
|
146
153
|
- lib/telegram/bot/types/photo_size.rb
|