+
+ trap_sigs
+ end
+
+ def repopulate_botclass_directory
+ template_dir = File.join Config::datadir, 'templates'
+ if FileTest.directory? @botclass
+ # compare the templates dir with the current botclass dir, filling up the
+ # latter with any missing file. Sadly, FileUtils.cp_r doesn't have an
+ # :update option, so we have to do it manually.
+ # Note that we use the */** pattern because we don't want to match
+ # keywords.rbot, which gets deleted on load and would therefore be missing
+ # always
+ missing = Dir.chdir(template_dir) { Dir.glob('*/**') } - Dir.chdir(@botclass) { Dir.glob('*/**') }
+ missing.map do |f|
+ dest = File.join(@botclass, f)
+ FileUtils.mkdir_p(File.dirname(dest))
+ FileUtils.cp File.join(template_dir, f), dest
+ end
+ else
+ log "no #{@botclass} directory found, creating from templates..."
+ if FileTest.exist? @botclass
+ error "file #{@botclass} exists but isn't a directory"
+ exit 2
+ end
+ FileUtils.cp_r template_dir, @botclass
+ end
+ end
+
+ # Return a path under the current botclass by joining the mentioned
+ # components. The components are automatically converted to String
+ def path(*components)
+ File.join(@botclass, *(components.map {|c| c.to_s}))