fantasy-irc 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ gem "array-unique", "~> 1.1.1"
4
4
  gem "rake", "~> 10.0.3"
5
5
 
6
6
  group :test do
7
- gem "rspec", "~> 2.12.0"
8
- gem "rspec-mocks", "~> 2.12.2"
7
+ gem "rspec", "~> 2.13.0"
8
+ gem "rspec-mocks", "~> 2.13.0"
9
+ gem 'ddate'
9
10
  end
@@ -6,24 +6,26 @@ GEM
6
6
  module-cluster
7
7
  array-unique (1.1.1)
8
8
  array-hooked
9
- diff-lcs (1.1.3)
9
+ ddate (1.0.0)
10
+ diff-lcs (1.2.1)
10
11
  identifies_as (1.1.0)
11
12
  module-cluster (2.0.5)
12
13
  rake (10.0.3)
13
- rspec (2.12.0)
14
- rspec-core (~> 2.12.0)
15
- rspec-expectations (~> 2.12.0)
16
- rspec-mocks (~> 2.12.0)
17
- rspec-core (2.12.2)
18
- rspec-expectations (2.12.1)
19
- diff-lcs (~> 1.1.3)
20
- rspec-mocks (2.12.2)
14
+ rspec (2.13.0)
15
+ rspec-core (~> 2.13.0)
16
+ rspec-expectations (~> 2.13.0)
17
+ rspec-mocks (~> 2.13.0)
18
+ rspec-core (2.13.0)
19
+ rspec-expectations (2.13.0)
20
+ diff-lcs (>= 1.1.3, < 2.0)
21
+ rspec-mocks (2.13.0)
21
22
 
22
23
  PLATFORMS
23
24
  ruby
24
25
 
25
26
  DEPENDENCIES
26
27
  array-unique (~> 1.1.1)
28
+ ddate
27
29
  rake (~> 10.0.3)
28
- rspec (~> 2.12.0)
29
- rspec-mocks (~> 2.12.2)
30
+ rspec (~> 2.13.0)
31
+ rspec-mocks (~> 2.13.0)
@@ -5,7 +5,7 @@ require 'fantasy-irc'
5
5
  bot = Fantasy::IRC.new
6
6
 
7
7
  # load some plugins
8
- bot.plugins.load 'corecommands'
8
+ bot.plugins.load 'nettools'
9
9
 
10
10
  # log in once we are connected
11
11
  connected = Proc.new do
@@ -8,8 +8,9 @@ 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.0"
11
+ s.version = "0.2.1"
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"
15
16
  end
@@ -16,8 +16,10 @@ module Fantasy
16
16
  end
17
17
 
18
18
  def command command, data, args
19
- if not args.nil? then
19
+ if not args.nil?
20
20
  args = args.split(' ')
21
+ else
22
+ args = []
21
23
  end
22
24
  @plugins.values.each do |plugin|
23
25
  puts "#{plugin}"
@@ -65,6 +65,7 @@ module Fantasy
65
65
  !!@joined
66
66
  end
67
67
 
68
+ # sends a privmsg to the room
68
69
  def say message
69
70
  if @joined == false then
70
71
  raise "Tried to talk to a room (#{name}) we're not in."
@@ -74,6 +75,11 @@ module Fantasy
74
75
  return self
75
76
  end
76
77
 
78
+ # sends a privmsg with ACTION to the room
79
+ def me message
80
+ self.say "\001ACTION #{message}\001"
81
+ end
82
+
77
83
  def to_s
78
84
  "#{@name}"
79
85
  end
@@ -0,0 +1,30 @@
1
+ require 'ddate'
2
+ plugin = Plugin.new "datetime"
3
+
4
+ plugin.handle(/^date$/i) do |data|
5
+ next data[:room].say Time.now.localtime.strftime "%a, %d %b %Y %T %z"
6
+ end
7
+
8
+ plugin.handle(/^ddate$/i) do |data|
9
+ ddate = DDate.new
10
+ data[:room].say "Today is #{ddate.day_of_week_name}, the #{ordinalize(ddate.day_of_month)} day of #{ddate.month} in the YOLD #{ddate.year}"
11
+ if not ddate.holyday.nil?
12
+ data[:room].say "Today is also a holyday. It's #{ddate.holyday}! Make sure to tell your boss."
13
+ end
14
+ next
15
+ end
16
+
17
+ $bot.plugins.add(plugin)
18
+
19
+ def ordinalize number
20
+ if (11..13).include?(number % 100)
21
+ "#{number}th"
22
+ else
23
+ case number % 10
24
+ when 1; "#{number}st"
25
+ when 2; "#{number}nd"
26
+ when 3; "#{number}rd"
27
+ else "#{number}th"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ plugin = Plugin.new "math"
2
+
3
+ # flips a coin which can come up heads or tails
4
+ plugin.handle(/^pi$/i) do |data|
5
+ next data[:room].say "\u{03C0} = #{Math::PI}"
6
+ end
7
+
8
+ plugin.handle(/^calc$/i) do |data, args|
9
+ args_string = args.join(' ')
10
+
11
+ args_string.gsub!(/log/, "\000")
12
+ args_string.gsub!(/sqrt/, "\001")
13
+ args_string.gsub!(/\^/, "**")
14
+ args_string.gsub!(/,/, ".")
15
+
16
+ if not args_string.match(/^[ 0-9+*\/\.()\-\000\001]+$/)
17
+ next data[:room].say "Could not parse string."
18
+ end
19
+
20
+ begin
21
+ result = Kernel.eval(args_string)
22
+ rescue Exception => e
23
+ next data[:room].say "#{e.to_s}"
24
+ end
25
+
26
+ if result.nil?
27
+ next data[:room].say "undef"
28
+ elsif result == 42
29
+ next data[:room].say "the Answer to the Ultimate Question of Life, The Universe, and Everything"
30
+ else
31
+ next data[:room].say result.to_s
32
+ end
33
+ end
34
+
35
+ $bot.plugins.add(plugin)
@@ -1,8 +1,4 @@
1
- plugin = Plugin.new "corecommands"
2
-
3
- plugin.handle(/^date$/i) do |data|
4
- next data[:room].say Time.now.localtime.strftime "%a, %d %b %Y %T %z"
5
- end
1
+ plugin = Plugin.new "nettools"
6
2
 
7
3
  plugin.handle(/^ping$/i) do |data, args|
8
4
  if args.empty? then
@@ -14,7 +10,7 @@ plugin.handle(/^ping$/i) do |data, args|
14
10
  end
15
11
 
16
12
  Thread.new do
17
- ping = `/bin/ping -w 3 -c 1 -- #{args[0]} 2>&1`
13
+ ping = `/usr/bin/env ping -w 3 -c 1 -- #{args[0]} 2>&1`
18
14
 
19
15
  if ping.match /unknown host (.+)/ then
20
16
  data[:room].say "unknown host #{$1}"
@@ -40,7 +36,7 @@ plugin.handle(/^host$/i) do |data, args|
40
36
  end
41
37
 
42
38
  Thread.new do
43
- host = `/usr/bin/host #{args[0]} 2>&1`
39
+ host = `/usr/bin/env host #{args[0]} 2>&1`
44
40
  lines = host.split(/\n/)
45
41
  lines.take(3).each do |line|
46
42
  data[:room].say line
@@ -0,0 +1,30 @@
1
+ plugin = Plugin.new "random"
2
+
3
+ # flips a coin which can come up heads or tails
4
+ plugin.handle(/^coin$/i) do |data|
5
+ if rand(2) == 0
6
+ next data[:room].me "flipped a coin: Came up tails."
7
+ else
8
+ next data[:room].me "flipped a coin: Came up heads."
9
+ end
10
+ end
11
+
12
+ # generates a pseudo-random number
13
+ plugin.handle(/^rand$/i) do |data, args|
14
+ if args.empty?
15
+ next data[:room].say rand.to_s
16
+ else
17
+ next data[:room].say rand(args[0].to_i).to_s
18
+ end
19
+ end
20
+
21
+ # chooses an option from a set of option
22
+ plugin.handle(/^decide$/i) do |data, args|
23
+ if args.empty?
24
+ next data[:room].say "What do you want me to decide?"
25
+ end
26
+
27
+ next data[:room].say args.sample
28
+ end
29
+
30
+ $bot.plugins.add(plugin)
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.0
4
+ version: 0.2.1
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-02-10 00:00:00.000000000 Z
12
+ date: 2013-03-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: array-unique
@@ -27,6 +27,22 @@ 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
30
46
  description: A modular, event-driven IRC client/bot Ruby gem with plugin support
31
47
  email:
32
48
  - v2px@v2px.de
@@ -48,7 +64,10 @@ files:
48
64
  - lib/fantasy-irc/plugins.rb
49
65
  - lib/fantasy-irc/rooms.rb
50
66
  - lib/fantasy-irc/users.rb
51
- - lib/plugins/corecommands.rb
67
+ - lib/plugins/datetime.rb
68
+ - lib/plugins/math.rb
69
+ - lib/plugins/nettools.rb
70
+ - lib/plugins/random.rb
52
71
  - spec/lib/fantasy-event_spec.rb
53
72
  - spec/lib/fantasy-irc_spec.rb
54
73
  - spec/spec_helper.rb
@@ -72,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
91
  version: '0'
73
92
  requirements: []
74
93
  rubyforge_project: fantasy-irc
75
- rubygems_version: 1.8.25
94
+ rubygems_version: 1.8.23
76
95
  signing_key:
77
96
  specification_version: 3
78
97
  summary: A modular, event-driven IRC client/bot Ruby gem with plugin support