#!/usr/bin/perl -w
## Bugreports and Licence disclaimer.
#
# For bugreports and other improvements contact Geert Hauwaerts
#
# 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 2 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 script; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA.
##
## Documentation.
#
# Versioning:
#
# This script uses the YEAR.FEATURE.REVISION versioning scheme and must abide
# by the follwing rules:
#
# 1) when adding a new feature, you must increase the FEATURE
# numeric by one;
#
# 2) when fixing a bug, you must increase the REVISION numeric
# by one; and
#
# 3) the first feature or bug change in any given year must set the YEAR
# numeric to the two digit representation of the current year, and
# reset the FEATURE and REVISION numerics to 01.
#
# Settings:
#
# away_hilight_notice_timeout
#
# The default time between notices sent to the same person are 3600
# seconds or once an hour.
#
# away_hilight_notice_filter
#
# A list of channels, separated by space, on which the script will be
# disabled.
##
##
# Load the required libraries.
##
use strict;
use Irssi;
use vars qw($VERSION %IRSSI);
##
# Declare the administrative information.
##
$VERSION = '15.01.01';
%IRSSI = (
authors => 'Geert Hauwaerts',
contact => '[email protected]',
name => 'away_hilight_notice.pl',
description => 'This script will notice your away message in response to a hilight.',
license => 'GNU General Public License',
url => 'https://github.com/GeertHauwaerts/irssi-scripts/blob/master/src/away_hilight_notice.pl',
changed => 'Thu Jun 25 20:46:51 UTC 2015',
);
##
# Register the custom theme formats.
##
Irssi::theme_register([
'away_hilight_notice_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.',
]);
##
# Declare the script variables.
##
my %lasthilight;
## Function.
#
# Irssi::away_hilight_notice::away_hilight_notice() function.
#
# Function: away_hilight_notice()
# Arguments: The destination.
# The text.
# The stripped text.
#
# Description: Sends a notice with your away message.
##
sub away_hilight_notice {
##
# Parse the parameters.
##
my ($dest, $text, $stripped) = @_;
my $server = $dest->{'server'};
my $hilight = Irssi::parse_special('$;');
##
# Check whether the message is irrelevant.
##
if (!$server || !($dest->{'level'} & MSGLEVEL_HILIGHT) || ($dest->{'level'} & (MSGLEVEL_MSGS|MSGLEVEL_NOTICES|MSGLEVEL_SNOTES|MSGLEVEL_CTCPS|MSGLEVEL_ACTIONS|MSGLEVEL_JOINS|MSGLEVEL_PARTS|MSGLEVEL_QUITS|MSGLEVEL_KICKS|MSGLEVEL_MODES|MSGLEVEL_TOPICS|MSGLEVEL_WALLOPS|MSGLEVEL_INVITES|MSGLEVEL_NICKS|MSGLEVEL_DCC|MSGLEVEL_DCCMSGS|MSGLEVEL_CLIENTNOTICE|MSGLEVEL_CLIENTERROR))) {
return;
}
##
# Check whether we are marked as away.
##
if ($server->{'usermode_away'}) {
##
# Loop through each entry in the filter.
##
foreach (split /\s+/, Irssi::settings_get_str('away_hilight_notice_filter')) {
##
# Check if the target is filtered.
##
if (lc($dest->{'target'}) eq lc($_)) {
return;
}
}
##
# Check whether we need to send a notice.
##
if (!$lasthilight{lc($hilight)}{'last'} || ($lasthilight{lc($hilight)}{'last'} && ((time() - $lasthilight{lc($hilight)}{'last'}) > Irssi::settings_get_int('away_hilight_notice_timeout')))) {
$lasthilight{lc($hilight)}{'last'} = time();
$server->command('^NOTICE ' . $hilight . ' I\'m away (' . $server->{'away_reason'} . ')');
}
}
}
## Function.
#
# Irssi::away_hilight_notice::clear_associative_array() function.
#
# Function: clear_associative_array()
# Arguments: The server.
#
# Description: Remove the timers from the memory.
##
sub clear_associative_array {
##
# Parse the parameters.
##
my ($server) = @_;
##
# Check whether we are marked as active.
##
if (!$server->{'usermode_away'}) {
%lasthilight = ();
}
}
##
# Register the signals to hook on.
##
Irssi::signal_add('print text', 'away_hilight_notice');
Irssi::signal_add('away mode changed', 'clear_associative_array');
##
# Register the custom settings.
##
Irssi::settings_add_int('away', 'away_hilight_notice_timeout', 3600);
Irssi::settings_add_str('away', 'away_hilight_notice_filter', '#bitlbee #twitter');
##
# Display the script banner.
##
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'away_hilight_notice_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});