]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/topic.rb
No-parameter commands in the topic plugin weren't recognized anymore. Fix it
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / topic.rb
index c97eab2dc11f528da00125601deefc502effdc9e..9b6ffdb47e0b46af21875efff7f2bb4d55a028ec 100755 (executable)
@@ -17,20 +17,22 @@ class TopicPlugin < Plugin
         return "topic prepend <text> => add <text> at the beginning of the topic"
       when "addat"
         return "topic addat <num> <text> => add <text> at position <num> of the topic"
         return "topic prepend <text> => add <text> at the beginning of the topic"
       when "addat"
         return "topic addat <num> <text> => add <text> at position <num> of the topic"
-      when "del"
+      when "del", "delete"
         return "topic del <num> => remove section <num> from the topic"
         return "topic del <num> => remove section <num> from the topic"
-      when "separator"
+      when "replace"
+        return "topic replace <num> <text> => Replaces section <num> with <text>"
+      when "sep", "separator"
         return "topic sep(arator) [<text>] => get or set the topic section separator"
       when "learn"
         return "topic learn => remembers the topic for later"
         return "topic sep(arator) [<text>] => get or set the topic section separator"
       when "learn"
         return "topic learn => remembers the topic for later"
-      when "replace"
-        return "topic replace <num> <text> => Replaces section <num> with <text>"
       when "restore"
         return "topic restore => resets the topic to the latest remembered one"
       when "restore"
         return "topic restore => resets the topic to the latest remembered one"
+      when "clear"
+        return "topic clear => clears the topic"
       when "set"
         return "topic set <text> => sets the topic to <text>"
       else
       when "set"
         return "topic set <text> => sets the topic to <text>"
       else
-        return "topic add(at)|prepend|del|sep(arator)|learn|replace|restore|set: " + \
+        return "topic add(at)|prepend|del(ete)|replace|sep(arator)|learn|restore|clear|set: " + \
                "manipulate the topic of the current channel; use topic <#channel> <command> " + \
                "for private addressing"
       end
                "manipulate the topic of the current channel; use topic <#channel> <command> " + \
                "for private addressing"
       end
@@ -40,12 +42,17 @@ class TopicPlugin < Plugin
   def handletopic(m, param)
     return unless m.kind_of?(PrivMessage)
     if m.public?
   def handletopic(m, param)
     return unless m.kind_of?(PrivMessage)
     if m.public?
-      ch = m.channel.downcase
+      ch = m.channel
     else
     else
-      ch = param[:channel].downcase
+      ch = m.server.get_channel(param[:channel])
+      unless ch
+        m.reply("I am not in channel #{param[:channel]}")
+        return
+      end
     end
     cmd = param[:command]
     end
     cmd = param[:command]
-    txt = param[:text].join(" ")
+    txt = param[:text].to_s
+
     case cmd
     when /^a(dd|ppend)$/
       topicappend(m, ch, txt)
     case cmd
     when /^a(dd|ppend)$/
       topicappend(m, ch, txt)
@@ -66,6 +73,8 @@ class TopicPlugin < Plugin
       end
     when 'set'
       topicset(m, ch, txt)
       end
     when 'set'
       topicset(m, ch, txt)
+    when 'clear'
+      topicset(m, ch, '')
     when /^sep(arator)?$/
       topicsep(m, ch, txt)
     when 'learn'
     when /^sep(arator)?$/
       topicsep(m, ch, txt)
     when 'learn'
@@ -85,6 +94,7 @@ class TopicPlugin < Plugin
   end
 
   def topicsep(m, ch, txt)
   end
 
   def topicsep(m, ch, txt)
+    return if !@bot.auth.allow?("topic::edit::separator", m.source, m.replyto)
     if txt
       sep = txt.strip
       if sep != ""
     if txt
       sep = txt.strip
       if sep != ""
@@ -95,27 +105,46 @@ class TopicPlugin < Plugin
   end
 
   def setsep(ch, sep)
   end
 
   def setsep(ch, sep)
-    if @registry.has_key?(ch)
-      data = @registry[ch]
+    raise unless ch.class <= Irc::Channel
+    # TODO multiserver
+    k = ch.downcase
+
+    if @registry.has_key?(k)
+      data = @registry[k]
     else
       data = Hash.new
     end
     else
       data = Hash.new
     end
+
+    oldsep = getsep(ch)
+    topic = ch.topic.text
+    topicarray = topic.split(/\s+#{Regexp.escape(oldsep)}\s*/)
+
+    if sep != oldsep and topicarray.length > 0
+      newtopic = topicarray.join(" #{sep} ")
+      @bot.topic ch, newtopic
+    end
+
     data[:separator] = sep
     data[:separator] = sep
-    @registry[ch] = data
+    @registry[k] = data
   end
 
   def getsep(ch)
   end
 
   def getsep(ch)
-    if @registry.has_key?(ch)
-      if @registry[ch].has_key?(:separator)
-        return @registry[ch][:separator]
+    raise unless ch.class <= Irc::Channel
+    # TODO multiserver
+    k = ch.downcase
+
+    if @registry.has_key?(k)
+      if @registry[k].has_key?(:separator)
+        return @registry[k][:separator]
       end
     end
     return @separator
   end
 
   def topicaddat(m, channel, num, txt)
       end
     end
     return @separator
   end
 
   def topicaddat(m, channel, num, txt)
+    return if !@bot.auth.allow?("topic::edit::add", m.source, m.replyto)
     sep = getsep(channel)
     sep = getsep(channel)
-    topic = @bot.channels[channel].topic.to_s
+    topic = channel.topic.to_s
     topicarray = topic.split(/\s+#{Regexp.escape(sep)}\s*/)
     topicarray.insert(num, txt)
     newtopic = topicarray.join(" #{sep} ")
     topicarray = topic.split(/\s+#{Regexp.escape(sep)}\s*/)
     topicarray.insert(num, txt)
     newtopic = topicarray.join(" #{sep} ")
@@ -131,8 +160,9 @@ class TopicPlugin < Plugin
   end
 
   def topicdel(m, channel, num)
   end
 
   def topicdel(m, channel, num)
+    return if !@bot.auth.allow?("topic::edit::del", m.source, m.replyto)
     sep = getsep(channel)
     sep = getsep(channel)
-    topic = @bot.channels[channel].topic.to_s
+    topic = channel.topic.to_s
     topicarray = topic.split(/\s+#{Regexp.escape(sep)}\s*/)
     topicarray.delete_at(num)
     newtopic = topicarray.join(" #{sep} ")
     topicarray = topic.split(/\s+#{Regexp.escape(sep)}\s*/)
     topicarray.delete_at(num)
     newtopic = topicarray.join(" #{sep} ")
@@ -140,45 +170,52 @@ class TopicPlugin < Plugin
   end
 
   def learntopic(m, channel)
   end
 
   def learntopic(m, channel)
-    return if !@bot.auth.allow?("learntopic", m.source, m.replyto)
-    topic = @bot.channels[channel].topic.to_s
-    if @registry.has_key?(channel)
-      data = @registry[channel]
+    return if !@bot.auth.allow?("topic::store::store", m.source, m.replyto)
+    topic = channel.topic.to_s
+    k = channel.downcase
+    if @registry.has_key?(k)
+      data = @registry[k]
     else
       data = Hash.new
     end
     data[:topic] = topic
     else
       data = Hash.new
     end
     data[:topic] = topic
-    @registry[channel] = data
+    @registry[k] = data
     m.okay
   end
 
   def replacetopic(m, channel, num, txt)
     m.okay
   end
 
   def replacetopic(m, channel, num, txt)
-    return if !@bot.auth.allow?("topic", m.source, m.replyto)
+    return if !@bot.auth.allow?("topic::edit::replace", m.source, m.replyto)
     sep = getsep(channel)
     sep = getsep(channel)
-    topic = @bot.channels[channel].topic.to_s
+    topic = channel.topic.to_s
     topicarray = topic.split(/\s+#{Regexp.escape(sep)}\s*/)
     topicarray[num] = txt
     newtopic = topicarray.join(" #{sep} ")
     @bot.topic channel, newtopic
   end
     topicarray = topic.split(/\s+#{Regexp.escape(sep)}\s*/)
     topicarray[num] = txt
     newtopic = topicarray.join(" #{sep} ")
     @bot.topic channel, newtopic
   end
-  
+
   def restoretopic(m, channel)
   def restoretopic(m, channel)
+    return if !@bot.auth.allow?("topic::store::restore", m.source, m.replyto)
     return if !@bot.auth.allow?("restoretopic", m.source, m.replyto)
     return if !@bot.auth.allow?("restoretopic", m.source, m.replyto)
-    if @registry.has_key?(channel) && @registry[channel].has_key?(:topic)
-      topic = @registry[channel][:topic]
-      @bot.topic channel, topic
+    k = channel.downcase
+    if @registry.has_key?(k) && @registry[k].has_key?(:topic)
+      topic = @registry[k][:topic]
+      topicset(m, channel, topic)
     else
       m.reply "I don't remember any topic for this channel"
     end
   end
 
   def topicset(m, channel, text)
     else
       m.reply "I don't remember any topic for this channel"
     end
   end
 
   def topicset(m, channel, text)
-    return if !@bot.auth.allow?("topic", m.source, m.replyto)
+    return if !@bot.auth.allow?("topic::edit::replace", m.source, m.replyto)
     @bot.topic channel, text
   end
 
 end
 plugin = TopicPlugin.new
     @bot.topic channel, text
   end
 
 end
 plugin = TopicPlugin.new
-plugin.map 'topic :command *text', :action => 'handletopic', :public => true, :private => false
-plugin.map 'topic :channel :command *text', :action => 'handletopic', :public => false, :private => true
+
+plugin.map 'topic :command [*text]', :action => 'handletopic', :public => true, :private => false
+plugin.map 'topic :channel :command [*text]', :action => 'handletopic', :public => false, :private => true
+
+plugin.default_auth('*', false)
+