Home

WeeChat scripts

Script: nickserv.rb

<< Back to scripts   |   Download Download
# NickServ identifer plugin
# Version 0.1
# Released under GNU GPL v2
# PhoeniX <leonid.phoenix@gmail.com>
def weechat_init
  Weechat.register "nickserv", "0.1", "deinit", "NickServ identifer plugin."
  Weechat.add_command_handler "nickserv", "nickserv","","a|d|l|u|help", "", "a|d|l|u|help"
  Weechat.add_message_handler "notice", "on_notice"
  #initialize rules
  $ruleset=Array.new
  i=0
  while !(rule_str=Weechat.get_plugin_config("rule"+i.to_s)).empty?
    a rule_str.split(' ')
    i+=1
  end
  return Weechat::PLUGIN_RC_OK
end

def on_notice(server, args)
  #get mask, nick and messae from notice
  mask=args.split(':')[1].split(' ')[0]
  nick=args.split(':')[1].split(' ')[2]
  message=args.split(':')[2]
  #find matching rule and execute action
  $ruleset\
    .find_all{|row| !(mask=~Regexp.new(row[:mask])).nil?}\
    .find_all{|row| !(nick=~Regexp.new(row[:nick])).nil?}\
    .find_all{|row| !(message=~Regexp.new(row[:message])).nil?}\
    .each{|row| Weechat.command row[:action]}
  return Weechat::PLUGIN_RC_OK
end

#add
def a(argv)
  if argv.size<3
    help
    return nil
  end
  $ruleset.push({:mask => argv.shift , :message => argv.shift, :nick => argv.shift , :action => argv*' '})
end
#list
def l(argv)
  $ruleset.each_index{|i| Weechat.print_server "#{i}\t| #{$ruleset[i][:mask]} #{$ruleset[i][:message]} #{$ruleset[i][:nick]} #{$ruleset[i][:action]}"}
end
#delete
def d(argv)
  if(argv.size==1)
    $ruleset.delete_at(argv[0].to_s)
  else
    help
  end
end
#update
def u(argv)
  if argv.size<4
    help
    return nil
  end
  index=argv.shift.to_i
  $ruleset[index]={:mask => argv.shift , :message => argv.shift, :nick => argv.shift , :action => argv*' '}
end

def help(argv)
  helpmessage=<<EOM
  available commands are:
  a RULE - add a rule
  d NUM  - delete NUM'th RULE
  l      - list rules
  u NUM RULE - update  NUM'th rule

  where RULE is MASK MESSAGE NICK COMMAND
  where MASK, MESSAGE and NICK are singleword regexp
  and COMMAND is some weechat command
  e.g.
  /nichserv a NickServ!service@RusNet IDENTIFY PhoeniX /quote NickServ IDENTIFY pa$$word
EOM
  Weechat.print_server helpmessage
  return Weechat::PLUGIN_RC_OK
end

#calling a function, defined in this script, on /nickserv funcname argv
def nickserv(server,arg)
  arr=arg.split(' ')
  command=arr.shift
  if (respond_to?(command))
    send(:"#{command}", arr)
  else
    help
  end
  return Weechat::PLUGIN_RC_OK
end

def deinit
  #saving rules
  $ruleset.each_index{|i| Weechat.set_plugin_config("Rule"+i.to_s, "#{$ruleset[i][:mask]} #{$ruleset[i][:message]} #{$ruleset[i][:nick]} #{$ruleset[i][:action]}")}
  return Weechat::PLUGIN_RC_OK
end