fantasy-irc 0.2.1 → 0.2.2

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.
data/README.md CHANGED
@@ -22,17 +22,17 @@ TODO: Write usage instructions here
22
22
 
23
23
  ## Getting support
24
24
 
25
- There is a support channel on irc.jdqirc.net in #fantasy where you
26
- can get live help on the gem. Getting answers in a IRC channel can
27
- take some time but as you are reading the README of a IRC gem, you
28
- probably already knew this.
25
+ There is a support channel on freenode in #fantasy where you can get
26
+ live help on the gem. Getting answers in a IRC channel can take some
27
+ time but as you are reading the README of a IRC gem, you probably
28
+ already knew this.
29
29
 
30
30
  TLDR:
31
31
 
32
32
  Support?
33
33
 
34
- irc.jdqirc.net #fantasy
35
- irc://irc.jdqirc.net/fantasy
34
+ irc.freenode.net #fantasy
35
+ irc://irc.freenode.net/fantasy
36
36
 
37
37
  ## Contributing
38
38
 
@@ -8,9 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.files = `git ls-files`.split("\n")
9
9
  s.name = "fantasy-irc"
10
10
  s.require_paths = ['lib']
11
- s.version = "0.2.1"
11
+ s.version = "0.2.2"
12
12
 
13
13
  s.rubyforge_project = s.name
14
14
  s.add_runtime_dependency "array-unique", "~> 1.1.1"
15
- s.add_runtime_dependency "ddate", "~> 1.0.0"
16
15
  end
@@ -54,6 +54,9 @@ module Fantasy
54
54
  if not @connected then
55
55
  raise "not connected to a server!"
56
56
  end
57
+
58
+ # remove everything after a newline
59
+ s.gsub!(/\n.*$/, "")
57
60
  puts "<-- #{s}"
58
61
  @data[:socket].puts "#{s}\n"
59
62
  end
@@ -108,7 +111,8 @@ module Fantasy
108
111
 
109
112
  elsif (tok[1] == "JOIN") then
110
113
  # user joined
111
- room = self.rooms.by_name(tok[2][1,tok[2].length])
114
+ room_name = tok[2].gsub(/^:/, '') # remove leadig : (on some networks, but not all!)
115
+ room = self.rooms.by_name(room_name)
112
116
  user = self.users.create(tok[0][1,tok[0].length])
113
117
 
114
118
  # add user to room and room to user
@@ -161,8 +165,8 @@ module Fantasy
161
165
 
162
166
  puts "!!! user #{user} quit."
163
167
  # remove user from all rooms
164
- self.rooms.all.values.each do |room|
165
- room.users.delete user
168
+ self.rooms.all.values.each do |r|
169
+ r.users.delete user
166
170
  end
167
171
  user.reset
168
172
 
@@ -186,7 +190,6 @@ module Fantasy
186
190
  @running = Time.now.to_i
187
191
  last_tick = @running
188
192
  last_ping = @running
189
- last_session_ping = @running
190
193
 
191
194
  loop do
192
195
  time_now = Time.now
@@ -12,7 +12,22 @@ module Fantasy
12
12
  end
13
13
 
14
14
  def load name
15
- Kernel::load "plugins/#{name}.rb"
15
+ local = File.join(File.dirname($0), "plugins")
16
+ vendor = File.join(File.dirname(__FILE__), "..", "plugins")
17
+ [*name].each do |n|
18
+ file = "#{n}.rb"
19
+ local_file = File.join(local, file)
20
+ vendor_file = File.join(vendor, file)
21
+ if File.exists?(local_file)
22
+ puts "[plugin] Loading #{file} (local)."
23
+ Kernel.load local_file
24
+ elsif File::exists?(vendor_file)
25
+ puts "[plugin] Loading #{file} (vendor)."
26
+ Kernel.load vendor_file
27
+ else
28
+ puts "[plugin] #{file} could not be found."
29
+ end
30
+ end
16
31
  end
17
32
 
18
33
  def command command, data, args
@@ -56,7 +71,14 @@ class Plugin
56
71
  @handlers.each do |pattern, block|
57
72
  if command.match(pattern) then
58
73
  puts "#{block} handles #{command}"
59
- break block.call data, args
74
+ begin
75
+ block.call data, args
76
+ rescue Exception => e
77
+ puts "#{block} failed with Exception #{e}"
78
+ puts e.backtrace
79
+ end
80
+
81
+ break
60
82
  end
61
83
  end
62
84
  end
@@ -46,6 +46,7 @@ module Fantasy
46
46
  puts "New User #{self.object_id} with name #{@name}"
47
47
  @connection = connection
48
48
  @rooms = Array::Unique.new
49
+ @ignored = false
49
50
  end
50
51
 
51
52
  # resets user information
@@ -0,0 +1,36 @@
1
+ require 'json'
2
+ require 'open-uri'
3
+ require 'timeout'
4
+
5
+ class HackerSays < Plugin
6
+ def initialize name
7
+ super
8
+ self.handle(/^hackersays$/i) do |data|
9
+ begin
10
+ Timeout::timeout(2) {
11
+ say_quote(data[:room])
12
+ }
13
+ rescue Timeout::Error
14
+ data[:room].say("Request to hackersays.com timed out.")
15
+ end
16
+ end
17
+ end
18
+
19
+ def say_quote room
20
+ quote = get_quote()
21
+ if quote.nil?
22
+ room.say "Could not fetch a quote. :-("
23
+ else
24
+ room.say "\u{201C}#{quote['c']}\u{201D} \u{2014} \002#{quote['a']}\002 \00315[Quote \##{quote['id']}]\003"
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def get_quote
31
+ return JSON::load(open("http://hackersays.com/quote").read)
32
+ end
33
+ end
34
+
35
+ plugin = HackerSays.new "hackersays"
36
+ $bot.plugins.add(plugin)
@@ -0,0 +1,41 @@
1
+ class Magic8Ball < Plugin
2
+ attr_reader :answers
3
+
4
+ def initialize name
5
+ super
6
+
7
+ @answers = [
8
+ # Positive
9
+ "It is certain",
10
+ "It is decidedly so",
11
+ "Without a doubt",
12
+ "Yes - definitely",
13
+ "You may rely on it",
14
+ "As I see it, yes",
15
+ "Most likely",
16
+ "Outlook good",
17
+ "Yes",
18
+ "Signs point to yes",
19
+ # Neutral
20
+ "Reply hazy, try again",
21
+ "Ask again later",
22
+ "Better not tell you now",
23
+ "Cannot predict now",
24
+ "Concentrate and ask again",
25
+ # Negative
26
+ "Don't count on it",
27
+ "My reply is no",
28
+ "My sources say no",
29
+ "Outlook not so good",
30
+ "Very doubtful"
31
+ ]
32
+ end
33
+ end
34
+
35
+ plugin = Magic8Ball.new "8ball"
36
+
37
+ plugin.handle(/^8ball$/i) do |data|
38
+ data[:room].say plugin.answers.sample
39
+ end
40
+
41
+ $bot.plugins.add(plugin)
@@ -1,22 +1,22 @@
1
1
  plugin = Plugin.new "nettools"
2
2
 
3
3
  plugin.handle(/^ping$/i) do |data, args|
4
- if args.empty? then
4
+ if args.empty?
5
5
  next data[:room].say "ping needs more arguments"
6
6
  end
7
7
 
8
- if args[0].match(/[^a-z0-9\.-]/i) then
8
+ if args[0].match(/[^a-z0-9\.-]/i)
9
9
  next data[:room].say "invalid characters in argument"
10
10
  end
11
11
 
12
12
  Thread.new do
13
13
  ping = `/usr/bin/env ping -w 3 -c 1 -- #{args[0]} 2>&1`
14
14
 
15
- if ping.match /unknown host (.+)/ then
15
+ if ping.match(/unknown host (.+)/)
16
16
  data[:room].say "unknown host #{$1}"
17
- elsif ping.match /^(64 bytes.+)/ then
17
+ elsif ping.match(/^(64 bytes.+)/)
18
18
  data[:room].say "#{$1}"
19
- elsif ping.match /0 received/m then
19
+ elsif ping.match(/0 received/m)
20
20
  data[:room].say "no reply :-("
21
21
  else
22
22
  data[:room].say "bogus hostname"
@@ -27,11 +27,11 @@ plugin.handle(/^ping$/i) do |data, args|
27
27
  end
28
28
 
29
29
  plugin.handle(/^host$/i) do |data, args|
30
- if args.empty? then
30
+ if args.empty?
31
31
  next data[:room].say "host needs more arguments"
32
32
  end
33
33
 
34
- if args[0].match(/^a-z0-9\.-/i) then
34
+ if args[0].match(/^a-z0-9\.-/i)
35
35
  next data[:room].say "invalid characters in argument"
36
36
  end
37
37
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fantasy-irc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-01 00:00:00.000000000 Z
12
+ date: 2013-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: array-unique
@@ -27,22 +27,6 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 1.1.1
30
- - !ruby/object:Gem::Dependency
31
- name: ddate
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 1.0.0
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 1.0.0
46
30
  description: A modular, event-driven IRC client/bot Ruby gem with plugin support
47
31
  email:
48
32
  - v2px@v2px.de
@@ -65,6 +49,8 @@ files:
65
49
  - lib/fantasy-irc/rooms.rb
66
50
  - lib/fantasy-irc/users.rb
67
51
  - lib/plugins/datetime.rb
52
+ - lib/plugins/hackersays.rb
53
+ - lib/plugins/magic8ball.rb
68
54
  - lib/plugins/math.rb
69
55
  - lib/plugins/nettools.rb
70
56
  - lib/plugins/random.rb