annotate irssi/scripts/bitlbee_typing_notice.pl @ 148:4e92ca6c779a

add irssi conf
author zegervdv <zegervdv@me.com>
date Sat, 18 Oct 2014 10:06:58 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
148
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
1 # INSTALLATION
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
2 # [&bitlbee] set typing_notice true
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
3 # <@root> typing_notice = `true'
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
4 # AND
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
5 # /statusbar window add typing_notice
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
6 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
7 # SETTINGS
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
8 # [bitlbee]
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
9 # bitlbee_send_typing = ON
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
10 # -> send typing messages to buddies
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
11 # bitlbee_typing_allwin = OFF
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
12 # -> show typing notifications in all windows
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
13 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
14 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
15 # Changelog:
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
16 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
17 # 2010-08-09 (version 1.7.1)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
18 # * Multiple control channels supported by checking chanmodes
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
19 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
20 # 2010-07-27 (version 1.7)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
21 # * Using new server detection for latest BitlBee support
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
22 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
23 # 2010-07-26 (version 1.6.3)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
24 # * Removed checking if nicks exists in &bitlbee channel, this because BitlBee
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
25 # can be used without control channel from this date
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
26 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
27 # 2007-03-03 (version 1.6.2)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
28 # * Fix: timers weren't deleted correctly. This resulted in huge mem usage.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
29 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
30 # 2006-11-02 (version 1.6.1)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
31 # * Sending typing works again.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
32 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
33 # 2006-10-27 (version 1.6)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
34 # * 'channel sync' re-implemented.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
35 # * bitlbee_send_typing was a string setting, It's a boolean now, like it should.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
36 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
37 # 2006-10-24 (version 1.5)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
38 # * Sending notices to online users only. ( removed this again at 2010-07-26, see above )
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
39 # * Using the new get_channel function;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
40 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
41 # 2005-12-15 (version 1.42):
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
42 # * Fixed small bug with typing notices disappearing under certain circumstances
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
43 # in channels
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
44 # * Fixed bug that caused outgoing notifications not to work
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
45 # * root cares not about our typing status.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
46 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
47 # 2005-12-04 (version 1.41):
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
48 # * Implemented stale states in statusbar (shows "(stale)" for OSCAR connections)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
49 # * Introduced bitlbee_typing_allwin (default OFF). Set this to ON to make
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
50 # typing notifications visible in all windows.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
51 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
52 # 2005-12-03 (version 1.4):
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
53 # * Major code cleanups and rewrites for bitlbee 1.0 with the updated typing
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
54 # scheme. TYPING 0, TYPING 1, and TYPING 2 are now supported from the server.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
55 # * Stale states (where user has typed in text but has stopped typing) are now
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
56 # recognized.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
57 # * Bug where user thinks you are still typing if you close the window after
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
58 # typing something and then erasing it quickly.. fixed.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
59 # * If a user signs off while they are still typing, the notification is removed
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
60 # This update by Matt "f0rked" Sparks
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
61 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
62 # 2005-08-26:
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
63 # Some fixes for AIM, Thanks to Dracula.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
64 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
65 # 2005-08-16:
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
66 # AIM supported, for sending notices, using CTCP TYPING 0. (Use the AIM patch from Hanji http://get.bitlbee.org/patches/)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
67 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
68 # 2004-10-31:
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
69 # Sends typing notice to the bitlbee server when typing a message in irssi. bitlbee > 0.92
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
70 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
71 # 2004-06-11:
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
72 # shows [typing: ] in &bitlbee with multiple users.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
73 #
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
74 use strict;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
75 use Irssi::TextUI;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
76 use Data::Dumper;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
77
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
78 use vars qw($VERSION %IRSSI);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
79
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
80 $VERSION = '1.7.1';
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
81 %IRSSI = (
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
82 authors => 'Tijmen "timing" Ruizendaal, Matt "f0rked" Sparks',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
83 contact => '[email protected], [email protected]',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
84 name => 'BitlBee_typing_notice',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
85 description => '1. Adds an item to the status bar wich shows [typing] when someone is typing a message on the supported IM-networks 2. Sends typing notices to the supported IM networks (the other way arround). (For bitlbee 3.0+)',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
86 license => 'GPLv2',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
87 url => 'http://the-timing.nl/stuff/irssi-bitlbee, http://f0rked.com',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
88 changed => '2010-08-09',
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
89 );
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
90
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
91 my $bitlbee_server; # server object
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
92 my @control_channels; # mostly: &bitlbee, &facebook etc.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
93 init();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
94
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
95 sub init { # if script is loaded after connect
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
96 my @servers = Irssi::servers();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
97 foreach my $server(@servers) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
98 if( $server->isupport('NETWORK') eq 'BitlBee' ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
99 $bitlbee_server = $server;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
100 my @channels = $server->channels();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
101 foreach my $channel(@channels) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
102 if( $channel->{mode} =~ /C/ ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
103 push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
104 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
105 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
106 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
107 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
108 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
109 # if connect after script is loaded
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
110 Irssi::signal_add_last('event 005' => sub {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
111 my( $server ) = @_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
112 if( $server->isupport('NETWORK') eq 'BitlBee' ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
113 $bitlbee_server = $server;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
114 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
115 });
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
116 # if new control channel is synced after script is loaded
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
117 Irssi::signal_add_last('channel sync' => sub {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
118 my( $channel ) = @_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
119 if( $channel->{mode} =~ /C/ && $channel->{server}->{tag} eq $bitlbee_server->{tag} ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
120 push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
121 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
122 });
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
123
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
124 # How often to check if we are typing, or on msn,
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
125 # how long to keep the typing notice up, or check
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
126 # if the other user is still typing...
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
127 my $KEEP_TYPING_TIMEOUT = 1;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
128 my $STOP_TYPING_TIMEOUT = 7;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
129
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
130 my %timer_tag;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
131
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
132 my %typing;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
133 my %tag;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
134 my $line;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
135 my %out_typing;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
136 my $lastkey;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
137 my $keylog_active = 1;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
138 my $command_char = Irssi::settings_get_str('cmdchars'); # mostly: /
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
139 my $to_char = Irssi::settings_get_str("completion_char"); # mostly: :
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
140
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
141 sub event_ctcp_msg {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
142 my ($server, $msg, $from, $address) = @_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
143 return if $server->{tag} ne $bitlbee_server->{tag};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
144 if ( my($type) = $msg =~ "TYPING ([0-9])" ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
145 Irssi::signal_stop();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
146 if( $type == 0 ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
147 unset_typing($from);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
148 } elsif( $type == 1 ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
149 $typing{$from}=1;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
150 if( $address !~ /\@login\.oscar\.aol\.com/ and $address !~ /\@YAHOO/ and $address !~ /\@login\.icq\.com/ ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
151 Irssi::timeout_remove($tag{$from});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
152 delete($tag{$from});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
153 $tag{$from}=Irssi::timeout_add_once($STOP_TYPING_TIMEOUT*1000,"unset_typing",$from);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
154 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
155 redraw($from);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
156 } elsif( $type == 2 ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
157 stale_typing($from);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
158 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
159 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
160 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
161
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
162 sub unset_typing {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
163 my($from,$no_redraw)=@_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
164 delete $typing{$from} if $typing{$from};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
165 Irssi::timeout_remove($tag{$from});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
166 delete($tag{$from});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
167 redraw($from) if !$no_redraw;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
168 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
169
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
170 sub stale_typing {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
171 my($from)=@_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
172 $typing{$from}=2;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
173 redraw($from);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
174 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
175
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
176 sub redraw {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
177 my($from)=@_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
178 my $window = Irssi::active_win();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
179 my $name = $window->get_active_name();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
180
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
181 # only redraw if current window equals to the typing person, is a control channel or if allwin is set
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
182 if( $from eq $name || (grep $_ eq $name, @control_channels) || Irssi::settings_get_bool("bitlbee_typing_allwin") ){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
183 Irssi::statusbar_items_redraw('typing_notice');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
184 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
185 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
186
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
187 sub event_msg {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
188 my ($server,$data,$from,$address,$target) = @_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
189 return if $server->{tag} ne $bitlbee_server->{tag};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
190 my $channel=Irssi::active_win()->get_active_name();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
191 unset_typing $from, "no redraw";
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
192 unset_typing $channel;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
193 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
194
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
195 sub event_quit {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
196 my $server = shift;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
197 return if $server->{tag} ne $bitlbee_server->{tag};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
198 my $nick = shift;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
199 unset_typing $nick;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
200 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
201
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
202 sub typing_notice {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
203 my ($item, $get_size_only) = @_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
204 my $window = Irssi::active_win();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
205 my $channel = $window->get_active_name();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
206
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
207 if (exists($typing{$channel})) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
208 my $append=$typing{$channel}==2 ? " (stale)" : "";
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
209 $item->default_handler($get_size_only, "{sb typing$append}", 0, 1);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
210 } else {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
211 $item->default_handler($get_size_only, "", 0, 1);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
212 Irssi::timeout_remove($tag{$channel});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
213 delete($tag{$channel});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
214 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
215 # we check for correct windows again, because the statusbar item is redrawn after window change too.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
216 if( (grep $_ eq $channel, @control_channels) || Irssi::settings_get_bool("bitlbee_typing_allwin")) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
217 foreach my $key (keys(%typing)) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
218 $line .= " ".$key;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
219 if ($typing{$key}==2) { $line .= " (stale)"; }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
220 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
221 if ($line ne "") {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
222 $item->default_handler($get_size_only, "{sb typing:$line}", 0, 1);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
223 $line = "";
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
224 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
225 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
226 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
227
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
228 sub window_change {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
229 Irssi::statusbar_items_redraw('typing_notice');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
230 my $win = !Irssi::active_win() ? undef : Irssi::active_win()->{active};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
231 if (ref $win && ($win->{server}->{tag} eq $bitlbee_server->{tag})) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
232 if (!$keylog_active) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
233 $keylog_active = 1;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
234 Irssi::signal_add_last('gui key pressed', 'key_pressed');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
235 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
236 } else {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
237 if ($keylog_active) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
238 $keylog_active = 0;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
239 Irssi::signal_remove('gui key pressed', 'key_pressed');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
240 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
241 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
242 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
243
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
244 sub key_pressed {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
245 return if !Irssi::settings_get_bool("bitlbee_send_typing");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
246 my $key = shift;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
247 if ($key != 9 && $key != 10 && $lastkey != 27 && $key != 27
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
248 && $lastkey != 91 && $key != 126 && $key != 127)
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
249 {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
250 my $server = Irssi::active_server();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
251 my $window = Irssi::active_win();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
252 my $nick = $window->get_active_name();
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
253
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
254 if ($server->{tag} eq $bitlbee_server->{tag} && $nick ne "(status)" && $nick ne "root") {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
255 if( grep $_ eq $nick, @control_channels ){ # send typing if in control channel
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
256 my $input = Irssi::parse_special("\$L");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
257 my ($first_word) = split(/ /,$input);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
258 if ($input !~ /^$command_char.*/ && $first_word =~ s/$to_char$//){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
259 send_typing($first_word);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
260 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
261 } else { # or any other channels / query
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
262 my $input = Irssi::parse_special("\$L");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
263 if ($input !~ /^$command_char.*/ && length($input) > 0){
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
264 send_typing($nick);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
265 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
266 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
267 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
268 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
269 $lastkey = $key;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
270 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
271
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
272 sub out_empty {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
273 my ($a) = @_;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
274 my($nick,$tag)=@{$a};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
275 delete($out_typing{$nick});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
276 Irssi::timeout_remove($timer_tag{$nick});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
277 delete($timer_tag{$nick});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
278 $bitlbee_server->command("^CTCP $nick TYPING 0");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
279 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
280
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
281 sub send_typing {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
282 my $nick = shift;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
283 if (!exists($out_typing{$nick}) || time - $out_typing{$nick} > $KEEP_TYPING_TIMEOUT) {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
284 $bitlbee_server->command("^CTCP $nick TYPING 1");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
285 $out_typing{$nick} = time;
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
286 ### Reset 'stop-typing' timer
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
287 Irssi::timeout_remove($timer_tag{$nick});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
288 delete($timer_tag{$nick});
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
289
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
290 ### create new timer
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
291 $timer_tag{$nick} = Irssi::timeout_add_once($STOP_TYPING_TIMEOUT*1000, 'out_empty', ["$nick", $bitlbee_server->{tag}]);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
292 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
293 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
294
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
295 #README: Delete the old bitlbee_send_typing string from ~/.irssi/config. A boolean is better.
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
296
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
297 sub db_typing {
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
298 print "Detected channels: ";
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
299 print Dumper(@control_channels);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
300 print "Detected server tag: ".$bitlbee_server->{tag};
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
301 print "Tag: ".Dumper(%tag);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
302 print "Timer Tag: ".Dumper(%timer_tag);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
303 print "Typing: ".Dumper(%typing);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
304 print "Out Typing: ".Dumper(%out_typing);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
305 }
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
306
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
307 Irssi::command_bind('db_typing','db_typing');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
308
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
309 Irssi::settings_add_bool("bitlbee","bitlbee_send_typing",1);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
310 Irssi::settings_add_bool("bitlbee","bitlbee_typing_allwin",0);
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
311
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
312 Irssi::signal_add("ctcp msg", "event_ctcp_msg");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
313 Irssi::signal_add("message private", "event_msg");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
314 Irssi::signal_add("message public", "event_msg");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
315 Irssi::signal_add("message quit", "event_quit");
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
316 Irssi::signal_add_last('window changed', 'window_change');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
317 Irssi::signal_add_last('gui key pressed', 'key_pressed');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
318 Irssi::statusbar_item_register('typing_notice', undef, 'typing_notice');
4e92ca6c779a add irssi conf
zegervdv <zegervdv@me.com>
parents:
diff changeset
319 Irssi::statusbars_recreate_items();