4 # :title: Factoids pluing
6 # Author:: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com>
7 # Copyright:: (C) 2007 Giuseppe Bilotta
10 # Store (and retrieve) unstructured one-sentence factoids
12 class FactoidsPlugin < Plugin
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! }
29 Dir.mkdir(@dir) unless FileTest.directory?(@dir)
30 Utils.safe_save(@fname) do |file|
35 def help(plugin, topic="")
36 _("factoids plugin: learn that <factoid>, forget that <factoids>, facts about <words>")
40 factoid = params[:stuff].to_s
41 if @factoids.index(factoid)
42 m.reply _("I already know that %{factoid}" % { :factoid => factoid })
50 factoid = params[:stuff].to_s
51 if @factoids.delete(factoid)
54 m.reply _("I didn't know that %{factoid}" % { :factoid => factoid })
59 if params[:words].empty?
60 m.reply _("I know %{count} facts" % { :count => @factoids.length })
62 rx = Regexp.new(params[:words].to_s, true)
63 known = @factoids.grep(rx)
65 m.reply _("I know nothing about %{words}" % params)
67 m.reply known.join(" | "), :split_at => /\s+\|\s+/
74 plugin = FactoidsPlugin.new
75 plugin.map 'learn that *stuff'
76 plugin.map 'forget that *stuff'
77 plugin.map 'facts [about *words]'