telegram-bot-ruby 0.4.2 → 0.5.0.beta1
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/CHANGELOG.md +5 -0
- data/README.md +2 -10
- data/lib/telegram/bot/api.rb +36 -19
- data/lib/telegram/bot/botan/api.rb +11 -7
- data/lib/telegram/bot/client.rb +5 -5
- data/lib/telegram/bot/configuration.rb +11 -0
- data/lib/telegram/bot/exceptions/response_error.rb +1 -1
- data/lib/telegram/bot/types/base.rb +4 -0
- data/lib/telegram/bot/types/callback_query.rb +13 -0
- data/lib/telegram/bot/types/chosen_inline_result.rb +3 -1
- data/lib/telegram/bot/types/inline_keyboard_button.rb +16 -0
- data/lib/telegram/bot/types/inline_keyboard_markup.rb +16 -0
- data/lib/telegram/bot/types/inline_query.rb +2 -1
- data/lib/telegram/bot/types/inline_query_result_article.rb +2 -4
- data/lib/telegram/bot/types/inline_query_result_audio.rb +16 -0
- data/lib/telegram/bot/types/inline_query_result_cached_audio.rb +13 -0
- data/lib/telegram/bot/types/inline_query_result_cached_document.rb +16 -0
- data/lib/telegram/bot/types/inline_query_result_cached_gif.rb +15 -0
- data/lib/telegram/bot/types/inline_query_result_cached_mpeg4_gif.rb +15 -0
- data/lib/telegram/bot/types/inline_query_result_cached_photo.rb +16 -0
- data/lib/telegram/bot/types/inline_query_result_cached_sticker.rb +13 -0
- data/lib/telegram/bot/types/inline_query_result_cached_video.rb +16 -0
- data/lib/telegram/bot/types/inline_query_result_cached_voice.rb +14 -0
- data/lib/telegram/bot/types/inline_query_result_contact.rb +18 -0
- data/lib/telegram/bot/types/inline_query_result_document.rb +20 -0
- data/lib/telegram/bot/types/inline_query_result_gif.rb +2 -3
- data/lib/telegram/bot/types/inline_query_result_location.rb +18 -0
- data/lib/telegram/bot/types/inline_query_result_mpeg4_gif.rb +2 -3
- data/lib/telegram/bot/types/inline_query_result_photo.rb +3 -4
- data/lib/telegram/bot/types/inline_query_result_venue.rb +20 -0
- data/lib/telegram/bot/types/inline_query_result_video.rb +5 -5
- data/lib/telegram/bot/types/inline_query_result_voice.rb +15 -0
- data/lib/telegram/bot/types/input_contact_message_content.rb +11 -0
- data/lib/telegram/bot/types/input_location_message_content.rb +10 -0
- data/lib/telegram/bot/types/input_message_content.rb +8 -0
- data/lib/telegram/bot/types/input_text_message_content.rb +11 -0
- data/lib/telegram/bot/types/input_venue_message_content.rb +13 -0
- data/lib/telegram/bot/types/keyboard_button.rb +15 -0
- data/lib/telegram/bot/types/message.rb +11 -4
- data/lib/telegram/bot/types/message_entity.rb +12 -0
- data/lib/telegram/bot/types/reply_keyboard_markup.rb +8 -1
- data/lib/telegram/bot/types/update.rb +1 -0
- data/lib/telegram/bot/types/venue.rb +12 -0
- data/lib/telegram/bot/types.rb +26 -1
- data/lib/telegram/bot/version.rb +1 -1
- data/lib/telegram/bot.rb +20 -2
- data/telegram-bot-ruby.gemspec +1 -3
- metadata +31 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 789950417db18c87aeeaf3ada4788131e8d1e5a0
|
4
|
+
data.tar.gz: 8240d4073e39f8d7400df0682689e1aec49839d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c5819e6e65f453afc80df9354b21783912e3f1f76a15b4bd0fc2ceefe9b1a2472e8c04b661a4175a32e3d2adadf149ae061dd00c2ed5386e27621cf430cf424
|
7
|
+
data.tar.gz: 28170029b9b8b8066e693f30687fa8eb3a3168d73a92ef35a18fcc5bf149ceee8358d767a0a4603899a1c3cac560ff9bf3519c6489cf9dd80ed04f7ef517dba5
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.5.0
|
4
|
+
|
5
|
+
- Replace [httparty](https://github.com/jnunemaker/httparty) with [faraday](https://github.com/lostisland/faraday)
|
6
|
+
- Implement [Bot API 2.0](https://core.telegram.org/bots/2-0-intro)
|
7
|
+
|
3
8
|
## 0.4.2
|
4
9
|
|
5
10
|
- Let `Client#logger` be overwritten later (use `attr_accessor` instead of `attr_reader`)
|
data/README.md
CHANGED
@@ -110,7 +110,7 @@ Your bot can even upload files ([photos](https://core.telegram.org/bots/api#send
|
|
110
110
|
bot.listen do |message|
|
111
111
|
case message.text
|
112
112
|
when '/photo'
|
113
|
-
bot.api.send_photo(chat_id: message.chat.id, photo:
|
113
|
+
bot.api.send_photo(chat_id: message.chat.id, photo: Faraday::UploadIO.new('~/Desktop/jennifer.jpg', 'image/jpeg'))
|
114
114
|
end
|
115
115
|
end
|
116
116
|
```
|
@@ -120,7 +120,7 @@ end
|
|
120
120
|
By default, bot doesn't log anything (uses `NullLoger`). You can change this behavior and provide your own logger class. See example below:
|
121
121
|
|
122
122
|
```ruby
|
123
|
-
Telegram::Bot::Client.run(token, logger: Logger.new($
|
123
|
+
Telegram::Bot::Client.run(token, logger: Logger.new($stderr)) do |bot|
|
124
124
|
bot.logger.info('Bot has been started')
|
125
125
|
bot.listen do |message|
|
126
126
|
# ...
|
@@ -155,14 +155,6 @@ end
|
|
155
155
|
- Telegram's user id (required)
|
156
156
|
- hash of additional properties (optional)
|
157
157
|
|
158
|
-
## Connection pool size
|
159
|
-
|
160
|
-
Sometimes you need to do some heavy work in another thread and send response from there. In this case you have to increase your connection pool size (by default it's *1*). You can do it by setting env variable `TELEGRAM_BOT_POOL_SIZE`:
|
161
|
-
|
162
|
-
```shell
|
163
|
-
$ TELEGRAM_BOT_POOL_SIZE=4 ruby bot.rb
|
164
|
-
```
|
165
|
-
|
166
158
|
## Boilerplates
|
167
159
|
|
168
160
|
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:
|
data/lib/telegram/bot/api.rb
CHANGED
@@ -1,34 +1,43 @@
|
|
1
1
|
module Telegram
|
2
2
|
module Bot
|
3
3
|
class Api
|
4
|
-
include HTTMultiParty
|
5
|
-
|
6
4
|
ENDPOINTS = %w(
|
7
|
-
getMe sendMessage forwardMessage sendPhoto
|
8
|
-
sendSticker sendVideo sendVoice sendLocation
|
9
|
-
|
5
|
+
getUpdates setWebhook getMe sendMessage forwardMessage sendPhoto
|
6
|
+
sendAudio sendDocument sendSticker sendVideo sendVoice sendLocation
|
7
|
+
sendVenue sendContact sendChatAction getUserProfilePhotos getFile
|
8
|
+
kickChatMember unbanChatMember answerCallbackQuery editMessageText
|
9
|
+
editMessageCaption editMessageReplyMarkup answerInlineQuery
|
10
10
|
).freeze
|
11
11
|
REPLY_MARKUP_TYPES = [
|
12
12
|
Telegram::Bot::Types::ReplyKeyboardMarkup,
|
13
13
|
Telegram::Bot::Types::ReplyKeyboardHide,
|
14
|
-
Telegram::Bot::Types::ForceReply
|
14
|
+
Telegram::Bot::Types::ForceReply,
|
15
|
+
Telegram::Bot::Types::InlineKeyboardMarkup
|
15
16
|
].freeze
|
16
17
|
INLINE_QUERY_RESULT_TYPES = [
|
17
18
|
Telegram::Bot::Types::InlineQueryResultArticle,
|
19
|
+
Telegram::Bot::Types::InlineQueryResultPhoto,
|
18
20
|
Telegram::Bot::Types::InlineQueryResultGif,
|
19
21
|
Telegram::Bot::Types::InlineQueryResultMpeg4Gif,
|
20
|
-
Telegram::Bot::Types::
|
21
|
-
Telegram::Bot::Types::
|
22
|
+
Telegram::Bot::Types::InlineQueryResultVideo,
|
23
|
+
Telegram::Bot::Types::InlineQueryResultAudio,
|
24
|
+
Telegram::Bot::Types::InlineQueryResultVoice,
|
25
|
+
Telegram::Bot::Types::InlineQueryResultDocument,
|
26
|
+
Telegram::Bot::Types::InlineQueryResultLocation,
|
27
|
+
Telegram::Bot::Types::InlineQueryResultVenue,
|
28
|
+
Telegram::Bot::Types::InlineQueryResultContact,
|
29
|
+
Telegram::Bot::Types::InlineQueryResultCachedPhoto,
|
30
|
+
Telegram::Bot::Types::InlineQueryResultCachedGif,
|
31
|
+
Telegram::Bot::Types::InlineQueryResultCachedMpeg4Gif,
|
32
|
+
Telegram::Bot::Types::InlineQueryResultCachedSticker,
|
33
|
+
Telegram::Bot::Types::InlineQueryResultCachedDocument,
|
34
|
+
Telegram::Bot::Types::InlineQueryResultCachedVideo,
|
35
|
+
Telegram::Bot::Types::InlineQueryResultCachedVoice,
|
36
|
+
Telegram::Bot::Types::InlineQueryResultCachedAudio
|
22
37
|
].freeze
|
23
|
-
POOL_SIZE = ENV.fetch('TELEGRAM_BOT_POOL_SIZE', 1).to_i.freeze
|
24
38
|
|
25
39
|
attr_reader :token
|
26
40
|
|
27
|
-
base_uri 'https://api.telegram.org'
|
28
|
-
persistent_connection_adapter pool_size: POOL_SIZE,
|
29
|
-
keep_alive: 30,
|
30
|
-
force_retry: true
|
31
|
-
|
32
41
|
def initialize(token)
|
33
42
|
@token = token
|
34
43
|
end
|
@@ -49,12 +58,12 @@ module Telegram
|
|
49
58
|
|
50
59
|
def call(endpoint, raw_params = {})
|
51
60
|
params = build_params(raw_params)
|
52
|
-
response =
|
53
|
-
if response.
|
54
|
-
response.
|
61
|
+
response = conn.post("/bot#{token}/#{endpoint}", params)
|
62
|
+
if response.status == 200
|
63
|
+
JSON.parse(response.body)
|
55
64
|
else
|
56
|
-
|
57
|
-
|
65
|
+
raise Exceptions::ResponseError.new(response),
|
66
|
+
'Telegram API has returned the error.'
|
58
67
|
end
|
59
68
|
end
|
60
69
|
|
@@ -85,6 +94,14 @@ module Telegram
|
|
85
94
|
words.drop(1).map(&:capitalize!)
|
86
95
|
words.join
|
87
96
|
end
|
97
|
+
|
98
|
+
def conn
|
99
|
+
@conn ||= Faraday.new(url: 'https://api.telegram.org') do |faraday|
|
100
|
+
faraday.request :multipart
|
101
|
+
faraday.request :url_encoded
|
102
|
+
faraday.adapter Telegram::Bot.configuration.adapter
|
103
|
+
end
|
104
|
+
end
|
88
105
|
end
|
89
106
|
end
|
90
107
|
end
|
@@ -2,20 +2,24 @@ module Telegram
|
|
2
2
|
module Bot
|
3
3
|
module Botan
|
4
4
|
class Api
|
5
|
-
include HTTParty
|
6
|
-
|
7
5
|
attr_reader :token
|
8
6
|
|
9
|
-
base_uri 'https://api.botan.io'
|
10
|
-
|
11
7
|
def initialize(token)
|
12
8
|
@token = token
|
13
9
|
end
|
14
10
|
|
15
11
|
def track(event, uid, properties = {})
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
query_str = URI.encode_www_form(token: token, name: event, uid: uid)
|
13
|
+
conn.post("/track?#{query_str}", properties.to_json)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def conn
|
19
|
+
@conn ||= Faraday.new(url: 'https://api.botan.io') do |faraday|
|
20
|
+
faraday.request :url_encoded
|
21
|
+
faraday.adapter Telegram::Bot.configuration.adapter
|
22
|
+
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
data/lib/telegram/bot/client.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
module Telegram
|
2
2
|
module Bot
|
3
3
|
class Client
|
4
|
-
TIMEOUT_EXCEPTIONS = [Timeout::Error]
|
5
|
-
TIMEOUT_EXCEPTIONS << Net::ReadTimeout if Net.const_defined?(:ReadTimeout)
|
6
|
-
|
7
4
|
attr_reader :api, :offset, :timeout
|
8
5
|
attr_accessor :logger
|
9
6
|
|
@@ -42,7 +39,7 @@ module Telegram
|
|
42
39
|
log_incoming_message(message)
|
43
40
|
yield message
|
44
41
|
end
|
45
|
-
rescue
|
42
|
+
rescue Faraday::TimeoutError
|
46
43
|
retry
|
47
44
|
end
|
48
45
|
|
@@ -53,7 +50,10 @@ module Telegram
|
|
53
50
|
end
|
54
51
|
|
55
52
|
def extract_message(update)
|
56
|
-
update.inline_query ||
|
53
|
+
update.inline_query ||
|
54
|
+
update.chosen_inline_result ||
|
55
|
+
update.callback_query ||
|
56
|
+
update.message
|
57
57
|
end
|
58
58
|
|
59
59
|
def log_incoming_message(message)
|
@@ -4,9 +4,11 @@ module Telegram
|
|
4
4
|
class ChosenInlineResult < Base
|
5
5
|
attribute :result_id, String
|
6
6
|
attribute :from, User
|
7
|
+
attribute :location, Location
|
8
|
+
attribute :inline_message_id, String
|
7
9
|
attribute :query, String
|
8
10
|
|
9
|
-
|
11
|
+
alias to_s query
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineKeyboardButton < Base
|
5
|
+
attribute :text, String
|
6
|
+
attribute :url, String
|
7
|
+
attribute :callback_data, String
|
8
|
+
attribute :switch_inline_query, String
|
9
|
+
|
10
|
+
def to_h
|
11
|
+
super.delete_if { |_, v| v.nil? }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineKeyboardMarkup < Base
|
5
|
+
attribute :inline_keyboard, Array[Array[InlineKeyboardButton]]
|
6
|
+
|
7
|
+
def to_h
|
8
|
+
hsh = super
|
9
|
+
hsh[:inline_keyboard].map! { |a| a.map(&:to_h) }
|
10
|
+
|
11
|
+
hsh
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -5,10 +5,8 @@ module Telegram
|
|
5
5
|
attribute :type, String, default: 'article'
|
6
6
|
attribute :id, String
|
7
7
|
attribute :title, String
|
8
|
-
attribute :
|
9
|
-
attribute :
|
10
|
-
attribute :parse_mode, String
|
11
|
-
attribute :disable_web_page_preview, Boolean
|
8
|
+
attribute :input_message_content, InputMessageContent
|
9
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
12
10
|
attribute :url, String
|
13
11
|
attribute :hide_url, Boolean
|
14
12
|
attribute :description, String
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultAudio < Base
|
5
|
+
attribute :type, String, default: 'audio'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :audio_url, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :performer, String
|
10
|
+
attribute :audio_duration, Integer
|
11
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
12
|
+
attribute :input_message_content, InputMessageContent
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedAudio < Base
|
5
|
+
attribute :type, String, default: 'audio'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :audio_file_id, String
|
8
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
9
|
+
attribute :input_message_content, InputMessageContent
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedDocument < Base
|
5
|
+
attribute :type, String, default: 'document'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :title, String
|
8
|
+
attribute :document_file_id, String
|
9
|
+
attribute :description, String
|
10
|
+
attribute :caption, String
|
11
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
12
|
+
attribute :input_message_content, InputMessageContent
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedGif < Base
|
5
|
+
attribute :type, String, default: 'gif'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :gif_file_id, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :caption, String
|
10
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
11
|
+
attribute :input_message_content, InputMessageContent
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedMpeg4Gif < Base
|
5
|
+
attribute :type, String, default: 'mpeg4_gif'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :mpeg4_file_id, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :caption, String
|
10
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
11
|
+
attribute :input_message_content, InputMessageContent
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedPhoto < Base
|
5
|
+
attribute :type, String, default: 'photo'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :photo_file_id, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :description, String
|
10
|
+
attribute :caption, String
|
11
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
12
|
+
attribute :input_message_content, InputMessageContent
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedSticker < Base
|
5
|
+
attribute :type, String, default: 'sticker'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :sticker_file_id, String
|
8
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
9
|
+
attribute :input_message_content, InputMessageContent
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedVideo < Base
|
5
|
+
attribute :type, String, default: 'video'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :video_file_id, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :description, String
|
10
|
+
attribute :caption, String
|
11
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
12
|
+
attribute :input_message_content, InputMessageContent
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultCachedVoice < Base
|
5
|
+
attribute :type, String, default: 'voice'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :voice_file_id, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
10
|
+
attribute :input_message_content, InputMessageContent
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultContact < Base
|
5
|
+
attribute :type, String, default: 'contact'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :phone_number, String
|
8
|
+
attribute :first_name, String
|
9
|
+
attribute :last_name, String
|
10
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
11
|
+
attribute :input_message_content, InputMessageContent
|
12
|
+
attribute :thumb_url, String
|
13
|
+
attribute :thumb_width, Integer
|
14
|
+
attribute :thumb_height, Integer
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultDocument < Base
|
5
|
+
attribute :type, String, default: 'document'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :title, String
|
8
|
+
attribute :caption, String
|
9
|
+
attribute :document_url, String
|
10
|
+
attribute :mime_type, String
|
11
|
+
attribute :description, String
|
12
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
13
|
+
attribute :input_message_content, InputMessageContent
|
14
|
+
attribute :thumb_url, String
|
15
|
+
attribute :thumb_width, Integer
|
16
|
+
attribute :thumb_height, Integer
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -10,9 +10,8 @@ module Telegram
|
|
10
10
|
attribute :thumb_url, String
|
11
11
|
attribute :title, String
|
12
12
|
attribute :caption, String
|
13
|
-
attribute :
|
14
|
-
attribute :
|
15
|
-
attribute :disable_web_page_preview, Boolean
|
13
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
14
|
+
attribute :input_message_content, InputMessageContent
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultLocation < Base
|
5
|
+
attribute :type, String, default: 'location'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :latitude, Float
|
8
|
+
attribute :longitude, Float
|
9
|
+
attribute :title, String
|
10
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
11
|
+
attribute :input_message_content, InputMessageContent
|
12
|
+
attribute :thumb_url, String
|
13
|
+
attribute :thumb_width, Integer
|
14
|
+
attribute :thumb_height, Integer
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -10,9 +10,8 @@ module Telegram
|
|
10
10
|
attribute :thumb_url, String
|
11
11
|
attribute :title, String
|
12
12
|
attribute :caption, String
|
13
|
-
attribute :
|
14
|
-
attribute :
|
15
|
-
attribute :disable_web_page_preview, Boolean
|
13
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
14
|
+
attribute :input_message_content, InputMessageContent
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -5,15 +5,14 @@ module Telegram
|
|
5
5
|
attribute :type, String, default: 'photo'
|
6
6
|
attribute :id, String
|
7
7
|
attribute :photo_url, String
|
8
|
+
attribute :thumb_url, String
|
8
9
|
attribute :photo_width, Integer
|
9
10
|
attribute :photo_height, Integer
|
10
|
-
attribute :thumb_url, String
|
11
11
|
attribute :title, String
|
12
12
|
attribute :description, String
|
13
13
|
attribute :caption, String
|
14
|
-
attribute :
|
15
|
-
attribute :
|
16
|
-
attribute :disable_web_page_preview, Boolean
|
14
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
15
|
+
attribute :input_message_content, InputMessageContent
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultVenue < Base
|
5
|
+
attribute :type, String, default: 'venue'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :latitude, Float
|
8
|
+
attribute :longitude, Float
|
9
|
+
attribute :title, String
|
10
|
+
attribute :address, String
|
11
|
+
attribute :foursquare_id, String
|
12
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
13
|
+
attribute :input_message_content, InputMessageContent
|
14
|
+
attribute :thumb_url, String
|
15
|
+
attribute :thumb_width, Integer
|
16
|
+
attribute :thumb_height, Integer
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -6,15 +6,15 @@ module Telegram
|
|
6
6
|
attribute :id, String
|
7
7
|
attribute :video_url, String
|
8
8
|
attribute :mime_type, String
|
9
|
-
attribute :
|
10
|
-
attribute :
|
11
|
-
attribute :
|
9
|
+
attribute :thumb_url, String
|
10
|
+
attribute :title, String
|
11
|
+
attribute :caption, String
|
12
12
|
attribute :video_width, Integer
|
13
13
|
attribute :video_height, Integer
|
14
14
|
attribute :video_duration, Integer
|
15
|
-
attribute :thumb_url, String
|
16
|
-
attribute :title, String
|
17
15
|
attribute :description, String
|
16
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
17
|
+
attribute :input_message_content, InputMessageContent
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InlineQueryResultVoice < Base
|
5
|
+
attribute :type, String, default: 'voice'
|
6
|
+
attribute :id, String
|
7
|
+
attribute :voice_url, String
|
8
|
+
attribute :title, String
|
9
|
+
attribute :voice_duration, Integer
|
10
|
+
attribute :reply_markup, InlineKeyboardMarkup
|
11
|
+
attribute :input_message_content, InputMessageContent
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class InputVenueMessageContent < InputMessageContent
|
5
|
+
attribute :latitude, Float
|
6
|
+
attribute :longitude, Float
|
7
|
+
attribute :title, String
|
8
|
+
attribute :address, String
|
9
|
+
attribute :foursquare_id, String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Telegram
|
2
|
+
module Bot
|
3
|
+
module Types
|
4
|
+
class KeyboardButton < Base
|
5
|
+
attribute :text, String
|
6
|
+
attribute :request_contact, Boolean
|
7
|
+
attribute :request_location, Boolean
|
8
|
+
|
9
|
+
def to_h
|
10
|
+
super.delete_if { |_, v| v.nil? }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,10 +5,12 @@ module Telegram
|
|
5
5
|
attribute :message_id, Integer
|
6
6
|
attribute :from, User
|
7
7
|
attribute :date, Integer
|
8
|
+
attribute :chat, Chat
|
8
9
|
attribute :forward_from, User
|
9
10
|
attribute :forward_date, Integer
|
10
11
|
attribute :reply_to_message, Message
|
11
12
|
attribute :text, String
|
13
|
+
attribute :entities, Array[MessageEntity]
|
12
14
|
attribute :audio, Audio
|
13
15
|
attribute :document, Document
|
14
16
|
attribute :photo, Array[PhotoSize]
|
@@ -18,15 +20,20 @@ module Telegram
|
|
18
20
|
attribute :caption, String
|
19
21
|
attribute :contact, Contact
|
20
22
|
attribute :location, Location
|
21
|
-
attribute :
|
22
|
-
attribute :
|
23
|
+
attribute :venue, Venue
|
24
|
+
attribute :new_chat_member, User
|
25
|
+
attribute :left_chat_member, User
|
23
26
|
attribute :new_chat_title, String
|
24
27
|
attribute :new_chat_photo, Array[PhotoSize]
|
25
28
|
attribute :delete_chat_photo, Boolean
|
26
29
|
attribute :group_chat_created, Boolean
|
27
|
-
attribute :
|
30
|
+
attribute :supergroup_chat_created, Boolean
|
31
|
+
attribute :channel_chat_created, Boolean
|
32
|
+
attribute :migrate_to_chat_id, Integer
|
33
|
+
attribute :migrate_from_chat_id, Integer
|
34
|
+
attribute :pinned_message, Message
|
28
35
|
|
29
|
-
|
36
|
+
alias to_s text
|
30
37
|
end
|
31
38
|
end
|
32
39
|
end
|
@@ -2,10 +2,17 @@ module Telegram
|
|
2
2
|
module Bot
|
3
3
|
module Types
|
4
4
|
class ReplyKeyboardMarkup < Base
|
5
|
-
attribute :keyboard, Array[Array[
|
5
|
+
attribute :keyboard, Array[Array[KeyboardButton]]
|
6
6
|
attribute :resize_keyboard, Boolean, default: false
|
7
7
|
attribute :one_time_keyboard, Boolean, default: false
|
8
8
|
attribute :selective, Boolean, default: false
|
9
|
+
|
10
|
+
def to_h
|
11
|
+
hsh = super
|
12
|
+
hsh[:keyboard].map! { |a| a.map(&:to_h) }
|
13
|
+
|
14
|
+
hsh
|
15
|
+
end
|
9
16
|
end
|
10
17
|
end
|
11
18
|
end
|
data/lib/telegram/bot/types.rb
CHANGED
@@ -9,15 +9,40 @@ require 'telegram/bot/types/voice'
|
|
9
9
|
require 'telegram/bot/types/contact'
|
10
10
|
require 'telegram/bot/types/location'
|
11
11
|
require 'telegram/bot/types/chat'
|
12
|
+
require 'telegram/bot/types/message_entity'
|
13
|
+
require 'telegram/bot/types/venue'
|
12
14
|
require 'telegram/bot/types/message'
|
15
|
+
require 'telegram/bot/types/input_message_content'
|
16
|
+
require 'telegram/bot/types/input_contact_message_content'
|
17
|
+
require 'telegram/bot/types/input_location_message_content'
|
18
|
+
require 'telegram/bot/types/input_text_message_content'
|
19
|
+
require 'telegram/bot/types/input_venue_message_content'
|
20
|
+
require 'telegram/bot/types/inline_keyboard_button'
|
21
|
+
require 'telegram/bot/types/inline_keyboard_markup'
|
13
22
|
require 'telegram/bot/types/inline_query'
|
14
23
|
require 'telegram/bot/types/inline_query_result_article'
|
15
|
-
require 'telegram/bot/types/
|
24
|
+
require 'telegram/bot/types/inline_query_result_audio'
|
25
|
+
require 'telegram/bot/types/inline_query_result_cached_audio'
|
26
|
+
require 'telegram/bot/types/inline_query_result_cached_document'
|
27
|
+
require 'telegram/bot/types/inline_query_result_cached_gif'
|
28
|
+
require 'telegram/bot/types/inline_query_result_cached_mpeg4_gif'
|
29
|
+
require 'telegram/bot/types/inline_query_result_cached_photo'
|
30
|
+
require 'telegram/bot/types/inline_query_result_cached_sticker'
|
31
|
+
require 'telegram/bot/types/inline_query_result_cached_video'
|
32
|
+
require 'telegram/bot/types/inline_query_result_cached_voice'
|
33
|
+
require 'telegram/bot/types/inline_query_result_contact'
|
34
|
+
require 'telegram/bot/types/inline_query_result_document'
|
16
35
|
require 'telegram/bot/types/inline_query_result_gif'
|
36
|
+
require 'telegram/bot/types/inline_query_result_location'
|
17
37
|
require 'telegram/bot/types/inline_query_result_mpeg4_gif'
|
38
|
+
require 'telegram/bot/types/inline_query_result_photo'
|
39
|
+
require 'telegram/bot/types/inline_query_result_venue'
|
18
40
|
require 'telegram/bot/types/inline_query_result_video'
|
41
|
+
require 'telegram/bot/types/inline_query_result_voice'
|
19
42
|
require 'telegram/bot/types/chosen_inline_result'
|
43
|
+
require 'telegram/bot/types/callback_query'
|
20
44
|
require 'telegram/bot/types/update'
|
45
|
+
require 'telegram/bot/types/keyboard_button'
|
21
46
|
require 'telegram/bot/types/reply_keyboard_markup'
|
22
47
|
require 'telegram/bot/types/reply_keyboard_hide'
|
23
48
|
require 'telegram/bot/types/force_reply'
|
data/lib/telegram/bot/version.rb
CHANGED
data/lib/telegram/bot.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
require 'httmultiparty'
|
2
|
-
require 'persistent_httparty'
|
3
1
|
require 'virtus'
|
2
|
+
require 'logger'
|
3
|
+
require 'json'
|
4
|
+
require 'faraday'
|
4
5
|
|
5
6
|
require 'telegram/bot/types'
|
6
7
|
require 'telegram/bot/exceptions'
|
@@ -8,3 +9,20 @@ require 'telegram/bot/api'
|
|
8
9
|
require 'telegram/bot/null_logger'
|
9
10
|
require 'telegram/bot/client'
|
10
11
|
require 'telegram/bot/version'
|
12
|
+
require 'telegram/bot/configuration'
|
13
|
+
|
14
|
+
module Telegram
|
15
|
+
module Bot
|
16
|
+
class << self
|
17
|
+
attr_writer :configuration
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.configuration
|
21
|
+
@configuration ||= Configuration.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.configure
|
25
|
+
yield(configuration)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/telegram-bot-ruby.gemspec
CHANGED
@@ -17,8 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.add_dependency '
|
21
|
-
spec.add_dependency 'persistent_httparty'
|
20
|
+
spec.add_dependency 'faraday'
|
22
21
|
spec.add_dependency 'virtus'
|
23
22
|
|
24
23
|
spec.add_development_dependency 'bundler', '~> 1.9'
|
@@ -27,5 +26,4 @@ Gem::Specification.new do |spec|
|
|
27
26
|
spec.add_development_dependency 'rubocop'
|
28
27
|
spec.add_development_dependency 'rspec', '~> 3.4'
|
29
28
|
spec.add_development_dependency 'rubocop-rspec', '~> 1.4'
|
30
|
-
spec.add_development_dependency 'nokogiri', '~> 1.6'
|
31
29
|
end
|
metadata
CHANGED
@@ -1,31 +1,17 @@
|
|
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.5.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Tipugin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
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: persistent_httparty
|
14
|
+
name: faraday
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - ">="
|
@@ -136,20 +122,6 @@ dependencies:
|
|
136
122
|
- - "~>"
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '1.4'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: nokogiri
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '1.6'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '1.6'
|
153
125
|
description:
|
154
126
|
email:
|
155
127
|
- atipugin@gmail.com
|
@@ -174,6 +146,7 @@ files:
|
|
174
146
|
- lib/telegram/bot/botan.rb
|
175
147
|
- lib/telegram/bot/botan/api.rb
|
176
148
|
- lib/telegram/bot/client.rb
|
149
|
+
- lib/telegram/bot/configuration.rb
|
177
150
|
- lib/telegram/bot/exceptions.rb
|
178
151
|
- lib/telegram/bot/exceptions/base.rb
|
179
152
|
- lib/telegram/bot/exceptions/response_error.rb
|
@@ -181,26 +154,51 @@ files:
|
|
181
154
|
- lib/telegram/bot/types.rb
|
182
155
|
- lib/telegram/bot/types/audio.rb
|
183
156
|
- lib/telegram/bot/types/base.rb
|
157
|
+
- lib/telegram/bot/types/callback_query.rb
|
184
158
|
- lib/telegram/bot/types/chat.rb
|
185
159
|
- lib/telegram/bot/types/chosen_inline_result.rb
|
186
160
|
- lib/telegram/bot/types/contact.rb
|
187
161
|
- lib/telegram/bot/types/document.rb
|
188
162
|
- lib/telegram/bot/types/file.rb
|
189
163
|
- lib/telegram/bot/types/force_reply.rb
|
164
|
+
- lib/telegram/bot/types/inline_keyboard_button.rb
|
165
|
+
- lib/telegram/bot/types/inline_keyboard_markup.rb
|
190
166
|
- lib/telegram/bot/types/inline_query.rb
|
191
167
|
- lib/telegram/bot/types/inline_query_result_article.rb
|
168
|
+
- lib/telegram/bot/types/inline_query_result_audio.rb
|
169
|
+
- lib/telegram/bot/types/inline_query_result_cached_audio.rb
|
170
|
+
- lib/telegram/bot/types/inline_query_result_cached_document.rb
|
171
|
+
- lib/telegram/bot/types/inline_query_result_cached_gif.rb
|
172
|
+
- lib/telegram/bot/types/inline_query_result_cached_mpeg4_gif.rb
|
173
|
+
- lib/telegram/bot/types/inline_query_result_cached_photo.rb
|
174
|
+
- lib/telegram/bot/types/inline_query_result_cached_sticker.rb
|
175
|
+
- lib/telegram/bot/types/inline_query_result_cached_video.rb
|
176
|
+
- lib/telegram/bot/types/inline_query_result_cached_voice.rb
|
177
|
+
- lib/telegram/bot/types/inline_query_result_contact.rb
|
178
|
+
- lib/telegram/bot/types/inline_query_result_document.rb
|
192
179
|
- lib/telegram/bot/types/inline_query_result_gif.rb
|
180
|
+
- lib/telegram/bot/types/inline_query_result_location.rb
|
193
181
|
- lib/telegram/bot/types/inline_query_result_mpeg4_gif.rb
|
194
182
|
- lib/telegram/bot/types/inline_query_result_photo.rb
|
183
|
+
- lib/telegram/bot/types/inline_query_result_venue.rb
|
195
184
|
- lib/telegram/bot/types/inline_query_result_video.rb
|
185
|
+
- lib/telegram/bot/types/inline_query_result_voice.rb
|
186
|
+
- lib/telegram/bot/types/input_contact_message_content.rb
|
187
|
+
- lib/telegram/bot/types/input_location_message_content.rb
|
188
|
+
- lib/telegram/bot/types/input_message_content.rb
|
189
|
+
- lib/telegram/bot/types/input_text_message_content.rb
|
190
|
+
- lib/telegram/bot/types/input_venue_message_content.rb
|
191
|
+
- lib/telegram/bot/types/keyboard_button.rb
|
196
192
|
- lib/telegram/bot/types/location.rb
|
197
193
|
- lib/telegram/bot/types/message.rb
|
194
|
+
- lib/telegram/bot/types/message_entity.rb
|
198
195
|
- lib/telegram/bot/types/photo_size.rb
|
199
196
|
- lib/telegram/bot/types/reply_keyboard_hide.rb
|
200
197
|
- lib/telegram/bot/types/reply_keyboard_markup.rb
|
201
198
|
- lib/telegram/bot/types/sticker.rb
|
202
199
|
- lib/telegram/bot/types/update.rb
|
203
200
|
- lib/telegram/bot/types/user.rb
|
201
|
+
- lib/telegram/bot/types/venue.rb
|
204
202
|
- lib/telegram/bot/types/video.rb
|
205
203
|
- lib/telegram/bot/types/voice.rb
|
206
204
|
- lib/telegram/bot/version.rb
|
@@ -219,9 +217,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
219
217
|
version: '0'
|
220
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
219
|
requirements:
|
222
|
-
- - "
|
220
|
+
- - ">"
|
223
221
|
- !ruby/object:Gem::Version
|
224
|
-
version:
|
222
|
+
version: 1.3.1
|
225
223
|
requirements: []
|
226
224
|
rubyforge_project:
|
227
225
|
rubygems_version: 2.4.5.1
|