]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/quiz.rb
Only react on PrivMessage in salut and quiz
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / quiz.rb
index 629b72324cf30cf8a80dd8cf67bdd2a27542d498..73f9658984dd7dd965177dc2d4d122dc920512e8 100644 (file)
@@ -32,7 +32,11 @@ class Quiz
   :first_try, :hint, :hintrange, :rank_table, :hinted
 
   def initialize( channel, registry )
-    @registry = registry.sub_registry( channel )
+    if channel.empty?
+      @registry = registry.sub_registry( 'private' )
+    else
+      @registry = registry.sub_registry( channel )
+    end
     @registry_conf = @registry.sub_registry( "config" )
 
     # Per-channel copy of the global questions table. Acts like a shuffled queue
@@ -91,7 +95,6 @@ class QuizPlugin < Plugin
   # and transforms the questions and fills the global question table.
   #
   def fetch_data( m )
-    # TODO: Make this configurable, and add support for more than one file (there's a size limit in linux too ;) )
     # Read the winning messages file 
     @win_messages = Array.new
     if File.exists? "#{@bot.botclass}/quiz/win_messages"
@@ -100,6 +103,7 @@ class QuizPlugin < Plugin
       warning( "win_messages file not found!" )
     end
 
+    # TODO: Make this configurable, and add support for more than one file (there's a size limit in linux too ;) )
     path = "#{@bot.botclass}/quiz/quiz.rbot"
     debug "Fetching from #{path}"
 
@@ -131,7 +135,7 @@ class QuizPlugin < Plugin
     @questions = []
 
     # Fuse together and remove comments, then split
-    data = "#{localdata}\n\n#{serverdata}".gsub( /^#.*$/, "" )
+    data = "\n\n#{localdata}\n\n#{serverdata}".gsub( /^#.*$/, "" )
     entries = data.split( "\nQuestion: " )
     #First entry will be empty.
     entries.delete_at(0)
@@ -173,7 +177,7 @@ class QuizPlugin < Plugin
 
 
   def say_score( m, nick )
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
 
     if q.registry.has_key?( nick )
       score = q.registry[nick].score
@@ -257,8 +261,9 @@ class QuizPlugin < Plugin
   # Reimplemented from Plugin
   #
   def listen( m )
-    return unless @quizzes.has_key?( m.target.to_s )
-    q = @quizzes[m.target.to_s]
+    return unless @quizzes.has_key?( m.channel.to_s )
+    return unless m.kind_of?(PrivMessage)
+    q = @quizzes[m.channel.to_s]
 
     return if q.question == nil
 
@@ -330,7 +335,7 @@ class QuizPlugin < Plugin
   #######################################################################
   def cmd_quiz( m, params )
     fetch_data( m ) if @questions.empty?
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
 
     if q.question
       m.reply "#{Bold}#{Color}03Current question: #{Color}#{Bold}#{q.question}"
@@ -386,8 +391,8 @@ class QuizPlugin < Plugin
 
 
   def cmd_solve( m, params )
-    return unless @quizzes.has_key?( m.target.to_s )
-    q = @quizzes[m.target.to_s]
+    return unless @quizzes.has_key?( m.channel.to_s )
+    q = @quizzes[m.channel.to_s]
 
     m.reply "The correct answer was: #{q.answer}"
 
@@ -398,8 +403,8 @@ class QuizPlugin < Plugin
 
 
   def cmd_hint( m, params )
-    return unless @quizzes.has_key?( m.target.to_s )
-    q = @quizzes[m.target.to_s]
+    return unless @quizzes.has_key?( m.channel.to_s )
+    q = @quizzes[m.channel.to_s]
 
     if q.question == nil
       m.reply "#{m.sourcenick.to_s}: Get a question first!"
@@ -434,7 +439,7 @@ class QuizPlugin < Plugin
           stats = PlayerStats.new( 0, 0, 0 )
         end
 
-        stats["score"] = stats.score -    1
+        stats["score"] = stats.score - 1
         q.registry[m.sourcenick.to_s] = stats
 
         calculate_ranks( m, q, m.sourcenick.to_s )
@@ -447,8 +452,8 @@ class QuizPlugin < Plugin
 
 
   def cmd_skip( m, params )
-    return unless @quizzes.has_key?( m.target.to_s )
-    q = @quizzes[m.target.to_s]
+    return unless @quizzes.has_key?( m.channel.to_s )
+    q = @quizzes[m.channel.to_s]
 
     q.question = nil
     cmd_quiz( m, params )
@@ -456,7 +461,7 @@ class QuizPlugin < Plugin
 
 
   def cmd_joker( m, params )
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
 
     if q.question == nil
       m.reply "#{m.sourcenick.to_s}: There is no open question."
@@ -493,13 +498,13 @@ class QuizPlugin < Plugin
 
 
   def cmd_top5( m, params )
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
     if q.rank_table.empty?
       m.reply "There are no scores known yet!"
       return
     end
 
-    m.reply "* Top 5 Players for #{m.target.to_s}:"
+    m.reply "* Top 5 Players for #{m.channel.to_s}:"
 
     [5, q.rank_table.length].min.times do |i|
       player = q.rank_table[i]
@@ -513,14 +518,14 @@ class QuizPlugin < Plugin
   def cmd_top_number( m, params )
     num = params[:number].to_i
     return unless 1..50 === num
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
     if q.rank_table.empty?
       m.reply "There are no scores known yet!"
       return
     end
 
     ar = []
-    m.reply "* Top #{num} Players for #{m.target.to_s}:"
+    m.reply "* Top #{num} Players for #{m.channel.to_s}:"
     n = [ num, q.rank_table.length ].min
     n.times do |i|
       player = q.rank_table[i]
@@ -551,7 +556,7 @@ class QuizPlugin < Plugin
 
 
   def cmd_autoask( m, params )
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
 
     if params[:enable].downcase == "on"
       q.registry_conf["autoask"] = true
@@ -567,7 +572,7 @@ class QuizPlugin < Plugin
 
 
   def cmd_transfer( m, params )
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
 
     debug q.rank_table.inspect
 
@@ -620,7 +625,7 @@ class QuizPlugin < Plugin
 
 
   def cmd_del_player( m, params )
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
     debug q.rank_table.inspect
 
     nick = params[:nick]
@@ -655,7 +660,7 @@ class QuizPlugin < Plugin
 
 
   def cmd_set_score(m, params)
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
     debug q.rank_table.inspect
 
     nick = params[:nick]
@@ -673,7 +678,7 @@ class QuizPlugin < Plugin
 
 
   def cmd_set_jokers(m, params)
-    q = create_quiz( m.target.to_s )
+    q = create_quiz( m.channel.to_s )
 
     nick = params[:nick]
     val = [params[:jokers].to_i, Max_Jokers].min