summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Rakefile2
-rw-r--r--tasks/plugin.rake53
2 files changed, 54 insertions, 1 deletions
diff --git a/Rakefile b/Rakefile
index 2b51595c..97b3e1f3 100644
--- a/Rakefile
+++ b/Rakefile
@@ -195,4 +195,4 @@ desc 'Generate mo files'
task :makemo =>
FileList['po/*/*.po'].pathmap('%{^po,data/locale}d/LC_MESSAGES/%n.mo')
-
+Dir['tasks/**/*.rake'].each { |t| load t }
diff --git a/tasks/plugin.rake b/tasks/plugin.rake
new file mode 100644
index 00000000..f781481e
--- /dev/null
+++ b/tasks/plugin.rake
@@ -0,0 +1,53 @@
+task :plugin, :name do |t, args|
+ if args.to_a.empty?
+ raise <<-eos
+Usage: rake #{t}[<plugin name>]
+Example: rake plugin[Greet]
+ eos
+ end
+ plugin_name = args.name.downcase
+ class_name = "#{plugin_name.capitalize}Plugin"
+ plugin_template = <<-eot
+class #{class_name} < Plugin
+ def help(plugin, topic="")
+ topics = %w{hello}
+
+ case topic
+ when 'hello'
+ _("hello, this is an example topic of my new plugin! :)")
+ else
+ _("#{plugin_name} plugin — topics: %{list}") % {
+ :list => topics.join(", ")
+ }
+ end
+ end
+
+ def example(m, params)
+ m.reply "example action was triggered"
+ end
+end
+
+plugin = #{class_name}.new
+plugin.map "#{plugin_name} [:arg]", :action => 'example'
+ eot
+
+ plugins_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'data/rbot/plugins'))
+ file_path = File.join(plugins_path, "#{plugin_name}.rb")
+
+ if File.exist?(file_path)
+ puts "File exists: #{file_path}"
+ print "Overwrite? "
+ input = STDIN.gets.chomp
+ puts
+
+ exit unless input =~ /y(es)?/
+ end
+
+ File.open(file_path, "w") do |f|
+ f << plugin_template
+ end
+
+ puts "Plugin skeleton for #{class_name} written!"
+ puts "Now issue `rescan` on the bot and use the command `help #{plugin_name}` to see that the plugin works."
+ puts
+end