zsh_dots 0.5.9 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/config/gitconfig +4 -1
- data/config/gitignore +3 -1
- data/config/heroku.zsh.example +2 -0
- data/config/vimrc +27 -1
- data/config/zshenv +7 -3
- data/etc/irssi/config.example +230 -0
- data/etc/irssi/default.theme +294 -0
- data/etc/irssi/nickserv.networks +2 -0
- data/etc/irssi/scripts/autorun/freenode_filter.pl +122 -0
- data/etc/irssi/scripts/autorun/nickserv.pl +563 -0
- data/etc/irssi/scripts/autorun/trigger.pl +1225 -0
- data/etc/irssi/scripts/autorun/vim_mode.pl +3783 -0
- data/etc/irssi/solarized-universal.theme +372 -0
- data/etc/irssi/triggers +2 -0
- data/etc/rails/template.rb +20 -9
- data/lib/dots/aliases.zsh +4 -0
- data/lib/plugins/git/git.plugin.zsh +3 -3
- data/lib/plugins/heroku/heroku.plugin.zsh +12 -0
- data/lib/ruby/dots/bootstrap.rb +46 -26
- data/lib/ruby/dots/packages.rb +19 -0
- data/lib/ruby/dots/version.rb +1 -1
- metadata +16 -6
@@ -0,0 +1,122 @@
|
|
1
|
+
#!/usr/bin/perl -w
|
2
|
+
|
3
|
+
## Bugreports and Licence disclaimer.
|
4
|
+
#
|
5
|
+
# For bugreports and other improvements contact Geert Hauwaerts <geert@irssi.org>
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this script; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
+
#
|
21
|
+
##
|
22
|
+
|
23
|
+
use strict;
|
24
|
+
use Irssi;
|
25
|
+
use vars qw($VERSION %IRSSI);
|
26
|
+
|
27
|
+
$VERSION = "0.06";
|
28
|
+
|
29
|
+
%IRSSI = (
|
30
|
+
authors => 'Geert Hauwaerts',
|
31
|
+
contact => 'geert@irssi.org',
|
32
|
+
name => 'default.pl',
|
33
|
+
description => 'This script will filter some Freenode IRCD (Dancer) servernotices.',
|
34
|
+
license => 'GNU General Public License',
|
35
|
+
url => 'http://irssi.hauwaerts.be/freenode_filter.pl',
|
36
|
+
changed => 'Wed Sep 17 23:00:11 CEST 2003',
|
37
|
+
);
|
38
|
+
|
39
|
+
Irssi::theme_register([
|
40
|
+
'window_missing', '%_Warning%_: %R>>%n You are missing the %_FILTER%_ window. Use %_/WINDOW NEW HIDDEN%_ and %_/WINDOW NAME FILTER%_ to create it.',
|
41
|
+
'filter', '{servernotice $0} $1',
|
42
|
+
'freenode_filter_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.'
|
43
|
+
]);
|
44
|
+
|
45
|
+
sub check_filter {
|
46
|
+
|
47
|
+
if (!Irssi::window_find_name("FILTER")) {
|
48
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'window_missing');
|
49
|
+
return 0;
|
50
|
+
}
|
51
|
+
|
52
|
+
return 1;
|
53
|
+
}
|
54
|
+
|
55
|
+
sub parse_snote {
|
56
|
+
|
57
|
+
my ($dest, $text) = @_;
|
58
|
+
|
59
|
+
return if (($text !~ /^NOTICE/));
|
60
|
+
|
61
|
+
if ($text =~ /Notice -- Client connecting:/) {
|
62
|
+
filter_snote($dest, $text);
|
63
|
+
} elsif ($text =~ /Notice -- Illegal nick/) {
|
64
|
+
filter_snote($dest, $text);
|
65
|
+
} elsif ($text =~ /Notice -- Invalid username:/) {
|
66
|
+
filter_snote($dest, $text);
|
67
|
+
} elsif ($text =~ /Notice -- X-line Warning/) {
|
68
|
+
filter_snote($dest, $text);
|
69
|
+
} elsif ($text =~ /Notice -- Kick from/) {
|
70
|
+
filter_snote($dest, $text);
|
71
|
+
} elsif ($text =~ /Notice -- Client exiting:/) {
|
72
|
+
filter_snote($dest, $text);
|
73
|
+
} elsif ($text =~ /Notice -- (.*) confirms kill/) {
|
74
|
+
filter_snote($dest, $text);
|
75
|
+
} elsif ($text =~ /Notice -- Remove from/) {
|
76
|
+
filter_snote($dest, $text);
|
77
|
+
} elsif ($text =~ /Notice -- Flooder (.*)/) {
|
78
|
+
filter_snote($dest, $text);
|
79
|
+
} elsif ($text =~ /Notice -- Received KILL message for/) {
|
80
|
+
filter_snote($dest, $text);
|
81
|
+
}
|
82
|
+
|
83
|
+
if ($text =~ /Notice -- (.*) has removed the K-Line for:/) {
|
84
|
+
active_snote($dest, $text);
|
85
|
+
} elsif ($text =~ /Notice -- (.*) added K-Line for/) {
|
86
|
+
active_snote($dest, $text);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
sub filter_snote {
|
91
|
+
|
92
|
+
my ($server, $snote) = @_;
|
93
|
+
my $win = Irssi::window_find_name("FILTER");
|
94
|
+
my $ownnick = $server->{nick};
|
95
|
+
|
96
|
+
$snote =~ s/^NOTICE $ownnick ://;
|
97
|
+
|
98
|
+
if (!check_filter()) {
|
99
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'window_missing');
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
103
|
+
$win->printformat(MSGLEVEL_SNOTES, 'filter', $server->{real_address}, $snote);
|
104
|
+
Irssi::signal_stop();
|
105
|
+
}
|
106
|
+
|
107
|
+
sub active_snote {
|
108
|
+
|
109
|
+
my ($server, $snote) = @_;
|
110
|
+
my $ownnick = $server->{nick};
|
111
|
+
my $win = Irssi::active_win();
|
112
|
+
|
113
|
+
$snote =~ s/^NOTICE $ownnick ://;
|
114
|
+
|
115
|
+
$win->printformat(MSGLEVEL_SNOTES, 'filter', $server->{real_address}, $snote);
|
116
|
+
Irssi::signal_stop();
|
117
|
+
}
|
118
|
+
|
119
|
+
check_filter();
|
120
|
+
|
121
|
+
Irssi::signal_add_first('server event', 'parse_snote');
|
122
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'freenode_filter_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});
|
@@ -0,0 +1,563 @@
|
|
1
|
+
#!/usr/bin/perl -w
|
2
|
+
|
3
|
+
## Bugreports and Licence disclaimer.
|
4
|
+
#
|
5
|
+
# For bugreports and other improvements contact Geert Hauwaerts <geert@irssi.org>
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this script; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
+
#
|
21
|
+
##
|
22
|
+
|
23
|
+
use strict;
|
24
|
+
use Irssi;
|
25
|
+
use vars qw($VERSION %IRSSI);
|
26
|
+
|
27
|
+
$VERSION = "1.8";
|
28
|
+
|
29
|
+
%IRSSI = (
|
30
|
+
authors => 'Geert Hauwaerts',
|
31
|
+
contact => 'geert@irssi.org',
|
32
|
+
name => 'nickserv.pl',
|
33
|
+
description => 'This script will authorize you into NickServ.',
|
34
|
+
license => 'GNU General Public License',
|
35
|
+
url => 'http://irssi.hauwaerts.be/nickserv.pl',
|
36
|
+
changed => 'Fri Jun 6 12:03:04 CEST 2008',
|
37
|
+
);
|
38
|
+
|
39
|
+
my @nickservnet = ();
|
40
|
+
my $nickservnet_file = "nickserv.networks";
|
41
|
+
|
42
|
+
my @nickservauth = ();
|
43
|
+
my $nickservauth_file = "nickserv.auth";
|
44
|
+
|
45
|
+
my $irssidir = Irssi::get_irssi_dir();
|
46
|
+
|
47
|
+
my $help = <<EOF;
|
48
|
+
|
49
|
+
Usage: (all on one line)
|
50
|
+
/NICKSERV [addnet <ircnet> <services\@host>]
|
51
|
+
[addnick <ircnet> <nickname> <password>]
|
52
|
+
[delnet <ircnet>]
|
53
|
+
[delnick <ircnet> <nick>]
|
54
|
+
[help listnet listnick]
|
55
|
+
|
56
|
+
addnet: Add a new network into the NickServ list.
|
57
|
+
addnick: Add a new nickname into the NickServ list.
|
58
|
+
delnet: Delete a network from the NickServ list.
|
59
|
+
delnick: Delete a nickname from the NickServ list.
|
60
|
+
listnet: Display the contents of the NickServ network list.
|
61
|
+
listnick: Display the contents of the NickServ nickname list.
|
62
|
+
help: Display this useful little helptext.
|
63
|
+
|
64
|
+
Examples: (all on one line)
|
65
|
+
/NICKSERV addnet Freenode NickServ\@services.
|
66
|
+
/NICKSERV addnick Freenode Geert mypass
|
67
|
+
|
68
|
+
/NICKSERV delnet Freenode
|
69
|
+
/NICKSERV delnick Freenode Geert
|
70
|
+
|
71
|
+
Note: This script doesn't allow wildcards into the NickServ hostname. You must use the full services\@host.
|
72
|
+
Both /NICKSERV and /NS are valid commands.
|
73
|
+
EOF
|
74
|
+
|
75
|
+
Irssi::theme_register([
|
76
|
+
'nickserv_usage_network', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV addnet ircnet services@host%_".',
|
77
|
+
'nickserv_usage_nickname', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV addnick ircnet nickname password%_".',
|
78
|
+
'nickserv_delusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delnet ircnet%_".',
|
79
|
+
'nickserv_delnickusage', '%R>>%n %_NickServ:%_ Insufficient parameters: Usage "%_/NICKSERV delnick ircnet nickname%_".',
|
80
|
+
'nickserv_delled', '%R>>%n %_NickServ:%_ Deleted %_$0%_ and his nicknames from the NickServ ircnet list.',
|
81
|
+
'nickserv_delled_nick', '%R>>%n %_NickServ:%_ Deleted %_$1%_ from the NickServ list on $0.',
|
82
|
+
'nickserv_nfound', '%R>>%n %_NickServ:%_ The NickServ ircnet %_$0%_ could not be found.',
|
83
|
+
'nickserv_nfound_nick', '%R>>%n %_NickServ:%_ The NickServ nickname %_$0%_ could not be found on $1.',
|
84
|
+
'nickserv_usage', '%R>>%n %_NickServ:%_ Insufficient parameters: Use "%_/NICKSERV help%_" for further instructions.',
|
85
|
+
'nickserv_no_net', '%R>>%n %_NickServ:%_ Unknown Irssi ircnet %_$0%_.',
|
86
|
+
'nickserv_wrong_host', '%R>>%n %_NickServ:%_ Malformed services hostname %_$0%_.',
|
87
|
+
'already_loaded_network', '%R>>%n %_NickServ:%_ The ircnet %_$0%_ already exists in the NickServ ircnet list, please remove it first.',
|
88
|
+
'nickserv_loaded_nick', '%R>>%n %_NickServ:%_ The nickname %_$0%_ already exists in the NickServ authlist on %_$1%_, please remove it first.',
|
89
|
+
'nickserv_not_loaded_net', '%R>>%n %_NickServ:%_ The ircnet %_$0%_ doesn\'t exists in the NickServ ircnet list, please add it first.',
|
90
|
+
'saved_nickname', '%R>>%n %_NickServ:%_ Added nickname %_$1%_ on %_$0%_.',
|
91
|
+
'network_print', '$[!-2]0 $[20]1 $2',
|
92
|
+
'password_request', '%R>>%n %_NickServ:%_ Auth Request from NickServ on %_$0%_.',
|
93
|
+
'password_accepted', '%R>>%n %_NickServ:%_ Password accepted on %_$0%_.',
|
94
|
+
'password_wrong', '%R>>%n %_NickServ:%_ Password denied on %_$0%_. Please change the password.',
|
95
|
+
'network_info', '%_ # Ircnet Services hostname%_',
|
96
|
+
'network_empty', '%R>>%n %_NickServ:%_ Your NickServ ircnet list is empty.',
|
97
|
+
'nickname_print', '$[!-2]0 $[20]1 $[18]2 $3',
|
98
|
+
'nickname_info', '%_ # Ircnet Nickname Password%_',
|
99
|
+
'nickname_empty', '%R>>%n %_NickServ:%_ Your NickServ authlist is empty.',
|
100
|
+
'nickserv_help', '$0',
|
101
|
+
'saved_network', '%R>>%n %_NickServ:%_ Added services mask "%_$1%_" on %_$0%_.',
|
102
|
+
'nickserv_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.'
|
103
|
+
]);
|
104
|
+
|
105
|
+
sub load_nickservnet {
|
106
|
+
|
107
|
+
my ($file) = @_;
|
108
|
+
|
109
|
+
@nickservnet = ();
|
110
|
+
|
111
|
+
if (-e $file) {
|
112
|
+
local *F;
|
113
|
+
open(F, "<$file");
|
114
|
+
local $/ = "\n";
|
115
|
+
|
116
|
+
while (<F>) {
|
117
|
+
chop;
|
118
|
+
my $new_nsnet = new_nickserv_network(split("\t"));
|
119
|
+
|
120
|
+
if (($new_nsnet->{name} ne "") && ($new_nsnet->{host} ne "")) {
|
121
|
+
push(@nickservnet, $new_nsnet);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
close(F);
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
sub save_nickservnet {
|
130
|
+
|
131
|
+
my ($file) = @_;
|
132
|
+
|
133
|
+
return unless scalar @nickservnet; # there's nothing to save
|
134
|
+
|
135
|
+
if (-e $file) {
|
136
|
+
local *F;
|
137
|
+
open(F, ">$file");
|
138
|
+
|
139
|
+
for (my $n = 0; $n < @nickservnet; ++$n) {
|
140
|
+
print(F join("\t", $nickservnet[$n]->{name}, $nickservnet[$n]->{host}) . "\n");
|
141
|
+
}
|
142
|
+
|
143
|
+
close(F);
|
144
|
+
} else {
|
145
|
+
create_network_file($file);
|
146
|
+
save_nickservnet($file);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
sub create_network_file {
|
151
|
+
|
152
|
+
my ($file) = @_;
|
153
|
+
|
154
|
+
open(F, ">$file") or die "Can't create $file. Reason: $!";
|
155
|
+
}
|
156
|
+
|
157
|
+
sub new_nickserv_network {
|
158
|
+
|
159
|
+
my $nsnet = {};
|
160
|
+
|
161
|
+
$nsnet->{name} = shift;
|
162
|
+
$nsnet->{host} = shift;
|
163
|
+
|
164
|
+
return $nsnet;
|
165
|
+
}
|
166
|
+
|
167
|
+
sub load_nickservnick {
|
168
|
+
|
169
|
+
my ($file) = @_;
|
170
|
+
|
171
|
+
@nickservauth = ();
|
172
|
+
|
173
|
+
if (-e $file) {
|
174
|
+
local *F;
|
175
|
+
open(F, "<$file");
|
176
|
+
local $/ = "\n";
|
177
|
+
|
178
|
+
while (<F>) {
|
179
|
+
chop;
|
180
|
+
my $new_nsnick = new_nickserv_nick(split("\t"));
|
181
|
+
|
182
|
+
if (($new_nsnick->{ircnet} ne "") && ($new_nsnick->{nick} ne "") && ($new_nsnick->{pass} ne "")) {
|
183
|
+
push(@nickservauth, $new_nsnick);
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
close(F);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
sub save_nickservnick {
|
192
|
+
|
193
|
+
my ($file) = @_;
|
194
|
+
|
195
|
+
return unless scalar @nickservauth; # there's nothing to save
|
196
|
+
|
197
|
+
if (-e $file) {
|
198
|
+
local *F;
|
199
|
+
open(F, ">$file");
|
200
|
+
|
201
|
+
for (my $n = 0; $n < @nickservauth; ++$n) {
|
202
|
+
print(F join("\t", $nickservauth[$n]->{ircnet}, $nickservauth[$n]->{nick}, $nickservauth[$n]->{pass}) . "\n");
|
203
|
+
}
|
204
|
+
|
205
|
+
close(F);
|
206
|
+
} else {
|
207
|
+
create_nick_file($file);
|
208
|
+
save_nickservnick($file);
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
sub create_nick_file {
|
213
|
+
|
214
|
+
my ($file) = @_;
|
215
|
+
|
216
|
+
my $umask = umask 0077; # save old umask
|
217
|
+
open(F, ">$file") or die "Can't create $file. Reason: $!";
|
218
|
+
umask $umask;
|
219
|
+
}
|
220
|
+
|
221
|
+
sub new_nickserv_nick {
|
222
|
+
|
223
|
+
my $nsnick = {};
|
224
|
+
|
225
|
+
$nsnick->{ircnet} = shift;
|
226
|
+
$nsnick->{nick} = shift;
|
227
|
+
$nsnick->{pass} = shift;
|
228
|
+
|
229
|
+
return $nsnick;
|
230
|
+
}
|
231
|
+
|
232
|
+
sub add_nickname {
|
233
|
+
|
234
|
+
my ($network, $nickname, $password) = split(" ", @_[0], 3);
|
235
|
+
my ($correct_network, $correct_nickname, $correct_password);
|
236
|
+
|
237
|
+
if ($network eq "" || $nickname eq "" || $password eq "") {
|
238
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_nickname');
|
239
|
+
return;
|
240
|
+
}
|
241
|
+
|
242
|
+
if ($network) {
|
243
|
+
if (!already_loaded_net($network)) {
|
244
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_not_loaded_net', $network);
|
245
|
+
return;
|
246
|
+
} else {
|
247
|
+
$correct_network = 1;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
|
251
|
+
if ($nickname) {
|
252
|
+
if (already_loaded_nick($nickname, $network)) {
|
253
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_loaded_nick', $nickname, $network);
|
254
|
+
return;
|
255
|
+
} else {
|
256
|
+
$correct_nickname = 1;
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
if ($correct_network && $correct_nickname) {
|
261
|
+
push(@nickservauth, new_nickserv_nick($network, $nickname, $password));
|
262
|
+
save_nickservnick("$irssidir/$nickservauth_file");
|
263
|
+
|
264
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_nickname', $network, $nickname);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
|
268
|
+
sub add_network {
|
269
|
+
|
270
|
+
my ($network, $hostname) = split(" ", @_[0], 2);
|
271
|
+
my ($correct_net, $correct_host);
|
272
|
+
|
273
|
+
if ($network eq "" || $hostname eq "") {
|
274
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage_network');
|
275
|
+
return;
|
276
|
+
}
|
277
|
+
|
278
|
+
if ($network) {
|
279
|
+
my ($ircnet) = Irssi::chatnet_find($network);
|
280
|
+
|
281
|
+
if (!$ircnet) {
|
282
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_no_net', $network);
|
283
|
+
return;
|
284
|
+
} elsif (already_loaded_net($network)) {
|
285
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'already_loaded_network', $network);
|
286
|
+
return;
|
287
|
+
} else {
|
288
|
+
$correct_net = 1;
|
289
|
+
}
|
290
|
+
}
|
291
|
+
|
292
|
+
if ($hostname) {
|
293
|
+
if ($hostname !~ /^[.+a-zA-Z0-9_-]{1,9}@[.+a-zA-Z0-9_-]{1,}$/) {
|
294
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_wrong_host', $hostname);
|
295
|
+
return;
|
296
|
+
} else {
|
297
|
+
$correct_host = 1;
|
298
|
+
}
|
299
|
+
}
|
300
|
+
|
301
|
+
if ($correct_net && $correct_host) {
|
302
|
+
push(@nickservnet, new_nickserv_network($network, $hostname));
|
303
|
+
save_nickservnet("$irssidir/$nickservnet_file");
|
304
|
+
|
305
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'saved_network', $network, $hostname);
|
306
|
+
}
|
307
|
+
}
|
308
|
+
|
309
|
+
sub already_loaded_net {
|
310
|
+
|
311
|
+
my ($ircnet) = @_;
|
312
|
+
my $loaded = check_loaded_net($ircnet);
|
313
|
+
|
314
|
+
if ($loaded > -1) {
|
315
|
+
return 1;
|
316
|
+
}
|
317
|
+
|
318
|
+
return 0;
|
319
|
+
}
|
320
|
+
|
321
|
+
sub check_loaded_net {
|
322
|
+
|
323
|
+
my ($ircnet) = @_;
|
324
|
+
|
325
|
+
$ircnet = lc($ircnet);
|
326
|
+
|
327
|
+
for (my $loaded = 0; $loaded < @nickservnet; ++$loaded) {
|
328
|
+
return $loaded if (lc($nickservnet[$loaded]->{name}) eq $ircnet);
|
329
|
+
}
|
330
|
+
|
331
|
+
return -1;
|
332
|
+
}
|
333
|
+
|
334
|
+
sub already_loaded_nick {
|
335
|
+
|
336
|
+
my ($nickname, $network) = @_;
|
337
|
+
my $loaded = check_loaded_nick($nickname, $network);
|
338
|
+
|
339
|
+
if ($loaded > -1) {
|
340
|
+
return 1;
|
341
|
+
}
|
342
|
+
|
343
|
+
return 0
|
344
|
+
}
|
345
|
+
|
346
|
+
sub check_loaded_nick {
|
347
|
+
|
348
|
+
my ($nickname, $network) = @_;
|
349
|
+
|
350
|
+
$nickname = lc($nickname);
|
351
|
+
$network = lc($network);
|
352
|
+
|
353
|
+
for (my $loaded = 0; $loaded < @nickservauth; ++$loaded) {
|
354
|
+
return $loaded if (lc($nickservauth[$loaded]->{nick}) eq $nickname && lc ($nickservauth[$loaded]->{ircnet}) eq $network);
|
355
|
+
}
|
356
|
+
|
357
|
+
return -1;
|
358
|
+
}
|
359
|
+
|
360
|
+
sub list_net {
|
361
|
+
|
362
|
+
if (@nickservnet == 0) {
|
363
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'network_empty');
|
364
|
+
} else {
|
365
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'network_info');
|
366
|
+
|
367
|
+
for (my $n = 0; $n < @nickservnet ; ++$n) {
|
368
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'network_print', $n, $nickservnet[$n]->{name}, $nickservnet[$n]->{host});
|
369
|
+
}
|
370
|
+
}
|
371
|
+
}
|
372
|
+
|
373
|
+
sub list_nick {
|
374
|
+
|
375
|
+
if (@nickservauth == 0) {
|
376
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickname_empty');
|
377
|
+
} else {
|
378
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickname_info');
|
379
|
+
|
380
|
+
for (my $n = 0; $n < @nickservauth ; ++$n) {
|
381
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickname_print', $n, $nickservauth[$n]->{ircnet}, $nickservauth[$n]->{nick}, "*" x length($nickservauth[$n]->{pass}));
|
382
|
+
}
|
383
|
+
}
|
384
|
+
}
|
385
|
+
|
386
|
+
sub nickserv_notice {
|
387
|
+
|
388
|
+
my ($server, $data, $nick, $address) = @_;
|
389
|
+
my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;
|
390
|
+
|
391
|
+
if (is_nickserv($server->{tag}, $address)) {
|
392
|
+
if ($text =~ /^If this is your nickname, type \/msg NickServ/ || $text =~ /^This nickname is registered and protected. If it is your/ || $text =~ /This nickname is registered\. Please choose a different nickname,/ || $text =~ /^This nickname is registered. Please choose a different nickname/) {
|
393
|
+
my $password = get_password($server->{tag}, $server->{nick});
|
394
|
+
|
395
|
+
if ($password == -1) {
|
396
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag});
|
397
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_nick', $server->{nick}, $server->{tag});
|
398
|
+
Irssi::signal_stop();
|
399
|
+
return;
|
400
|
+
}
|
401
|
+
|
402
|
+
Irssi::signal_stop();
|
403
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag});
|
404
|
+
$server->command("^MSG NickServ IDENTIFY $password");
|
405
|
+
} elsif ($text =~ /If this is your nickname, type \/NickServ/) {
|
406
|
+
my $password = get_password($server->{tag}, $server->{nick});
|
407
|
+
|
408
|
+
if ($password == -1) {
|
409
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag});
|
410
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_nick', $server->{nick}, $server->{tag});
|
411
|
+
Irssi::signal_stop();
|
412
|
+
return;
|
413
|
+
}
|
414
|
+
|
415
|
+
Irssi::signal_stop();
|
416
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag});
|
417
|
+
$server->command("^QUOTE NickServ :IDENTIFY $password");
|
418
|
+
} elsif ($text =~ /If this is your nickname, type \/msg NS/) {
|
419
|
+
my $password = get_password($server->{tag}, $server->{nick});
|
420
|
+
|
421
|
+
if ($password == -1) {
|
422
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag});
|
423
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_nick', $server->{nick}, $server->{tag});
|
424
|
+
Irssi::signal_stop();
|
425
|
+
return;
|
426
|
+
}
|
427
|
+
|
428
|
+
Irssi::signal_stop();
|
429
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_request', $server->{tag});
|
430
|
+
$server->command("^MSG NS IDENTIFY $password");
|
431
|
+
} elsif ($text =~ /If you do not (.*) within one minute, you will be disconnected/) {
|
432
|
+
Irssi::signal_stop();
|
433
|
+
} elsif ($text =~ /^This nickname is owned by someone else/) {
|
434
|
+
Irssi::signal_stop();
|
435
|
+
} elsif ($text =~ /^nick, type (.*) Otherwise,/) {
|
436
|
+
Irssi::signal_stop();
|
437
|
+
} elsif ($text =~ /^please choose a different nick./) {
|
438
|
+
Irssi::signal_stop();
|
439
|
+
} elsif ($text =~ /^You have already identified/ || $text =~ /^This nick is already identified./) {
|
440
|
+
Irssi::signal_stop();
|
441
|
+
} elsif ($text =~ /^Password accepted - you are now recognized/) {
|
442
|
+
Irssi::signal_stop();
|
443
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_accepted', $server->{tag});
|
444
|
+
} elsif ($text =~ /^Password Incorrect/ || $text =~ /^Password incorrect./) {
|
445
|
+
Irssi::signal_stop();
|
446
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'password_wrong', $server->{tag});
|
447
|
+
}
|
448
|
+
}
|
449
|
+
}
|
450
|
+
|
451
|
+
sub is_nickserv {
|
452
|
+
|
453
|
+
my ($net, $host) = @_;
|
454
|
+
|
455
|
+
for (my $loaded = 0; $loaded < @nickservnet; ++$loaded) {
|
456
|
+
return 1 if (lc($nickservnet[$loaded]->{name}) eq lc($net) && lc($nickservnet[$loaded]->{host}) eq lc($host));
|
457
|
+
}
|
458
|
+
return 0;
|
459
|
+
}
|
460
|
+
|
461
|
+
sub get_password {
|
462
|
+
|
463
|
+
my ($ircnet, $nick) = @_;
|
464
|
+
|
465
|
+
for (my $loaded = 0; $loaded < @nickservauth; ++$loaded) {
|
466
|
+
return $nickservauth[$loaded]->{pass} if (lc($nickservauth[$loaded]->{ircnet}) eq lc($ircnet) && lc($nickservauth[$loaded]->{nick}) eq lc($nick));
|
467
|
+
}
|
468
|
+
|
469
|
+
return -1;
|
470
|
+
}
|
471
|
+
|
472
|
+
sub del_network {
|
473
|
+
|
474
|
+
my ($ircnet) = split(" ", @_[0], 1);
|
475
|
+
my ($ircnetindex);
|
476
|
+
|
477
|
+
if ($ircnet eq "") {
|
478
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delusage');
|
479
|
+
return;
|
480
|
+
}
|
481
|
+
|
482
|
+
for (my $index = 0; $index < @nickservnet; ++$index) {
|
483
|
+
if (lc($nickservnet[$index]->{name}) eq lc($ircnet)) {
|
484
|
+
$ircnetindex = 1;
|
485
|
+
}
|
486
|
+
}
|
487
|
+
|
488
|
+
if ($ircnetindex) {
|
489
|
+
@nickservnet = grep {lc($_->{name}) ne lc($ircnet)} @nickservnet;
|
490
|
+
@nickservauth = grep {lc($_->{ircnet}) ne lc($ircnet)} @nickservauth;
|
491
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delled', $ircnet);
|
492
|
+
save_nickservnet("$irssidir/$nickservnet_file");
|
493
|
+
save_nickservnick("$irssidir/$nickservauth_file");
|
494
|
+
} else {
|
495
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound', $ircnet);
|
496
|
+
}
|
497
|
+
}
|
498
|
+
|
499
|
+
sub del_nickname {
|
500
|
+
|
501
|
+
my ($ircnet, $nickname) = split(" ", @_[0], 2);
|
502
|
+
my ($nickindex);
|
503
|
+
|
504
|
+
if ($ircnet eq "" || $nickname eq "") {
|
505
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delnickusage');
|
506
|
+
return;
|
507
|
+
}
|
508
|
+
|
509
|
+
for (my $index = 0; $index < @nickservauth; ++$index) {
|
510
|
+
if (lc($nickservauth[$index]->{ircnet}) eq lc($ircnet) && lc($nickservauth[$index]->{nick}) eq lc($nickname)) {
|
511
|
+
$nickindex = splice(@nickservauth, $index, 1);
|
512
|
+
}
|
513
|
+
}
|
514
|
+
|
515
|
+
if ($nickindex) {
|
516
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_delled_nick', $ircnet, $nickname);
|
517
|
+
save_nickservnick("$irssidir/$nickservauth_file");
|
518
|
+
} else {
|
519
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_nfound_nick', $ircnet, $nickname);
|
520
|
+
}
|
521
|
+
}
|
522
|
+
|
523
|
+
sub nickserv_runsub {
|
524
|
+
|
525
|
+
my ($data, $server, $item) = @_;
|
526
|
+
$data =~ s/\s+$//g;
|
527
|
+
|
528
|
+
if ($data) {
|
529
|
+
Irssi::command_runsub('nickserv', $data, $server, $item);
|
530
|
+
} else {
|
531
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_usage');
|
532
|
+
}
|
533
|
+
}
|
534
|
+
|
535
|
+
load_nickservnet("$irssidir/$nickservnet_file");
|
536
|
+
load_nickservnick("$irssidir/$nickservauth_file");
|
537
|
+
|
538
|
+
Irssi::command_bind('nickserv', 'nickserv_runsub');
|
539
|
+
Irssi::command_bind('ns', 'nickserv_runsub');
|
540
|
+
|
541
|
+
Irssi::command_bind('nickserv addnet', 'add_network');
|
542
|
+
Irssi::command_bind('ns addnet', 'add_network');
|
543
|
+
|
544
|
+
Irssi::command_bind('nickserv addnick', 'add_nickname');
|
545
|
+
Irssi::command_bind('ns addnick', 'add_nickname');
|
546
|
+
|
547
|
+
Irssi::command_bind('nickserv listnet', 'list_net');
|
548
|
+
Irssi::command_bind('ns listnet', 'list_net');
|
549
|
+
|
550
|
+
Irssi::command_bind('nickserv listnick', 'list_nick');
|
551
|
+
Irssi::command_bind('ns listnick', 'list_nick');
|
552
|
+
|
553
|
+
Irssi::command_bind('nickserv delnet', 'del_network');
|
554
|
+
Irssi::command_bind('ns delnet', 'del_network');
|
555
|
+
|
556
|
+
Irssi::command_bind('nickserv delnick', 'del_nickname');
|
557
|
+
Irssi::command_bind('ns delnick', 'del_nickname');
|
558
|
+
|
559
|
+
Irssi::command_bind('nickserv help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_help', $help) });
|
560
|
+
Irssi::command_bind('ns help' => sub { Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_help', $help) });
|
561
|
+
|
562
|
+
Irssi::signal_add('event notice', 'nickserv_notice');
|
563
|
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'nickserv_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});
|