WeeChat: new script for minbif
This commit is contained in:
parent
d214bc138f
commit
3a3ee80f7e
145
.weechat/perl/minbif_typing_notice.pl
Normal file
145
.weechat/perl/minbif_typing_notice.pl
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2014 nemunaire <nemunaire@nemunai.re>
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# For minbif - displays when someone is typing a message to you, and notice them when you do.
|
||||||
|
#
|
||||||
|
# History:
|
||||||
|
# 2014-03-05, nemunaire<nemunaire@nemunai.re>:
|
||||||
|
# version 0.1: initial release
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
my $SCRIPT_NAME = "minbif_typing_notice";
|
||||||
|
my $VERSION = "0.1";
|
||||||
|
|
||||||
|
weechat::register($SCRIPT_NAME, "Nemunaire <nemunaire\@nemunai.re>", $VERSION,
|
||||||
|
"GPL3", "For minbif - displays when someone is typing a message to you, and notice them when you do.", "", "");
|
||||||
|
init_config();
|
||||||
|
|
||||||
|
my %h_typing;
|
||||||
|
my %h_sending;
|
||||||
|
|
||||||
|
weechat::bar_item_new("typing_notice", "draw_typing", "");
|
||||||
|
weechat::hook_modifier("irc_in_privmsg", "modifier_ctcp", "");
|
||||||
|
weechat::hook_signal("input_text_changed", "input_changed", "");
|
||||||
|
|
||||||
|
sub draw_typing
|
||||||
|
{
|
||||||
|
my ($osefa, $osefb, $osefc) = @_;
|
||||||
|
|
||||||
|
my $buffer = weechat::current_buffer();
|
||||||
|
|
||||||
|
return "✎" if exists $h_typing{$buffer};
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub input_changed
|
||||||
|
{
|
||||||
|
my ($data, $signal, $type_data) = @_;
|
||||||
|
|
||||||
|
my $buffer = weechat::current_buffer();
|
||||||
|
my $buffer_name = weechat::buffer_get_string($buffer, "name");
|
||||||
|
|
||||||
|
my $server_name = weechat::config_get_plugin("minbif_server");
|
||||||
|
|
||||||
|
my $nick;
|
||||||
|
if ($buffer_name =~ /^\Q$server_name\E\.(.*)/)
|
||||||
|
{
|
||||||
|
$nick = $1;
|
||||||
|
return weechat::WEECHAT_RC_OK if $nick eq "request";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return weechat::WEECHAT_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $buffer_text = weechat::buffer_get_string($buffer, "input");
|
||||||
|
if ($buffer_text eq "" or $buffer_text =~ /^\//)
|
||||||
|
{
|
||||||
|
if (exists $h_sending{$buffer})
|
||||||
|
{
|
||||||
|
weechat::command($buffer, "/mute -all ctcp $nick TYPING 0");
|
||||||
|
weechat::unhook($h_sending{$buffer});
|
||||||
|
delete $h_sending{$buffer};
|
||||||
|
}
|
||||||
|
return weechat::WEECHAT_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return weechat::WEECHAT_RC_OK if exists $h_sending{$buffer};
|
||||||
|
|
||||||
|
weechat::command($buffer, "/mute -all ctcp $nick TYPING 1");
|
||||||
|
$h_sending{$buffer} = weechat::hook_timer(5000, 0, 1, "sending_timeout", $buffer);
|
||||||
|
|
||||||
|
return weechat::WEECHAT_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub sending_timeout
|
||||||
|
{
|
||||||
|
my ($buffer, $n) = @_;
|
||||||
|
my $buffer_name = weechat::buffer_get_string($buffer, "name");
|
||||||
|
my $server_name = weechat::config_get_plugin("minbif_server");
|
||||||
|
|
||||||
|
if (exists $h_sending{$buffer} && $buffer_name =~ /^\Q$server_name\E\.(.*)/)
|
||||||
|
{
|
||||||
|
weechat::command($buffer, "/mute -all ctcp $1 TYPING 0");
|
||||||
|
weechat::unhook($h_sending{$buffer});
|
||||||
|
delete $h_sending{$buffer};
|
||||||
|
}
|
||||||
|
return weechat::WEECHAT_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub typing_timeout
|
||||||
|
{
|
||||||
|
my ($buffer, $n) = @_;
|
||||||
|
|
||||||
|
if (exists $h_typing{$buffer})
|
||||||
|
{
|
||||||
|
weechat::unhook($h_typing{$buffer});
|
||||||
|
delete $h_typing{$buffer};
|
||||||
|
}
|
||||||
|
weechat::bar_item_update("typing_notice")
|
||||||
|
}
|
||||||
|
|
||||||
|
sub modifier_ctcp
|
||||||
|
{
|
||||||
|
my ($data, $modifier, $modifier_data, $string) = @_;
|
||||||
|
|
||||||
|
if ($string =~ /:([^!]*)!([^\s]*)\sPRIVMSG\s([^\s]*)\s:\01TYPING\s([0-9])\01/)
|
||||||
|
{
|
||||||
|
my $buffer = weechat::buffer_search("irc", $modifier_data . "." . $1);
|
||||||
|
|
||||||
|
weechat::unhook($h_typing{$buffer}) if exists $h_typing{$buffer};
|
||||||
|
|
||||||
|
if ($4 == "1") {
|
||||||
|
$h_typing{$buffer} = weechat::hook_timer(42000, 0, 1, "typing_timeout", $buffer)
|
||||||
|
}
|
||||||
|
elsif ($4 == "0") {
|
||||||
|
delete $h_typing{$buffer} if (exists $h_typing{$buffer});
|
||||||
|
}
|
||||||
|
|
||||||
|
weechat::bar_item_update("typing_notice");
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return $string
|
||||||
|
}
|
||||||
|
|
||||||
|
sub init_config
|
||||||
|
{
|
||||||
|
my $version = weechat::info_get("version_number", "") || 0;
|
||||||
|
if (!weechat::config_is_set_plugin("minbif_server"))
|
||||||
|
{
|
||||||
|
weechat::config_set_plugin("minbif_server", "minbif")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user