jabber_bot 0.0.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 +7 -0
- data/lib/jabber_bot.rb +113 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e6ce4dbdf977033c6c50068456e7b69394a4319b
|
4
|
+
data.tar.gz: fb660ad339c082f19a9f2898d9ff6a79b8341b01
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 146a25d9cd43b5b437d6e04e6f09589403028e1a5340cb66db203399587f5ff6ea672ce4e1c0508490df41b48e43d893b378208d80d49735517fc806439e8e3d
|
7
|
+
data.tar.gz: 2943be9329335e8ec2552d76426684c1df0cbe08728983f511d8755360dc7d0016bcf475d1a6651bcfefce92b3b805fe6b2f270848697f95c00eb49985638b5f
|
data/lib/jabber_bot.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'xmpp4r'
|
2
|
+
include Jabber
|
3
|
+
|
4
|
+
class JabberBot
|
5
|
+
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
@keep_alive_status = false
|
9
|
+
@commands = {}
|
10
|
+
@jabber = Client.new(JID::new(@config['JID'] + '/' + @config['resource']))
|
11
|
+
#add_default_commands
|
12
|
+
keep_alive
|
13
|
+
end
|
14
|
+
|
15
|
+
def connect
|
16
|
+
begin
|
17
|
+
if not @jabber.is_connected?
|
18
|
+
@keep_alive_status = false
|
19
|
+
@jabber.connect(@config['host'])
|
20
|
+
@jabber.auth(@config['password'])
|
21
|
+
@jabber.send(Presence.new.set_type(:available))
|
22
|
+
end
|
23
|
+
rescue Exception => e
|
24
|
+
puts "Error connecting: #{e} (#{e.class})!"
|
25
|
+
ensure
|
26
|
+
@keep_alive_status = true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def disconnect
|
31
|
+
@keep_alive_status = false;
|
32
|
+
@jabber.close
|
33
|
+
end
|
34
|
+
|
35
|
+
def listen
|
36
|
+
@jabber.add_message_callback do |message|
|
37
|
+
handle_message(message) unless message.body.to_s == ''
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def say(to, message)
|
42
|
+
@jabber.send(Message.new(to, message).set_type(:chat))
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_command(command, syntax, description, public = false, &callback)
|
46
|
+
@commands[command.downcase] = {
|
47
|
+
'syntax' => syntax,
|
48
|
+
'description' => description,
|
49
|
+
'callback' => callback,
|
50
|
+
'public' => public
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def run_command(command, params)
|
55
|
+
return @commands[command]['callback'].call(params)
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def handle_message(message)
|
60
|
+
command = message.body.to_s.split(' ', 2)[0]
|
61
|
+
command = command_available?(command)
|
62
|
+
Thread.new do
|
63
|
+
begin
|
64
|
+
if @config['operators'].include?(message.from.to_s.sub(/\/.+$/, '')) or @commands[command]['public']
|
65
|
+
params = {}
|
66
|
+
params['parameters'] = message.body.to_s.split(' ', 2)[1]
|
67
|
+
params['jabber'] = self
|
68
|
+
params['message'] = message
|
69
|
+
response = run_command(command, params)
|
70
|
+
else
|
71
|
+
response = 'Sorry, this command is not public or you\'re not an operator.'
|
72
|
+
end
|
73
|
+
rescue Exception => e
|
74
|
+
response = "#{e} (#{e.class})!"
|
75
|
+
ensure
|
76
|
+
say(sender, response.to_s)
|
77
|
+
end
|
78
|
+
end unless command == nil
|
79
|
+
end
|
80
|
+
|
81
|
+
def command_available?(input)
|
82
|
+
input = input.downcase.chomp(' ')
|
83
|
+
if @commands.has_key?(input)
|
84
|
+
return input
|
85
|
+
else
|
86
|
+
@commands.each_key do |command|
|
87
|
+
if command.index(input, 0) == 0
|
88
|
+
return command
|
89
|
+
end
|
90
|
+
end
|
91
|
+
return nil
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def keep_alive
|
96
|
+
Thread.new do
|
97
|
+
while true
|
98
|
+
if @keep_alive_status
|
99
|
+
if @jabber.is_connected?
|
100
|
+
begin
|
101
|
+
@jabber.send(Presence.new.set_type(:available))
|
102
|
+
rescue Exception => e
|
103
|
+
puts "Error while keeping alive: #{e} (#{e.class})!"
|
104
|
+
end
|
105
|
+
else
|
106
|
+
connect
|
107
|
+
end
|
108
|
+
end
|
109
|
+
sleep(120)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jabber_bot
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Krunoslav Husak
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: xmpp4r
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Convert numbers e.g. between 0.0 - 1.0 and 0.0 - Math::PI and vice-versa.
|
28
|
+
email: kruno@binel.hr
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/jabber_bot.rb
|
34
|
+
homepage: https://github.com/h00s/jabber_bot
|
35
|
+
licenses:
|
36
|
+
- MIT
|
37
|
+
metadata: {}
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 2.2.2
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Easily convert numbers between different ranges
|
58
|
+
test_files: []
|