botolo 0.0.1 → 0.10.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/bin/botolo +25 -0
- data/botolo.gemspec +2 -0
- data/lib/botolo/bot/behaviour.rb +11 -0
- data/lib/botolo/bot/engine.rb +102 -0
- data/lib/botolo/version.rb +1 -1
- data/lib/botolo.rb +1 -4
- metadata +35 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3700d7909e38446f210f833a5056d4b16f9f84ae
|
4
|
+
data.tar.gz: 14ef0e0ee8af888d8c4c7f82bee3f6f266c3057f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 347960ca6554b41963cd1075001df23de440e0483f8536052998bdf53460e744223f474ae7b4292831a12035fa2c506122d9204a5fc1fb352e7f30adcaeb8a35
|
7
|
+
data.tar.gz: 62bae3351919d3093e4dab14c4254cc3ed0ab6ec2f1177531859e1f947b3427170d0299f7581156bb5ad35c1ff8986c6b91077bc9463388d0f1219296e3b0b2a
|
data/bin/botolo
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'botolo'
|
4
|
+
require 'openssl'
|
5
|
+
require 'codesake_commons'
|
6
|
+
|
7
|
+
DEFAULT_BEHAVIOUR = "./lib/botolo/bot/behaviour.rb"
|
8
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
9
|
+
|
10
|
+
$logger = Codesake::Commons::Logging.instance
|
11
|
+
trap("INT") { $logger.helo('bot is shutting down'); Kernel.exit(0) }
|
12
|
+
|
13
|
+
behaviour_file = DEFAULT_BEHAVIOUR
|
14
|
+
config_file = nil
|
15
|
+
config_file = ARGV[0] if ARGV.count == 1
|
16
|
+
|
17
|
+
$logger.die "usage: botolo bot_configuration_file" if config_file.nil?
|
18
|
+
|
19
|
+
bot = Botolo::Bot::Engine.new({:config=>config_file})
|
20
|
+
$logger.log "#{bot.name} is online" if bot.online?
|
21
|
+
$logger.log "#{bot.name} is offline" unless bot.online?
|
22
|
+
bot.run if bot.online?
|
23
|
+
|
24
|
+
|
25
|
+
|
data/botolo.gemspec
CHANGED
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'twitter'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Botolo
|
5
|
+
module Bot
|
6
|
+
|
7
|
+
# This is the main bot class, it is responsible of:
|
8
|
+
# * reading configuration
|
9
|
+
# * using Twitter APIs
|
10
|
+
# * do something
|
11
|
+
class Engine
|
12
|
+
|
13
|
+
def initialize(options={})
|
14
|
+
@start_time = Time.now
|
15
|
+
@online = false
|
16
|
+
@config = read_conf(options[:config])
|
17
|
+
authenticate
|
18
|
+
@tasks = @config['task']
|
19
|
+
behaviour = File.join(".", @config['bot']['behaviour']) unless @config['bot']['behaviour'].nil?
|
20
|
+
|
21
|
+
$logger.helo "#{name} v#{version} is starting up"
|
22
|
+
|
23
|
+
begin
|
24
|
+
load behaviour
|
25
|
+
$logger.log "using #{behaviour} as bot behaviour"
|
26
|
+
@behaviour = Botolo::Bot::Behaviour.new({:name=>name})
|
27
|
+
rescue => e
|
28
|
+
$logger.err(e.message)
|
29
|
+
require 'botolo/bot/behaviour'
|
30
|
+
$logger.log "reverting to default dummy behaviour"
|
31
|
+
@behaviour = Botolo::Bot::Behaviour.new({:name=>name})
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def calc_sleep_time(task)
|
38
|
+
|
39
|
+
s = /every (\d) (s|m|h|d|w|y)/.match task
|
40
|
+
|
41
|
+
return 300 if s.nil? # safe fallback is 5 minutes sleeping
|
42
|
+
|
43
|
+
return s[1].to_i if s[2] == 's'
|
44
|
+
return s[1].to_i * 60 if s[2] == 'm'
|
45
|
+
return s[1].to_i * 60 * 60 if s[2] == 'h'
|
46
|
+
return s[1].to_i * 60 * 60 * 24 if s[2] == 'd'
|
47
|
+
return s[1].to_i * 60 * 60 * 24 * 7 if s[2] == 'w'
|
48
|
+
return s[1].to_i * 60 * 60 * 24 * 7 * 52 if s[2] == 'y'
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def run
|
53
|
+
$logger.log "entering main loop"
|
54
|
+
while true
|
55
|
+
@tasks.each do |task|
|
56
|
+
begin
|
57
|
+
@behaviour.send(task["action"].to_sym) if @behaviour.respond_to? task["action"].to_sym
|
58
|
+
rescue => e
|
59
|
+
$logger.err "#{task["action"]} failed (#{e.message})"
|
60
|
+
end
|
61
|
+
sleep calc_sleep_time(task["schedule"])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
def authenticate
|
67
|
+
begin
|
68
|
+
Twitter.configure do |config|
|
69
|
+
config.consumer_key = @config['twitter']['consumer_key']
|
70
|
+
config.consumer_secret = @config['twitter']['consumer_secret']
|
71
|
+
config.oauth_token = @config['twitter']['oauth_token']
|
72
|
+
config.oauth_token_secret = @config['twitter']['oauth_token_secret']
|
73
|
+
end
|
74
|
+
@online = true
|
75
|
+
rescue Exception => e
|
76
|
+
$logger.err e.message
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def online?
|
81
|
+
@online
|
82
|
+
end
|
83
|
+
|
84
|
+
def name
|
85
|
+
return @config['bot']['name']
|
86
|
+
end
|
87
|
+
def version
|
88
|
+
return @config['bot']['version']
|
89
|
+
end
|
90
|
+
|
91
|
+
def uptime
|
92
|
+
Time.now - @start_time
|
93
|
+
end
|
94
|
+
|
95
|
+
def read_conf(filename=nil)
|
96
|
+
return {} if filename.nil? or ! File.exist?(filename)
|
97
|
+
return YAML.load_file(filename)
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/lib/botolo/version.rb
CHANGED
data/lib/botolo.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: botolo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paolo Perego
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,10 +38,39 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: twitter
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codesake_commons
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
description: botolo is a bot engine written in ruby
|
42
70
|
email:
|
43
71
|
- thesp0nge@gmail.com
|
44
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- botolo
|
45
74
|
extensions: []
|
46
75
|
extra_rdoc_files: []
|
47
76
|
files:
|
@@ -50,8 +79,11 @@ files:
|
|
50
79
|
- LICENSE.txt
|
51
80
|
- README.md
|
52
81
|
- Rakefile
|
82
|
+
- bin/botolo
|
53
83
|
- botolo.gemspec
|
54
84
|
- lib/botolo.rb
|
85
|
+
- lib/botolo/bot/behaviour.rb
|
86
|
+
- lib/botolo/bot/engine.rb
|
55
87
|
- lib/botolo/version.rb
|
56
88
|
homepage: http://codesake.com
|
57
89
|
licenses:
|