X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Ffiglet.rb;h=700730f416b6621177c45cceda4d50167bdfecea;hb=6cf365c49ce5fbe24c0a4ff0663550390b501fea;hp=598adfaffab91d10c609a96e026091f22a0ae14c;hpb=d29df50ddaf32536b105decefb135a0b86ee937f;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/figlet.rb b/data/rbot/plugins/figlet.rb index 598adfaf..700730f4 100644 --- a/data/rbot/plugins/figlet.rb +++ b/data/rbot/plugins/figlet.rb @@ -1,22 +1,139 @@ -#DEFAULT_FONT="smslant" -DEFAULT_FONT="rectangles" -MAX_WIDTH=68 +#-- vim:sw=2:et +#++ +# +# :title: Figlet plugin class FigletPlugin < Plugin + MAX_WIDTH=68 + + Config.register Config::StringValue.new('figlet.path', + :default => 'figlet', + :desc => _('Path to the figlet program'), + :on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_figlet }) + + Config.register Config::StringValue.new('figlet.font', + :default => 'smslant', + :desc => _('figlet font to use'), + :validate => Proc.new { |v| v !~ /\s|`/ }, + :on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_figlet }) + + Config.register Config::StringValue.new('toilet.path', + :default => 'toilet', + :desc => _('Path to the toilet program'), + :on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_toilet }) + + Config.register Config::StringValue.new('toilet.font', + :default => 'smslant', + :desc => _('toilet font to use'), + :validate => Proc.new { |v| v !~ /\s|`/ }, + :on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_toilet }) + + Config.register Config::ArrayValue.new('toilet.filters', + :default => [], + :desc => _('toilet filters to use (e.g. gay, metal)'), + :validate => Proc.new { |v| v !~ /\s|`/ }, + :on_change => Proc.new { |bot, v| bot.plugins['figlet'].test_toilet }) + + def figlet_path + @bot.config['figlet.path'] + end + + def toilet_path + @bot.config['toilet.path'] + end + + def figlet_font + @bot.config['figlet.font'] + end + + def toilet_font + @bot.config['toilet.font'] + end + + def toilet_filters + @bot.config['toilet.filters'] + end + + attr_reader :has, :params + + def test_figlet + #check that figlet is present + @has[:figlet] = Utils.try_exec("#{figlet_path} -v") + + # check that figlet actually has the font installed + @has[:figlet_font] = Utils.try_exec("#{figlet_path} -f #{figlet_font} test test test") + + # set the commandline params + @params[:figlet] = ['-k', '-w', MAX_WIDTH.to_s, '-C', 'utf8'] + + # add the font from DEFAULT_FONTS to the cmdline (if figlet has that font) + @params[:figlet] += ['-f', figlet_font] if @has[:figlet_font] + end + + def test_toilet + #check that toilet is present + @has[:toilet] = Utils.try_exec("#{toilet_path} -v") + + # check that toilet actually has the font installed + @has[:toilet_font] = Utils.try_exec("#{toilet_path} -f #{toilet_font} test test test") + + # set the commandline params + @params[:toilet] = ['-k', '-w', MAX_WIDTH.to_s, '-E', 'utf8', '--irc'] + + # add the font from DEFAULT_FONTS to the cmdline (if toilet has that font) + @params[:toilet] += ['-f', toilet_font] if @has[:toilet_font] + + # add the filters, if any + toilet_filters.each { |f| @params[:toilet] += ['-F', f.dup] } + end + + def initialize + super + + @has = {} + @params = {} + + # test for figlet and font presence + test_figlet + # ditto for toilet + test_toilet + end + def help(plugin, topic="") - "figlet => print using figlet" + "figlet|toilet => print using figlet or toilet" end def figlet(m, params) + key = params[:plugin] || m.plugin.intern + unless @has[key] + m.reply("%{cmd} couldn't be found. if it's installed, you should set the %{cmd}.path config key to its path" % { + :cmd => key + }) + return + end + message = params[:message].to_s if message =~ /^-/ m.reply "the message can't start with a - sign" return end - m.reply Utils.safe_exec("/usr/bin/figlet", "-k", "-w", "#{MAX_WIDTH}", "-f", DEFAULT_FONT, message) - return + + # collect the parameters to pass to safe_exec + exec_params = [send(:"#{key}_path")] + @params[key] + [message] + + # run the program + m.reply strip_first_last_empty_line(Utils.safe_exec(*exec_params)), :max_lines => 0, :nick => false end + alias :toilet :figlet + + private + + def strip_first_last_empty_line(txt) + txt.gsub(/\A(?:^\s*\r?\n)+/m,'').rstrip + end + end plugin = FigletPlugin.new plugin.map "figlet *message" +plugin.map "toilet *message"