From 619870dc4934ca1360d925a6671e61ed15a8f1a2 Mon Sep 17 00:00:00 2001 From: Raine Virta Date: Fri, 8 Aug 2008 14:49:38 +0300 Subject: quakeauth plugin v2 This patch introduces the ability for the bot to register itself to the Q bot, together with a number of other enhancements. --- data/rbot/plugins/quakeauth.rb | 81 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/data/rbot/plugins/quakeauth.rb b/data/rbot/plugins/quakeauth.rb index 67c5ef81..10257adf 100644 --- a/data/rbot/plugins/quakeauth.rb +++ b/data/rbot/plugins/quakeauth.rb @@ -1,15 +1,26 @@ -# automatically auths with Q on quakenet servers +#-- vim:sw=2:et +#++ +# +# :title: QuakeNet Auth Plugin +# +# Author:: Raine Virta +# Copyright:: (C) 2008 Raine Virta +# License:: GPL v2 +# +# Automatically auths with Q on QuakeNet servers class QPlugin < Plugin def help(plugin, topic="") case topic when "" - return "qauth plugin: handles Q auths. topics set, identify" + return "qauth plugin: handles Q auths. topics set, identify, register" when "set" - return "qauth set : set the Q user and password and use it to identify in future" + return "qauth set : set the Q user and password and use it to identify in future" when "identify" return "qauth identify: identify with Q (if user and auth are set)" + when "register" + return "qauth register : register with Q, an email on how to proceed will be sent to the email address you provide" end end @@ -28,26 +39,76 @@ class QPlugin < Plugin def set(m, params) @registry['quakenet.user'] = params[:nick] - @registry['quakenet.auth'] = params[:passwd] + @registry['quakenet.auth'] = params[:password] m.okay end def connect identify(nil, nil) end + def identify(m, params) + @source = m.replyto + @registry['quakenet.auth'] = params[:password] if params[:password] + if @registry.has_key?('quakenet.user') && @registry.has_key?('quakenet.auth') - debug "authing with Q using #{@registry['quakenet.user']} #{@registry['quakenet.auth']}" - @bot.sendmsg "PRIVMSG", "Q@CServe.quakenet.org", "auth #{@registry['quakenet.user']} #{@registry['quakenet.auth']}" - m.okay if m + user = @registry['quakenet.user'] + pass = @registry['quakenet.auth'] + + debug "authing with Q using #{user} #{pass}" + msg_q "auth #{user} #{pass}" else - m.reply "not configured, try 'qauth set :nick :passwd'" if m + m.reply "not configured, try 'qauth set :nick :password' or 'qauth register :email'" if m + end + end + + def notice(m) + if m.source.user == "TheQBot" && m.source.host = "CServe.quakenet.org" + case m.message + when /a user with that name already exists/i + @bot.say @source, "user with my name already exists, identify if it belongs to you" + when /created successfully/ + @registry['quakenet.user'] = @bot.nick + @bot.say @source, "an email on how to proceed should have been sent to #{@email} -- 'qauth identify ' next" + when /too many accounts exist from this email address/i + @bot.say @source, "too many accounts on that email address" + when /registration service is unavailable/ + @bot.say @source, "the registration service is unavailable, try again later" + when /password incorrect/ + @bot.say @source, "username or password incorrect" if @source + when /you are now logged in/i + @bot.say @source, "authed successfully" if @source + when /auth is not available/ + @bot.say @source, "already authed" if @source + end + end + end + + def register_nick(m, params) + # check nick for invalid characters + if @bot.nick =~ /[`~\^\[\]{}|_\\]/ + m.reply "for me to be able to register, my nick cannot have any of the following characters: `~^[]{}|_\\" + return end + + @email = params[:email] + @source = m.replyto + + msg_q "hello #{@email} #{@email}" end + def msg_q(message) + @bot.say "Q@CServe.quakenet.org", message if on_quakenet? + end + + def on_quakenet? + @bot.server.hostname.split(".")[-2] == "quakenet" + end end + plugin = QPlugin.new -plugin.map 'qauth set :nick :passwd', :action => "set" -plugin.map 'qauth identify', :action => "identify" +plugin.map 'qauth set :nick :password', :action => "set" +plugin.map 'qauth identify [:password]', :action => "identify" +plugin.map 'qauth register :email', :action => "register_nick" plugin.default_auth('*', false) -- cgit v1.2.3