-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclient.rb
More file actions
60 lines (50 loc) · 1.43 KB
/
client.rb
File metadata and controls
60 lines (50 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Source: /usr/lib/ruby/gems/2.7.0/gems/telegram-bot-ruby-0.8.5/lib/telegram/bot/client.rb
module Telegram
module Bot
class Client
attr_reader :api, :options
attr_accessor :logger
def self.run(*args, &block)
new(*args).run(&block)
end
def initialize(token, h = {})
@options = default_options.merge(h)
@api = Api.new(token)
@logger = options.delete(:logger)
end
def run
yield self
end
def listen(&block)
logger.info('Starting bot')
running = true
Signal.trap('INT') { running = false }
fetch_updates(&block) while running
exit
end
def fetch_updates
response = api.getUpdates(options)
return unless response['ok']
response['result'].each do |data|
update = Types::Update.new(data)
@options[:offset] = update.update_id.next
message = update.current_message
log_incoming_message(message)
yield message
end
rescue Faraday::Error::TimeoutError
retry
end
private
def default_options
{ offset: 0, timeout: 20, logger: NullLogger.new }
end
def log_incoming_message(message)
uid = message.nil? ? nil : ( message.from ? message.from.id : nil)
logger.info(
format('Incoming message: text="%s" uid=%s', message, uid)
)
end
end
end
end