]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - data/rbot/plugins/factoids.rb
3110bd113e630aa7ef1597243a0e6ace16f9ca05
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / factoids.rb
1 #-- vim:sw=2:et
2 #++
3 #
4 # :title: Factoids pluing
5 #
6 # Author:: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com>
7 # Copyright:: (C) 2007 Giuseppe Bilotta
8 # License:: GPLv2
9 #
10 # Store (and retrieve) unstructured one-sentence factoids
11
12 class FactoidsPlugin < Plugin
13   def initialize
14     super
15
16     # TODO config
17     @dir = File.join(@bot.botclass,"factoids")
18     @fname = File.join(@dir,"factoids.rbot")
19     if File.exist?(@fname)
20       @factoids = File.readlines(@fname)
21       @factoids.each { |l| l.chomp! }
22     else
23       # A Set, maybe?
24       @factoids = Array.new
25     end
26   end
27
28   def save
29     Dir.mkdir(@dir) unless FileTest.directory?(@dir)
30     Utils.safe_save(@fname) do |file|
31       file.puts @factoids
32     end
33   end
34
35   def help(plugin, topic="")
36     _("factoids plugin: learn that <factoid>, forget that <factoids>, facts about <words>")
37   end
38
39   def learn(m, params)
40     factoid = params[:stuff].to_s
41     if @factoids.index(factoid)
42       m.reply _("I already know that %{factoid}" % { :factoid => factoid })
43     else
44       @factoids << factoid
45       m.okay
46     end
47   end
48
49   def forget(m, params)
50     factoid = params[:stuff].to_s
51     if @factoids.delete(factoid)
52       m.okay
53     else
54       m.reply _("I didn't know that %{factoid}" % { :factoid => factoid })
55     end
56   end
57
58   def facts(m, params)
59     if params[:words].empty?
60       m.reply _("I know %{count} facts" % { :count => @factoids.length })
61     else
62       rx = Regexp.new(params[:words].to_s, true)
63       known = @factoids.grep(rx)
64       if known.empty?
65         m.reply _("I know nothing about %{words}" % params)
66       else
67         m.reply known.join(" | "), :split_at => /\s+\|\s+/
68       end
69     end
70   end
71
72 end
73
74 plugin = FactoidsPlugin.new
75 plugin.map 'learn that *stuff'
76 plugin.map 'forget that *stuff'
77 plugin.map 'facts [about *words]'