telegram-bot 0.14.0 → 0.14.1
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 +4 -0
- data/README.md +34 -42
- data/lib/telegram/bot.rb +0 -1
- data/lib/telegram/bot/async.rb +2 -7
- data/lib/telegram/bot/client.rb +0 -1
- data/lib/telegram/bot/client/api_methods.txt +5 -1
- data/lib/telegram/bot/config_methods.rb +6 -10
- data/lib/telegram/bot/version.rb +1 -1
- metadata +2 -5
- data/lib/telegram/bot/botan.rb +0 -53
- data/lib/telegram/bot/botan/client_helpers.rb +0 -15
- data/lib/telegram/bot/botan/controller_helpers.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6d77239250dfe0b0929e91f8bb625282ba34d34e242a5a138e37d51b14281e8
|
4
|
+
data.tar.gz: e2471ee47e80f2b648d078cad288cad4b5fb15417d7b8dd37ed59cb002b555ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b930c85ae8b1c4fd8dff076243466c4da6e22794828f4a7f4827a677104a1ed4a756abc301f79cbb49333be02442c10c0a53085a35b5f5eddf70df34aff3ae5
|
7
|
+
data.tar.gz: c96a953d8d7bf36ecb421a8e985383c9f91c78e540c070d46cfe579c625ad981e81820e034908aafde27d4c2151c513f391c5863d1d5d1617d714325e55f955f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Unreleased
|
2
2
|
|
3
|
+
- Read config from secrets when credentials don't provide it in rails >= 5.2.
|
4
|
+
- Remove botan.io support. It's already shut down, so it should not be a braking change.
|
5
|
+
https://github.com/botanio/sdk#this-service-will-be-shut-down-on-25th-may-2018
|
6
|
+
|
3
7
|
# 0.14.0
|
4
8
|
|
5
9
|
- Make integration & controller specs consistent.
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
[](https://codeclimate.com/github/telegram-bot-rb/telegram-bot)
|
5
5
|
[](https://travis-ci.org/telegram-bot-rb/telegram-bot)
|
6
6
|
|
7
|
-
__Breaking changes in v0.14!__ See [
|
7
|
+
__Breaking changes in v0.14!__ See [upgrade guide](https://github.com/telegram-bot-rb/telegram-bot/wiki/Upgrading-to-0.14).
|
8
8
|
|
9
9
|
Tools for developing Telegram bots. Best used with Rails, but can be used in
|
10
10
|
[standalone app](https://github.com/telegram-bot-rb/telegram-bot/wiki/Not-rails-application).
|
@@ -19,7 +19,7 @@ Package contains:
|
|
19
19
|
- Middleware and routes helpers for production env.
|
20
20
|
- Poller with automatic source-reloader for development env.
|
21
21
|
- Rake tasks to update webhook urls.
|
22
|
-
- __[Async mode](#async-mode)__
|
22
|
+
- __[Async mode](#async-mode)__.
|
23
23
|
Let the queue adapter handle network errors!
|
24
24
|
|
25
25
|
Here is sample [telegram_bot_app](https://github.com/telegram-bot-rb/telegram_bot_app)
|
@@ -55,9 +55,28 @@ require 'telegram/bot'
|
|
55
55
|
|
56
56
|
## Usage
|
57
57
|
|
58
|
+
### Configuration
|
59
|
+
|
60
|
+
While clients can be instantiated explicitly, there is `Telegram.bots_config=` method
|
61
|
+
to configure app-wide clients, which are accessible via `Telegram.bots`.
|
62
|
+
It accepts hash of `{bot_id: bot_config}`, and there is special id `:default`
|
63
|
+
which is used for `Telegram.bot`.
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
Telegram.bots_config = {
|
67
|
+
default: DEFAULT_BOT_TOKEN,
|
68
|
+
chat: {token: CHAT_BOT_TOKEN, username: 'chatbot'},
|
69
|
+
}
|
70
|
+
|
71
|
+
Telegram.bot.get_updates
|
72
|
+
Telegram.bot == Telegram.bots[:default] # true
|
73
|
+
Telegram.bots[:chat].send_message(...)
|
74
|
+
```
|
75
|
+
|
58
76
|
### Configuration in Rails app
|
59
77
|
|
60
|
-
|
78
|
+
In Rails app `Telegram.bots_config` is read from `secrets.yml` automatically
|
79
|
+
from `telegram` section:
|
61
80
|
|
62
81
|
```yml
|
63
82
|
development:
|
@@ -79,6 +98,15 @@ development:
|
|
79
98
|
username: ChatBot
|
80
99
|
```
|
81
100
|
|
101
|
+
For Rails >= 5.2 `Telegram::Bot` searches for config first in credentials and then in secrets.
|
102
|
+
To use credentials as config store, add telegram section to credentials instead of secrets using
|
103
|
+
`rails credentials:edit`. In this case be aware of that [Rails may not load
|
104
|
+
credentials in dev environment by default](https://github.com/telegram-bot-rb/telegram-bot/issues/74#issuecomment-384205609).
|
105
|
+
|
106
|
+
I suggest not using Rails 5.2 credentials because it can lead to leakage of sesitive data
|
107
|
+
and it's more difficult to use in multiple environments. See
|
108
|
+
[secure_credentials](https://github.com/printercu/secure_credentials) gem for better option.
|
109
|
+
|
82
110
|
From now clients will be accessible with `Telegram.bots[:chat]` or `Telegram.bots[:auction]`.
|
83
111
|
Single bot can be accessed with `Telegram.bot` or `Telegram.bots[:default]`.
|
84
112
|
|
@@ -206,7 +234,7 @@ def edit_message(type, params = {}); end
|
|
206
234
|
#### Optional typecasting
|
207
235
|
|
208
236
|
You can enable typecasting of `update` with `telegram-bot-types` by including
|
209
|
-
`Telegram::Bot::
|
237
|
+
`Telegram::Bot::UpdatesController::TypedUpdate`:
|
210
238
|
|
211
239
|
```ruby
|
212
240
|
class Telegram::WebhookController < Telegram::Bot::UpdatesController
|
@@ -494,48 +522,12 @@ While webhooks-mode is prefered, poller still can be used in production.
|
|
494
522
|
See [comparison and examples](https://github.com/telegram-bot-rb/telegram-bot/wiki/Deployment)
|
495
523
|
for details.
|
496
524
|
|
497
|
-
### Botan.io metrics
|
498
|
-
|
499
|
-
Initialize with `bot = Telegram::Bot::Client.new(token, botan: 'botan token')`
|
500
|
-
or just add `botan` key in `secrets.yml`:
|
501
|
-
|
502
|
-
```yml
|
503
|
-
telegram:
|
504
|
-
bot:
|
505
|
-
token: bot_token
|
506
|
-
botan: botan_token
|
507
|
-
```
|
508
|
-
|
509
|
-
Access to Botan client with `bot.botan`.
|
510
|
-
Use `bot.botan.track(event, uid, payload)` to track events.
|
511
|
-
|
512
|
-
There are some helpers for controllers in `Telegram::Bot::Botan::ControllerHelpers`:
|
513
|
-
|
514
|
-
```ruby
|
515
|
-
class Telegram::WebhookController < Telegram::Bot::UpdatesController
|
516
|
-
include Telegram::Bot::Botan::ControllerHelpers
|
517
|
-
|
518
|
-
# This will track with event: action_name & data: payload
|
519
|
-
before_action :botan_track_action
|
520
|
-
|
521
|
-
def smth(*)
|
522
|
-
# This will track event for current user only when botan is configured.
|
523
|
-
botan_track :my_event, custom_data
|
524
|
-
|
525
|
-
# or get access directly to botan client:
|
526
|
-
botan.track(...)
|
527
|
-
end
|
528
|
-
end
|
529
|
-
```
|
530
|
-
|
531
|
-
There is no stubbing for botan clients, so don't set botan token in tests.
|
532
|
-
|
533
525
|
### Async mode
|
534
526
|
|
535
527
|
There is built in support for async requests using ActiveJob. Without Rails
|
536
528
|
you can implement your own worker class to handle such requests. This allows:
|
537
529
|
|
538
|
-
- Process updates very fast, without waiting for telegram
|
530
|
+
- Process updates very fast, without waiting for telegram responses.
|
539
531
|
- Handle and retry network and other errors with queue adapter.
|
540
532
|
- ???
|
541
533
|
|
@@ -543,7 +535,7 @@ Instead of performing request instantly client serializes it, pushes to queue,
|
|
543
535
|
and immediately return control back. The job is then fetched with a worker
|
544
536
|
and real API request is performed. And this all is absolutely transparent for the app.
|
545
537
|
|
546
|
-
To enable this mode add `async: true` to bot's
|
538
|
+
To enable this mode add `async: true` to bot's config.
|
547
539
|
For more information and custom configuration check out
|
548
540
|
[docs](http://www.rubydoc.info/github/telegram-bot-rb/telegram-bot/master/Telegram/Bot/Async) or
|
549
541
|
[source](https://github.com/telegram-bot-rb/telegram-bot/blob/master/lib/telegram/bot/async.rb).
|
data/lib/telegram/bot.rb
CHANGED
data/lib/telegram/bot/async.rb
CHANGED
@@ -1,20 +1,15 @@
|
|
1
1
|
module Telegram
|
2
2
|
module Bot
|
3
|
-
# Telegram
|
3
|
+
# Telegram clients can perform requests in async way with
|
4
4
|
# any job adapter (ActiveJob by default). Using Rails you don't need any
|
5
5
|
# additional configuration. However you may want to enable async requests
|
6
|
-
# by default with `async: true` in `secrets.yml`.
|
7
|
-
# async setting from client and must be configured separately.
|
6
|
+
# by default with `async: true` in `secrets.yml`.
|
8
7
|
#
|
9
8
|
# telegram:
|
10
9
|
# bots:
|
11
10
|
# chat_async:
|
12
11
|
# token: secret
|
13
12
|
# async: true # enable async mode for client
|
14
|
-
# botan: botan_token # in this way botan will not be async
|
15
|
-
# botan: # in this way - it's in async mode
|
16
|
-
# token: botan_token
|
17
|
-
# async: true
|
18
13
|
#
|
19
14
|
# Without Rails To start using async requests
|
20
15
|
# initialize client with `id` kwarg and make sure the client is
|
data/lib/telegram/bot/client.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Generated with bin/fetch-telegram-methods
|
2
|
-
# Bot API
|
2
|
+
# Bot API 4.1
|
3
3
|
|
4
4
|
getUpdates
|
5
5
|
setWebhook
|
@@ -13,6 +13,7 @@ sendPhoto
|
|
13
13
|
sendAudio
|
14
14
|
sendDocument
|
15
15
|
sendVideo
|
16
|
+
sendAnimation
|
16
17
|
sendVoice
|
17
18
|
sendVideoNote
|
18
19
|
sendMediaGroup
|
@@ -46,6 +47,7 @@ answerCallbackQuery
|
|
46
47
|
|
47
48
|
editMessageText
|
48
49
|
editMessageCaption
|
50
|
+
editMessageMedia
|
49
51
|
editMessageReplyMarkup
|
50
52
|
deleteMessage
|
51
53
|
|
@@ -63,6 +65,8 @@ sendInvoice
|
|
63
65
|
answerShippingQuery
|
64
66
|
answerPreCheckoutQuery
|
65
67
|
|
68
|
+
setPassportDataErrors
|
69
|
+
|
66
70
|
sendGame
|
67
71
|
setGameScore
|
68
72
|
getGameHighScores
|
@@ -40,11 +40,6 @@ module Telegram
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
# Hash of botan clients made from #bots.
|
44
|
-
def botans
|
45
|
-
@botans ||= bots.map { |k, v| [k, v.botan] }.to_h
|
46
|
-
end
|
47
|
-
|
48
43
|
# Returns config for .bots method. By default uses `telegram['bots']` section
|
49
44
|
# from `secrets.yml` merging `telegram['bot']` at `:default` key.
|
50
45
|
#
|
@@ -53,10 +48,12 @@ module Telegram
|
|
53
48
|
@bots_config ||=
|
54
49
|
if defined?(Rails.application)
|
55
50
|
app = Rails.application
|
56
|
-
store = app.respond_to?(:credentials)
|
57
|
-
secrets
|
58
|
-
|
59
|
-
|
51
|
+
store = app.credentials[:telegram] if app.respond_to?(:credentials)
|
52
|
+
store ||= app.secrets[:telegram] if app.respond_to?(:secrets)
|
53
|
+
store ||= {}
|
54
|
+
store = store.with_indifferent_access
|
55
|
+
store.fetch(:bots, {}).symbolize_keys.tap do |config|
|
56
|
+
default = store[:bot]
|
60
57
|
config[:default] = default if default
|
61
58
|
end
|
62
59
|
else
|
@@ -69,7 +66,6 @@ module Telegram
|
|
69
66
|
@bots = nil
|
70
67
|
@bot = nil
|
71
68
|
@bots_config = nil
|
72
|
-
@botans = nil
|
73
69
|
end
|
74
70
|
end
|
75
71
|
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
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Melentiev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -123,9 +123,6 @@ files:
|
|
123
123
|
- lib/tasks/telegram-bot.rake
|
124
124
|
- lib/telegram/bot.rb
|
125
125
|
- lib/telegram/bot/async.rb
|
126
|
-
- lib/telegram/bot/botan.rb
|
127
|
-
- lib/telegram/bot/botan/client_helpers.rb
|
128
|
-
- lib/telegram/bot/botan/controller_helpers.rb
|
129
126
|
- lib/telegram/bot/client.rb
|
130
127
|
- lib/telegram/bot/client/api_helper.rb
|
131
128
|
- lib/telegram/bot/client/api_methods.txt
|
data/lib/telegram/bot/botan.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
module Telegram
|
2
|
-
module Bot
|
3
|
-
class Botan
|
4
|
-
TRACK_URI = 'https://api.botan.io/track'.freeze
|
5
|
-
|
6
|
-
autoload :ClientHelpers, 'telegram/bot/botan/client_helpers'
|
7
|
-
autoload :ControllerHelpers, 'telegram/bot/botan/controller_helpers'
|
8
|
-
class Error < Bot::Error; end
|
9
|
-
|
10
|
-
extend Initializers
|
11
|
-
prepend Async
|
12
|
-
include DebugClient
|
13
|
-
|
14
|
-
class << self
|
15
|
-
def by_id(id)
|
16
|
-
Telegram.botans[id]
|
17
|
-
end
|
18
|
-
|
19
|
-
def prepare_async_args(method, uri, query = {}, body = nil)
|
20
|
-
[method.to_s, uri.to_s, Async.prepare_hash(query), body]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
attr_reader :client, :token
|
25
|
-
|
26
|
-
def initialize(token = nil, **options)
|
27
|
-
@client = HTTPClient.new
|
28
|
-
@token = token || options[:token]
|
29
|
-
end
|
30
|
-
|
31
|
-
def track(event, uid, payload = {})
|
32
|
-
request(:post, TRACK_URI, {name: event, uid: uid}, payload.to_json)
|
33
|
-
end
|
34
|
-
|
35
|
-
def request(method, uri, query = {}, body = nil)
|
36
|
-
res = http_request(method, uri, query.merge(token: token), body)
|
37
|
-
status = res.status
|
38
|
-
return JSON.parse(res.body) if status < 300
|
39
|
-
result = JSON.parse(res.body) rescue nil # rubocop:disable RescueModifier
|
40
|
-
err_msg = "#{res.reason}: #{result && result['info'] || '-'}"
|
41
|
-
raise Error, err_msg
|
42
|
-
end
|
43
|
-
|
44
|
-
def http_request(method, uri, query, body)
|
45
|
-
client.request(method, uri, query, body)
|
46
|
-
end
|
47
|
-
|
48
|
-
def inspect
|
49
|
-
"#<#{self.class.name}##{object_id}(#{@id})>"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Telegram
|
2
|
-
module Bot
|
3
|
-
class Botan
|
4
|
-
# Helpers for botan.io metrics.
|
5
|
-
module ClientHelpers
|
6
|
-
attr_reader :botan
|
7
|
-
|
8
|
-
def initialize(*, botan: nil, **options)
|
9
|
-
super
|
10
|
-
@botan = Botan.wrap(botan, id: id) if botan
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Telegram
|
2
|
-
module Bot
|
3
|
-
class Botan
|
4
|
-
# Helpers for botan.io metrics.
|
5
|
-
module ControllerHelpers
|
6
|
-
class MissingFrom < Error; end
|
7
|
-
|
8
|
-
protected
|
9
|
-
|
10
|
-
def botan
|
11
|
-
@botan ||= bot.try!(:botan)
|
12
|
-
end
|
13
|
-
|
14
|
-
# Track custom event for user taken from `from` field:
|
15
|
-
#
|
16
|
-
# botan_track :my_event, {data: :val}
|
17
|
-
#
|
18
|
-
def botan_track(event, data = {})
|
19
|
-
raise MissingFrom, 'Can not track without user' unless from
|
20
|
-
botan.try! { |x| x.track(event, from['id'], data) }
|
21
|
-
end
|
22
|
-
|
23
|
-
# Track current action and payload for current user. Best used with `before_action`:
|
24
|
-
#
|
25
|
-
# before_action :botan_track_action
|
26
|
-
#
|
27
|
-
def botan_track_action
|
28
|
-
botan_track(action_name, payload)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|