summaryrefslogtreecommitdiff
path: root/rbot/plugins/quotes.rb
diff options
context:
space:
mode:
authorTom Gilbert <tom@linuxbrit.co.uk>2005-07-27 15:59:13 +0000
committerTom Gilbert <tom@linuxbrit.co.uk>2005-07-27 15:59:13 +0000
commit21949774b91eaec6ecde4eaa8ad121e2c0a36b87 (patch)
tree41a7601e168018ac203bad7ca8d7f9f82515bc28 /rbot/plugins/quotes.rb
parent51cf09ec02d089bfdd80e5f728cfc92a234dc437 (diff)
rearrange repo for packaging
Diffstat (limited to 'rbot/plugins/quotes.rb')
-rw-r--r--rbot/plugins/quotes.rb321
1 files changed, 0 insertions, 321 deletions
diff --git a/rbot/plugins/quotes.rb b/rbot/plugins/quotes.rb
deleted file mode 100644
index 674a9ed6..00000000
--- a/rbot/plugins/quotes.rb
+++ /dev/null
@@ -1,321 +0,0 @@
-Quote = Struct.new("Quote", "num", "date", "source", "quote")
-
-class QuotePlugin < Plugin
- def initialize
- super
- @lists = Hash.new
- Dir["#{@bot.botclass}/quotes/*"].each {|f|
- channel = File.basename(f)
- @lists[channel] = Array.new if(!@lists.has_key?(channel))
- IO.foreach(f) {|line|
- if(line =~ /^(\d+) \| ([^|]+) \| (\S+) \| (.*)$/)
- num = $1.to_i
- @lists[channel][num] = Quote.new(num, $2, $3, $4)
- end
- }
- }
- end
- def save
- Dir.mkdir("#{@bot.botclass}/quotes") if(!FileTest.directory?("#{@bot.botclass}/quotes"))
- @lists.each {|channel, quotes|
- File.open("#{@bot.botclass}/quotes/#{channel}", "w") {|file|
- quotes.compact.each {|q|
- file.puts "#{q.num} | #{q.date} | #{q.source} | #{q.quote}"
- }
- }
- }
- end
- def addquote(source, channel, quote)
- @lists[channel] = Array.new if(!@lists.has_key?(channel))
- num = @lists[channel].length
- @lists[channel][num] = Quote.new(num, Time.new, source, quote)
- return num
- end
- def getquote(source, channel, num=nil)
- return nil unless(@lists.has_key?(channel))
- return nil unless(@lists[channel].length > 0)
- if(num)
- if(@lists[channel][num])
- return @lists[channel][num], @lists[channel].length - 1
- end
- else
- # random quote
- return @lists[channel].compact[rand(@lists[channel].nitems)],
- @lists[channel].length - 1
- end
- end
- def delquote(channel, num)
- return false unless(@lists.has_key?(channel))
- return false unless(@lists[channel].length > 0)
- if(@lists[channel][num])
- @lists[channel][num] = nil
- return true
- end
- return false
- end
- def countquote(source, channel=nil, regexp=nil)
- unless(channel)
- total=0
- @lists.each_value {|l|
- total += l.compact.length
- }
- return total
- end
- return 0 unless(@lists.has_key?(channel))
- return 0 unless(@lists[channel].length > 0)
- if(regexp)
- matches = @lists[channel].compact.find_all {|a| a.quote =~ /#{regexp}/i }
- else
- matches = @lists[channel].compact
- end
- return matches.length
- end
- def searchquote(source, channel, regexp)
- return nil unless(@lists.has_key?(channel))
- return nil unless(@lists[channel].length > 0)
- matches = @lists[channel].compact.find_all {|a| a.quote =~ /#{regexp}/i }
- if(matches.length > 0)
- return matches[rand(matches.length)], @lists[channel].length - 1
- else
- return nil
- end
- end
- def help(plugin, topic="")
- case topic
- when "addquote"
- return "addquote [<channel>] <quote> => Add quote <quote> for channel <channel>. You only need to supply <channel> if you are addressing #{@bot.nick} privately. Responds to !addquote without addressing if so configured"
- when "delquote"
- return "delquote [<channel>] <num> => delete quote from <channel> with number <num>. You only need to supply <channel> if you are addressing #{@bot.nick} privately. Responds to !delquote without addressing if so configured"
- when "getquote"
- return "getquote [<channel>] [<num>] => get quote from <channel> with number <num>. You only need to supply <channel> if you are addressing #{@bot.nick} privately. Without <num>, a random quote will be returned. Responds to !getquote without addressing if so configured"
- when "searchquote"
- return "searchquote [<channel>] <regexp> => search for quote from <channel> that matches <regexp>. You only need to supply <channel> if you are addressing #{@bot.nick} privately. Responds to !searchquote without addressing if so configured"
- when "topicquote"
- return "topicquote [<channel>] [<num>] => set topic to quote from <channel> with number <num>. You only need to supply <channel> if you are addressing #{@bot.nick} privately. Without <num>, a random quote will be set. Responds to !topicquote without addressing if so configured"
- when "countquote"
- return "countquote [<channel>] <regexp> => count quotes from <channel> that match <regexp>. You only need to supply <channel> if you are addressing #{@bot.nick} privately. Responds to !countquote without addressing if so configured"
- when "whoquote"
- return "whoquote [<channel>] <num> => show who added quote <num>. You only need to supply <channel> if you are addressing #{@bot.nick} privately"
- when "whenquote"
- return "whenquote [<channel>] <num> => show when quote <num> was added. You only need to supply <channel> if you are addressing #{@bot.nick} privately"
- else
- return "Quote module (Quote storage and retrieval) topics: addquote, getquote, searchquote, topicquote, countquote, whoquote, whenquote"
- end
- end
- def listen(m)
- return unless(m.kind_of? PrivMessage)
-
- command = m.message.dup
- if(m.address? && m.private?)
- case command
- when (/^addquote\s+(#\S+)\s+(.*)/)
- channel = $1
- quote = $2
- if(@bot.auth.allow?("addquote", m.source, m.replyto))
- if(channel =~ /^#/)
- num = addquote(m.source, channel, quote)
- m.reply "added the quote (##{num})"
- end
- end
- when (/^getquote\s+(#\S+)$/)
- channel = $1
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, channel)
- if(quote)
- m.reply "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^getquote\s+(#\S+)\s+(\d+)$/)
- channel = $1
- num = $2.to_i
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, channel, num)
- if(quote)
- m.reply "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^whoquote\s+(#\S+)\s+(\d+)$/)
- channel = $1
- num = $2.to_i
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, channel, num)
- if(quote)
- m.reply "quote #{quote.num} added by #{quote.source}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^whenquote\s+(#\S+)\s+(\d+)$/)
- channel = $1
- num = $2.to_i
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, channel, num)
- if(quote)
- m.reply "quote #{quote.num} added on #{quote.date}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^topicquote\s+(#\S+)$/)
- channel = $1
- if(@bot.auth.allow?("topicquote", m.source, m.replyto))
- quote, total = getquote(m.source, channel)
- if(quote)
- @bot.topic channel, "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^topicquote\s+(#\S+)\s+(\d+)$/)
- channel = $1
- num = $2.to_i
- if(@bot.auth.allow?("topicquote", m.source, m.replyto))
- quote, total = getquote(m.source, channel, num)
- if(quote)
- @bot.topic channel, "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^delquote\s+(#\S+)\s+(\d+)$/)
- channel = $1
- num = $2.to_i
- if(@bot.auth.allow?("delquote", m.source, m.replyto))
- if(delquote(channel, num))
- m.okay
- else
- m.reply "quote not found!"
- end
- end
- when (/^searchquote\s+(#\S+)\s+(.*)$/)
- channel = $1
- reg = $2
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = searchquote(m.source, channel, reg)
- if(quote)
- m.reply "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^countquote$/)
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- total = countquote(m.source)
- m.reply "#{total} quotes"
- end
- when (/^countquote\s+(#\S+)\s*(.*)$/)
- channel = $1
- reg = $2
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- total = countquote(m.source, channel, reg)
- if(reg.length > 0)
- m.reply "#{total} quotes match: #{reg}"
- else
- m.reply "#{total} quotes"
- end
- end
- end
- elsif (m.address? || (@bot.config["QUOTE_LISTEN"] && command.gsub!(/^!/, "")))
- case command
- when (/^addquote\s+(.+)/)
- if(@bot.auth.allow?("addquote", m.source, m.replyto))
- num = addquote(m.source, m.target, $1)
- m.reply "added the quote (##{num})"
- end
- when (/^getquote$/)
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, m.target)
- if(quote)
- m.reply "[#{quote.num}] #{quote.quote}"
- else
- m.reply "no quotes found!"
- end
- end
- when (/^getquote\s+(\d+)$/)
- num = $1.to_i
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, m.target, num)
- if(quote)
- m.reply "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^whenquote\s+(\d+)$/)
- num = $1.to_i
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, m.target, num)
- if(quote)
- m.reply "quote #{quote.num} added on #{quote.date}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^whoquote\s+(\d+)$/)
- num = $1.to_i
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = getquote(m.source, m.target, num)
- if(quote)
- m.reply "quote #{quote.num} added by #{quote.source}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^topicquote$/)
- if(@bot.auth.allow?("topicquote", m.source, m.replyto))
- quote, total = getquote(m.source, m.target)
- if(quote)
- @bot.topic m.target, "[#{quote.num}] #{quote.quote}"
- else
- m.reply "no quotes found!"
- end
- end
- when (/^topicquote\s+(\d+)$/)
- num = $1.to_i
- if(@bot.auth.allow?("topicquote", m.source, m.replyto))
- quote, total = getquote(m.source, m.target, num)
- if(quote)
- @bot.topic m.target, "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^delquote\s+(\d+)$/)
- num = $1.to_i
- if(@bot.auth.allow?("delquote", m.source, m.replyto))
- if(delquote(m.target, num))
- m.okay
- else
- m.reply "quote not found!"
- end
- end
- when (/^searchquote\s+(.*)$/)
- reg = $1
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- quote, total = searchquote(m.source, m.target, reg)
- if(quote)
- m.reply "[#{quote.num}] #{quote.quote}"
- else
- m.reply "quote not found!"
- end
- end
- when (/^countquote(?:\s+(.*))?$/)
- reg = $1
- if(@bot.auth.allow?("getquote", m.source, m.replyto))
- total = countquote(m.source, m.target, reg)
- if(reg && reg.length > 0)
- m.reply "#{total} quotes match: #{reg}"
- else
- m.reply "#{total} quotes"
- end
- end
- end
- end
- end
-end
-plugin = QuotePlugin.new
-plugin.register("quotes")