diff options
Diffstat (limited to 'scripts/perl/oldtopic.pl')
-rw-r--r-- | scripts/perl/oldtopic.pl | 242 |
1 files changed, 0 insertions, 242 deletions
diff --git a/scripts/perl/oldtopic.pl b/scripts/perl/oldtopic.pl deleted file mode 100644 index 013b5e95c..000000000 --- a/scripts/perl/oldtopic.pl +++ /dev/null @@ -1,242 +0,0 @@ -# -# Copyright (c) 2007 by FlashCode <flashcode@flashtux.org> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# -# Display old topics for a channel. -# -# History: -# 2007-08-10, FlashCode <flashcode@flashtux.org>: -# version 0.2: upgraded licence to GPL 3 -# 2007-03-29, FlashCode <flashcode@flashtux.org>: -# version 0.1: initial release -# - -use strict; - -my $version = "0.2"; - -my $plugin_help_options = "Plugins options (set with /setp):\n" - ." - perl.oldtopic.log_server: if on, displays all topic changes on server buffer\n" - ." - perl.oldtopic.max_topics: number of topics to keep for each channel " - ."(0 = do not keep any topics)"; - -# default values in setup file (~/.weechat/plugins.rc) -my $default_log_server = "off"; -my $default_max_topics = "10"; - -# init script -weechat::register("oldtopic", $version, "", "Display old topics for a channel"); -weechat::set_plugin_config("log_server", $default_log_server) if (weechat::get_plugin_config("log_server") eq ""); -weechat::set_plugin_config("max_topics", $default_max_topics) if (weechat::get_plugin_config("max_topics") eq ""); - -# message and command handlers -weechat::add_message_handler("topic", "topic_msg"); -weechat::add_message_handler("332", "topic_332_msg"); -weechat::add_message_handler("333", "topic_333_msg"); -weechat::add_command_handler ("lasttopic", "lasttopic_cmd", - "Display last topic for a channel (topic before current one)", - "[channel]", - "channel: channel name (default: current channel)\n\n" - .$plugin_help_options, - "%C"); -weechat::add_command_handler ("oldtopic", "oldtopic_cmd", - "Display old topics for a channel", - "[channel]", - "channel: channel name (default: current channel)\n\n" - .$plugin_help_options, - "%C"); - -my %oldtopic; -undef %oldtopic; - -my %msg_332_topic; -undef %msg_332_topic; - -sub get_config -{ - my $conf_log_server = weechat::get_plugin_config("log_server"); - $conf_log_server = $default_log_server if ($conf_log_server eq ""); - - my $conf_max = weechat::get_plugin_config("max_topics"); - $conf_max = $default_max_topics if ($conf_max eq ""); - $conf_max = 0 if ($conf_max < 0); - - return ($conf_log_server, $conf_max); -} - -sub add_topic -{ - my ($server, $channel, $nick, $topic, $topicdate, $conf_max) = - ($_[0], $_[1], $_[2], $_[3], $_[4], $_[5]); - - my $time = $topicdate; - $time = time() if ($time eq ""); - - $oldtopic{$server}{$channel}{$time}{"nick"} = $nick; - $oldtopic{$server}{$channel}{$time}{"topic"} = $topic; - my $numchan = scalar(keys(%{$oldtopic{$server}{$channel}})); - if ($numchan > $conf_max) - { - my $diff = $numchan - $conf_max; - my $count = 0; - foreach my $date (sort keys %{$oldtopic{$server}{$channel}}) - { - delete($oldtopic{$server}{$channel}{$date}); - $count++; - last if ($count >= $diff); - } - } -} - -# received when someone changes topic on a channel -sub topic_msg -{ - my $server = $_[0]; - my ($conf_log_server, $conf_max) = get_config(); - - if ($_[1] =~ /(.*) TOPIC (.*)/) - { - my $nick = $1; - my $args = $2; - my $nick = $1 if ($nick =~ /:?([^!]+)(!?.*)/); - if ($args =~ /([\#\&\+\!][^ ]*) (.*)/) - { - my $channel = $1; - my $topic = $2; - $topic = $1 if ($topic =~ /:(.*)/); - - if ($conf_log_server eq "on") - { - weechat::print("Topic on $channel changed by ${nick} to: \"${topic}\x0F\"", - "", $server); - } - - if ($conf_max > 0) - { - add_topic($server, $channel, $nick, $topic, "", $conf_max); - } - else - { - delete($oldtopic{$server}{$channel}); - } - } - } - return weechat::PLUGIN_RC_OK; -} - -# topic for a channel (when joining channel) -sub topic_332_msg -{ - my $server = $_[0]; - - if ($_[1] =~ /(.*) 332 (.*)/) - { - my $args = $2; - if ($args =~ /([\#\&\+\!][^ ]*) (.*)/) - { - my $channel = $1; - my $topic = $2; - $topic = $1 if ($topic =~ /:(.*)/); - $msg_332_topic{$server}{$channel} = $topic; - } - } - return weechat::PLUGIN_RC_OK; -} - -# nick/date for topic (when joining channel, received after 332) -sub topic_333_msg -{ - my $server = $_[0]; - - if ($_[1] =~ /.* 333 .* ([\#\&\+\!][^ ]*) (.*) ([0-9]+)/) - { - my $channel = $1; - my $nick = $2; - my $date = $3; - my ($conf_log_server, $conf_max) = get_config(); - add_topic($server, $channel, $nick, - $msg_332_topic{$server}{$channel}, - $date, $conf_max); - } - return weechat::PLUGIN_RC_OK; -} - -sub lasttopic_cmd -{ - my $server = weechat::get_info("server"); - my $channel = weechat::get_info("channel"); - $channel = $_[1] if ($_[1] ne ""); - - if ($channel ne "") - { - my ($conf_log_server, $conf_max) = get_config(); - - delete($oldtopic{$server}{$channel}) if ($conf_max == 0); - - my $count = 0; - my $found = 0; - foreach my $date (sort { $b <=> $a } keys %{$oldtopic{$server}{$channel}}) - { - $count++; - if ($count > 1) - { - $found = 1; - weechat::print("Last topic for ${server}/${channel}: on ".localtime($date)." by ". - $oldtopic{$server}{$channel}{$date}{"nick"}.": \"". - $oldtopic{$server}{$channel}{$date}{"topic"}."\x0F\""); - last; - } - } - weechat::print("Last topic not found for channel ${server}/${channel}.") if ($found == 0); - } - else - { - weechat::print("Error: this buffer is not a channel."); - } - - return weechat::PLUGIN_RC_OK; -} - -sub oldtopic_cmd -{ - my $server = weechat::get_info("server"); - my $channel = weechat::get_info("channel"); - $channel = $_[1] if ($_[1] ne ""); - - if ($channel ne "") - { - my ($conf_log_server, $conf_max) = get_config(); - - delete($oldtopic{$server}{$channel}) if ($conf_max == 0); - - my $found = 0; - foreach my $date (sort keys %{$oldtopic{$server}{$channel}}) - { - $found = 1; - weechat::print("Topic for ${server}/${channel} on ".localtime($date)." by ". - $oldtopic{$server}{$channel}{$date}{"nick"}.": \"". - $oldtopic{$server}{$channel}{$date}{"topic"}."\x0F\""); - } - weechat::print("No old topic for channel ${server}/${channel}.") if ($found == 0); - } - else - { - weechat::print("Error: this buffer is not a channel."); - } - - return weechat::PLUGIN_RC_OK; -} |