aboutsummaryrefslogtreecommitdiff
path: root/module/admin.rb
diff options
context:
space:
mode:
Diffstat (limited to 'module/admin.rb')
-rw-r--r--module/admin.rb79
1 files changed, 79 insertions, 0 deletions
diff --git a/module/admin.rb b/module/admin.rb
new file mode 100644
index 0000000..d59fd49
--- /dev/null
+++ b/module/admin.rb
@@ -0,0 +1,79 @@
+require_relative 'module'
+
+module Dinobot
+ module Module
+ class Admin < Module
+ def initialize(bot)
+ super
+
+ @commands << :join << :part << :load << :unload
+ @commands << :listadmins << :listmodules << :listchannels
+
+ @admins = Array.new
+ end
+
+ def add(user)
+ @admins << user unless @admins.include?(user)
+ end
+
+ def remove(user)
+ @admins.delete(user)
+ end
+
+ def is_admin?(user)
+ # FIXME: Using hostname for testing purposes. Need better solution.
+ @admins.include?(user.sub(/.+@/, ''))
+ end
+
+ def join(user, channel, argument)
+ return unless is_admin?(user)
+
+ [[:join, argument.strip]]
+ end
+
+ def part(user, channel, argument)
+ return unless is_admin?(user)
+
+ [[:part, argument.strip]]
+ end
+
+ def listadmins(user, channel, argument)
+ return unless is_admin?(user)
+
+ [[:say, channel, @admins.join(' ')]]
+ end
+
+ def load(user, channel, argument)
+ return unless is_admin?(user)
+
+ argument.split.each do |x|
+ @bot.load_module x.intern
+ end
+
+ nil
+ end
+
+ def unload(user, channel, argument)
+ return unless is_admin?(user)
+
+ argument.split.each do |x|
+ @bot.unload_module x.intern
+ end
+
+ nil
+ end
+
+ def listmodules(user, channel, argument)
+ return unless is_admin?(user)
+
+ [[:say, channel, "Modules: #{@bot.modules.keys.sort.join(' ')}"]]
+ end
+
+ def listchannels(user, channel, argument)
+ return unless is_admin?(user)
+
+ [[:say, channel, "Channels: #{@bot.channels.sort.join(' ')}"]]
+ end
+ end
+ end
+end