diff --git a/.gitignore b/.gitignore index abab2bf..7ca280e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,11 @@ coverage/ data/ .rbx + *.swp *~ + +#emacs files +\#* +.#* + diff --git a/Rakefile b/Rakefile index eaca98e..debb76b 100644 --- a/Rakefile +++ b/Rakefile @@ -21,7 +21,8 @@ end desc "start percival, connect to all channels in the CHANNELS env var" task :start do system 'mkdir -p data/timesheets/' - channels = ENV["CHANNELS"].split(/,\s*/) + channels = ENV["CHANNELS"] && ENV["CHANNELS"].split(/,\s*/) || ["#lpmc-bot"] + nick = ENV["NICK"] || "percival" server = 'irc.freenode.com' require 'percival' @@ -30,8 +31,11 @@ task :start do configure do |c| c.server = server c.channels = channels - c.nick = 'percival' - c.plugins.plugins = [ClockPlugin, LoggerPlugin] + c.nick = nick + c.plugins.plugins = [ClockPlugin, + LoggerPlugin, + ChannelChangerPlugin, + NameChangerPlugin] end end diff --git a/lib/percival.rb b/lib/percival.rb index 72ae60b..cecec07 100644 --- a/lib/percival.rb +++ b/lib/percival.rb @@ -3,6 +3,8 @@ require 'percival/version' require 'percival/clock' require 'percival/logger' +require 'percival/channel_changer' +require 'percival/name_changer' PERCIVAL_ROOT = File.dirname(File.dirname(__FILE__)) diff --git a/lib/percival/channel_changer.rb b/lib/percival/channel_changer.rb new file mode 100644 index 0000000..a18b165 --- /dev/null +++ b/lib/percival/channel_changer.rb @@ -0,0 +1,2 @@ +require 'percival/channel_changer/plugin' +require 'percival/channel_changer/user_role' diff --git a/lib/percival/channel_changer/plugin.rb b/lib/percival/channel_changer/plugin.rb new file mode 100644 index 0000000..0ab4dca --- /dev/null +++ b/lib/percival/channel_changer/plugin.rb @@ -0,0 +1,27 @@ + +class ChannelChangerPlugin + include Cinch::Plugin + + match /join-channel\s+(\S+)/, :method => :join + match /leave-channel(?:\s+(\S+))?/, :method => :leave + + listen_to :error, method: :error + + def error irc + debug( irc.to_s ) + end + + def leave( irc, channel ) + if UserRole.approved? irc.user, :channel_changer + channel ||= irc.channel + Channel(channel).part + end + end + + def join( irc, channel ) + Channel(channel).join() if UserRole.approved? irc.user, :channel_changer + end +end + + + diff --git a/lib/percival/channel_changer/user_role.rb b/lib/percival/channel_changer/user_role.rb new file mode 100644 index 0000000..3073b0c --- /dev/null +++ b/lib/percival/channel_changer/user_role.rb @@ -0,0 +1,13 @@ +class UserRole + @test_users = ["colwem", "jfredett"] + @roles = { + super_user: @test_users, + channel_changer: @test_users, + name_changer: @test_users} + + def self.approved?(user, role) + user = user.name if user.is_a? Cinch::User + raise "user not in String, Cinch::User" unless user.is_a? String + @roles[role].include? user + end +end diff --git a/lib/percival/name_changer.rb b/lib/percival/name_changer.rb new file mode 100644 index 0000000..14e339f --- /dev/null +++ b/lib/percival/name_changer.rb @@ -0,0 +1 @@ +require 'percival/name_changer/plugin' diff --git a/lib/percival/name_changer/plugin.rb b/lib/percival/name_changer/plugin.rb new file mode 100644 index 0000000..c70c956 --- /dev/null +++ b/lib/percival/name_changer/plugin.rb @@ -0,0 +1,11 @@ +class NameChangerPlugin + include Cinch::Plugin + + match /change-name\s+(\S+)/, :method => :change_name + + def change_name( irc, name ) + if UserRole.approved? irc.user, :name_changer + bot.nick = name + end + end +end