From: Matthias H Date: Thu, 20 Feb 2014 22:28:09 +0000 (+0100) Subject: [core] unicode plugin that sets server encoding X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=fe6ae0ecaf02182ac5404e7ace3c24b96a12ee9a;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git [core] unicode plugin that sets server encoding --- diff --git a/lib/rbot/core/unicode.rb b/lib/rbot/core/unicode.rb new file mode 100644 index 00000000..b6471472 --- /dev/null +++ b/lib/rbot/core/unicode.rb @@ -0,0 +1,55 @@ +#-- vim:sw=2:et +#++ +# +# :title: Unicode plugin +# To set the encoding of strings coming from the irc server. + +class UnicodePlugin < CoreBotModule + Config.register Config::BooleanValue.new('encoding.enable', + :default => true, + :desc => "Support for non-ascii charsets", + :on_change => Proc.new { |bot, v| reconfigure_filter(bot) }) + + Config.register Config::StringValue.new('encoding.charset', + :default => 'utf-8', + :desc => 'Server encoding.', + :on_change => Proc.new { |bot, v| reconfigure_filter(bot) }) + + class UnicodeFilter + def initialize(charset) + @charset = charset + end + + def in(data) + data.force_encoding @charset if data + end + + def out(data) + data + end + end + + + def initialize(*a) + super + self.class.reconfigure_filter(@bot) + end + + def cleanup + debug "cleaning up encodings" + @bot.socket.filter = nil + super + end + + def UnicodePlugin.reconfigure_filter(bot) + debug "configuring encodings" + charset = bot.config['encoding.charset'] + if bot.config['encoding.enable'] + bot.socket.filter = UnicodeFilter.new charset + else + bot.socket.filter = nil + end + end +end + +UnicodePlugin.new