From: Giuseppe Bilotta Date: Tue, 15 Jun 2010 10:27:33 +0000 (+0200) Subject: New IRC Framework: don't raise on unknown casemap X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;ds=sidebyside;h=9ab64fe6dfd71647bbfcf87e4839cc15d30436db;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git New IRC Framework: don't raise on unknown casemap This allows us to support servers that (ab)use the CASEMAPPING to indicate the set of allowed characters for nicks (e.g. Inspire IRCd). --- diff --git a/lib/rbot/core/unicode.rb b/lib/rbot/core/unicode.rb index 9d42ec24..ece8e644 100644 --- a/lib/rbot/core/unicode.rb +++ b/lib/rbot/core/unicode.rb @@ -10,6 +10,9 @@ # encoding. The plugin takes care of translation to/from utf-8 on server IO, # if necessary (translation charsets are configurable). +# TODO autoconfigure using server-provided allowed charset when these are +# available, see also comment in irc.rb + require 'iconv' class UnicodePlugin < CoreBotModule diff --git a/lib/rbot/irc.rb b/lib/rbot/irc.rb index 07ec6c37..326e25ef 100644 --- a/lib/rbot/irc.rb +++ b/lib/rbot/irc.rb @@ -273,7 +273,13 @@ class String # This method returns the Irc::Casemap whose name is the receiver # def to_irc_casemap - Irc::Casemap.get(self) rescue raise TypeError, "Unkown Irc::Casemap #{self.inspect}" + begin + Irc::Casemap.get(self) + rescue + # raise TypeError, "Unkown Irc::Casemap #{self.inspect}" + error "Unkown Irc::Casemap #{self.inspect} requested, defaulting to rfc1459" + Irc::Casemap.get('rfc1459') + end end # This method returns a string which is the downcased version of the @@ -1683,6 +1689,10 @@ module Irc if val == 'charset' reparse << "CASEMAPPING=(charset)" else + # TODO some servers offer non-standard CASEMAPPINGs in the form + # locale.charset[-options], which indicate an extended set of + # allowed characters (mostly for nicks). This might be supported + # with hooks for the unicode core module @supports[key] = val.to_irc_casemap end }