action_bot 0.1.16 → 0.1.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95e26081f081110efb59027787e65ce2586b2fce6ae9e551d747df06e8cb96b0
4
- data.tar.gz: 50f545c38eebbfd76d4f4f5596a34b4961fc523ed5a42909afbe2fee5713b8e6
3
+ metadata.gz: ae9a8fba1d7abc68cb0e5846d527a5bfa4314f2db822199b8c28b5b7822a8e37
4
+ data.tar.gz: 7515e24bee82141d2b2116382c8cab1b99b38371eec61bc565915548cee45047
5
5
  SHA512:
6
- metadata.gz: 04e7223eb04b59df79696aa7a808669beaaae36210e382d8c365e4522940cb6023a0db092b6a3d2d0c6e2942df8a2906dfc128e09500f511575fcf43ae03491e
7
- data.tar.gz: 1e0e88ebad472f1d9e4ed0fb218fadbf2072d4c610108e9941c15f6d18d61a65c52264f6c80873a1a3f85498316c44ab5ba6108a1a17cbc0bb829f8b442ae23d
6
+ metadata.gz: a7cadcadd6c9b9384e8fb133ff6c71976d4490c03e153c211e982d1546307cea336963c3714b4bd9770d365b53f562d777551c5c687d198f7ce451e8b018b4e3
7
+ data.tar.gz: eb3f29669a85823e0ff77ac13c0f4ebfabc245701bc5be08b9fd58f37b3825bba69c93e4de85f90ffa0a4f4ade8e57dd8801b14dfcf1b9434c93cd28428e738d
@@ -3,12 +3,17 @@ module ActionBot
3
3
  include Configurable.with(:api, :bot)
4
4
 
5
5
  def on(condition, **kwargs)
6
+ puts "#{Time.now}: Received:- #{kwargs}"
6
7
  return unless condition
8
+ puts "Passed condition: #{condition}"
7
9
 
8
10
  params = kwargs.delete(:params) || {}
9
11
  controller, action = kwargs.first
10
12
  controller_object = "#{controller.to_s.camelize}Controller".constantize.new
13
+ puts "controller: #{controller.to_s.camelize}Controller, action: #{action}"
11
14
  raise "No such method: #{action} for #{controller}" unless controller_object.respond_to?(action)
15
+
16
+ puts "Receiving..."
12
17
  controller_object.params = ActionController::Parameters.new params
13
18
  controller_object.public_send(action)
14
19
  throw(:done)
@@ -12,7 +12,7 @@ class AppConfigurator
12
12
  def self.configure_db
13
13
  DBConfigurator.configure do |configuration|
14
14
  configuration.db_url = config.db_url
15
- end
15
+ end if config.db_url
16
16
  end
17
17
 
18
18
  def self.configure_i18n
@@ -0,0 +1,7 @@
1
+ require 'action_bot'
2
+
3
+ require_relative '../config/configuration'
4
+ require_relative '../bots/example_long_polling_bot'
5
+
6
+
7
+ ExampleLongPollingBot.call
@@ -0,0 +1,20 @@
1
+ require 'sinatra'
2
+ require 'action_bot'
3
+
4
+ require_relative '../config/configuration'
5
+ require_relative '../bots/example_webhook_bot'
6
+ use Rack::Logger
7
+
8
+ helpers do
9
+ def logger
10
+ request.logger
11
+ end
12
+ end
13
+
14
+ # Telegram requires GET endpoint to setup a webhook
15
+ get '/webhook' do
16
+ end
17
+
18
+ post '/webhook' do
19
+ # Do stuff with request here
20
+ end
@@ -0,0 +1,35 @@
1
+ class ExampleLongPollingBot < ActionBot::Base
2
+ def call
3
+ bot_runner.run do |bot|
4
+ ActionBot::Base.configure do |config|
5
+ config.bot = bot
6
+ end
7
+
8
+ bot.listen do |message|
9
+ @message = message
10
+ run
11
+ end
12
+ end
13
+ end
14
+
15
+ def self.call
16
+ new.call
17
+ end
18
+
19
+ def run
20
+ return unless message_legal?
21
+
22
+ on @message == 'hello_world', hello: :world, params: {
23
+ tg_chat_id: tg_chat_id
24
+ }
25
+ end
26
+
27
+ private
28
+
29
+ def message_legal?
30
+ @message.respond_to?(:text) && @message.text
31
+
32
+ def tg_chat_id
33
+ @message.chat.id
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+ class ExampleWebhookBot < ActionBot::Base
2
+ def initialize
3
+ @api = Telegram::Bot::Api.new(AppConfigurator.config.token)
4
+ ActionBot::Base.configure do |config|
5
+ config.api = @api
6
+ end
7
+ end
8
+
9
+ def run(message)
10
+ @message = message
11
+
12
+ return unless message_legal?
13
+ catch(:done) do
14
+ on message == 'hello_world', hello: :world
15
+ end
16
+ end
17
+
18
+ def message_legal?
19
+ @message.respond_to?(:text) && @message.text
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ AppConfigurator.configure do |config|
2
+ # Configure bot
3
+ config.token = begin
4
+ YAML::load(IO.read('config/secrets/token.yml'))['telegram_bot_token']
5
+ rescue Errno::ENOENT
6
+ ENV["TOKEN"]
7
+ end
8
+
9
+ # Configure database
10
+ # config.db_url = begin
11
+ # YAML::load(IO.read('config/secrets/database.yml'))["database_url"]
12
+ # rescue Errno::ENOENT
13
+ # ENV["DATABASE_URL"]
14
+ # end
15
+
16
+ # Configure i18n
17
+ config.i18n_locale = :en
18
+ config.i18n_load_path = Dir['config/secrets/locales.yml']
19
+ config.i18n_available_locales = %i[en]
20
+ end
@@ -0,0 +1 @@
1
+ database_url: postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
@@ -0,0 +1,2 @@
1
+ en:
2
+ hello_world: "Hello world!"
@@ -0,0 +1 @@
1
+ telegram_bot_token: your-tg-bot-token
@@ -0,0 +1,2 @@
1
+ class BotsController < ActionBot::Controller
2
+ end
@@ -0,0 +1,5 @@
1
+ class HelloController < BotsController
2
+ def world
3
+ notify(params[:tg_chat_id], t('hello_world'))
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Barseek
@@ -126,6 +126,16 @@ files:
126
126
  - lib/configuration/configurators/db_configurator.rb
127
127
  - lib/configuration/configurators/i18n_configurator.rb
128
128
  - lib/tasks/bot_scaffold.rake
129
+ - scaffolds/bin/example_long_polling_bot_runner.rb
130
+ - scaffolds/bin/example_webhook_bot_runner.rb
131
+ - scaffolds/bots/example_long_polling_bot.rb
132
+ - scaffolds/bots/example_webhook_bot.rb
133
+ - scaffolds/config/configuration.rb
134
+ - scaffolds/config/secrets/database.yml
135
+ - scaffolds/config/secrets/locales.yml
136
+ - scaffolds/config/secrets/token.yml
137
+ - scaffolds/controllers/bots_controller.rb
138
+ - scaffolds/controllers/hello_controller.rb
129
139
  homepage: https://rubygems.org/gems/hola
130
140
  licenses:
131
141
  - MIT