From 14bd0c9991ffb343a926c6b70fe712c9996c086d Mon Sep 17 00:00:00 2001 From: Martin Colwell Date: Mon, 13 Aug 2012 17:55:44 -0400 Subject: [PATCH 1/2] Implement channel_changer --- .gitignore | 6 +++++ Rakefile | 9 +++++--- lib/percival.rb | 1 + lib/percival/channel_changer.rb | 2 ++ lib/percival/channel_changer/plugin.rb | 27 +++++++++++++++++++++++ lib/percival/channel_changer/user_role.rb | 13 +++++++++++ 6 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 lib/percival/channel_changer.rb create mode 100644 lib/percival/channel_changer/plugin.rb create mode 100644 lib/percival/channel_changer/user_role.rb 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..6d4ea61 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,10 @@ 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] end end diff --git a/lib/percival.rb b/lib/percival.rb index 72ae60b..982c764 100644 --- a/lib/percival.rb +++ b/lib/percival.rb @@ -3,6 +3,7 @@ require 'percival/version' require 'percival/clock' require 'percival/logger' +require 'percival/channel_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 From 2711b9fa03e40679f1d1e3669a8fc9e54d8ab07d Mon Sep 17 00:00:00 2001 From: Martin Colwell Date: Mon, 13 Aug 2012 18:01:55 -0400 Subject: [PATCH 2/2] Implement name_changer --- Rakefile | 3 ++- lib/percival.rb | 1 + lib/percival/name_changer.rb | 1 + lib/percival/name_changer/plugin.rb | 11 +++++++++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 lib/percival/name_changer.rb create mode 100644 lib/percival/name_changer/plugin.rb diff --git a/Rakefile b/Rakefile index 6d4ea61..debb76b 100644 --- a/Rakefile +++ b/Rakefile @@ -34,7 +34,8 @@ task :start do c.nick = nick c.plugins.plugins = [ClockPlugin, LoggerPlugin, - ChannelChangerPlugin] + ChannelChangerPlugin, + NameChangerPlugin] end end diff --git a/lib/percival.rb b/lib/percival.rb index 982c764..cecec07 100644 --- a/lib/percival.rb +++ b/lib/percival.rb @@ -4,6 +4,7 @@ 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/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