html/twsocials.pl
1 use vars qw($VERSION %IRSSI);
2 use Irssi;
3 use Irssi::Irc;
4 use DBI;
5
6 $VERSION = '1.02';
7 %IRSSI = (
8 authors => 'John Engelbrecht',
9 contact => 'jengelbr@yahoo.com',
10 name => 'twsocials.pl',
11 description => 'IRC version of Social Commands',
12 license => 'Public Domain',
13 changed => 'Sat Nov 20 18:25:12 CST 2004',
14 url => 'http://irssi.darktalker.net/',
15 );
16
17 my $instrut =
18 ".------------------------------------------------------.\n".
19 "| 1.) shell> mkdir ~/.irssi/scripts |\n".
20 "| 2.) shell> cp twsocials.pl ~/.irssi/scripts/ |\n".
21 "| 3.) shell> mkdir ~/.irssi/scripts/autorun |\n".
22 "| 4.) shell> ln -s ~/.irssi/scripts/twsocials.pl \\ |\n".
23 "| ~/.irssi/scripts/autorun/twsocials.pl |\n".
24 "| 5.) /help (Will list all your socials) |\n".
25 "| /socials (Shows you a list of arguments) |\n".
26 "| /socials list (Shows a list of socials) |\n".
27 "| /socials <social>(Contents of the Social command)|\n".
28 "| 6.) /toggle twsocials_instruct and last /save |\n".
29 "|------------------------------------------------------|\n".
30 "| Options: Default: |\n".
31 "| /toggle twsocials_remote OFF |\n".
32 "| /toggle twtopic_instruct |Startup instructions |\n".
33 "|------------------------------------------------------|\n".
34 "| Note: |\n".
35 "| If twsocials_remote is ON, that will enable public |\n".
36 "| and private social commands to work, such as the |\n".
37 "| the following. |\n".
38 "| |\n".
39 "| < TechWizard> !social |\n".
40 "| < TechWizard> !social list |\n".
41 "| < TechWizard> !social blist |\n".
42 "| < TechWizard> !hug |\n".
43 "| < TechWizard> !hug JohnDoe |\n".
44 "| < TechWizard> !hug JohnDoe 1 |\n".
45 "\`------------------------------------------------------'";
46
47
48 my $maxsize=62;
49 my $lastcmd="";
50 my $home_chan="";
51 my $path = "~/.irssi/socials";
52 my @colname = ("Dark Black","Dark Red","Dark Green","Dark Yellow","Dark Blue","Dark Magenta","Dark Cyan","Dark White","Bold Black","Bold Red","Bold Green","Bold Yellow","Bold Blue","Bold Magenta","Bold Cyan","Bold White","Reset","O");
53 my @mirc_color_name = ("~R0","~R1","~R2","~R3","~R4","~R5","~R6","~R7","~B0","~B1","~B2","~B3","~B4","~B5","~B6","~B7","~RS");
54 my @mirc_color_arr = ("\0031","\0035","\0033","\0037","\0032","\0036","\00310","\0030","\00314","\0034","\0039","\0038","\00312","\00313","\00311","\00315","\017");
55 my ($r0,$r1,$r2,$r3,$r4,$r5,$r6,$r7,$b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$rs) = @mirc_color_arr;
56 $path =~ s/^~\//$ENV{'HOME'}\//;
57 my $bc=$r4;
58 my $bt=$r2;
59 my $m1=$r1;
60 my $m2=$b1;
61
62 ################ Checking Social's home Directory #############
63 init_socpath();
64 ###############################################################
65
66 sub message_public {
67 my($server, $data, $nick, $address, $target) = @_;
68 if(!Irssi::settings_get_bool('twsocials_remote')) { return; }
69 $home_chan=$target;
70 $data =~ s/\r//;
71 @data_arr = split " ", $data;
72 if(@data_arr[0] eq "!social") {
73 if(!$#data_arr) {
74 syntax($server,$target);
75 return;
76 }
77 if(@data_arr[1] eq "color") {
78 colorlist($server,$target);
79 return;
80 }
81 if(@data_arr[1] eq "list") {
82 soclist($server,$target);
83 return;
84 }
85 if(@data_arr[1] eq "blist") {
86 socblist($server,$target);
87 return;
88 }
89 if(@data_arr[1] eq "add") {
90 if($#data_arr == 1) {
91 $server->command("msg $target $r3(USAGE) $rs!social$b4 add$rs <social>$r3 :$rs$r2 Adds a new Social.");
92 return;
93 }
94 $socname = @data_arr[2];
95 addsoc($server,$target,$socname);
96 return;
97 }
98 if(@data_arr[1] eq "del") {
99 if($#data_arr == 1) {
100 $server->command("msg $target $r3(USAGE) $rs!social$b4 dels$rs <social> $r3:$r2 Deletes a Social.");
101 return;
102 }
103 $socname = @data_arr[2];
104 delsoc($server,$target,$socname);
105 return;
106 }
107 if(@data_arr[1] eq "set") {
108 if($#data_arr <= 3) {
109 set_syntax($server, $target, $socname);
110 return;
111 }
112 $socname = @data_arr[2];
113 $set = @data_arr[3];
114 $cutstr = "@data_arr[0] @data_arr[1] @data_arr[2] @data_arr[3] ";
115 $data =~ s/$cutstr//;
116 setsoc($server,$target,$socname,$set,$data);
117 return;
118 }
119 $socname = @data_arr[1];
120 print_social($server, $target, $socname);
121 return;
122 }
123 if(@data_arr[0] eq "!soclist") {
124 soclist($server,$target);
125 return;
126 }
127 $chr="!";
128 $socname = @data_arr[0];
129 @socname_arr = split //, $socname;
130 if(@socname_arr[0] ne $chr) { return; }
131 $socname =~ s/$chr//;
132 if(!ifexist_social($socname)) { return; }
133 if($#data_arr == 0) {
134 $nick2 = "UNSET";
135 $msgsw=0;
136 }
137 if($#data_arr == 1) {
138 $nick2 = @data_arr[1];
139 $msgsw=0;
140 }
141 if($#data_arr == 2) {
142 $nick2 = @data_arr[1];
143 $msgsw=1;
144 }
145 $chan = Irssi::Irc::Server->channel_find($home_chan);
146 $nick_obj = $chan->nick_find($nick2);
147 if($nick_obj->{nick} eq "" && $nick2 ne "UNSET") {
148 $server->command("msg $target nickname does not exist.");
149 return;
150 }
151 do_social($server,$target,$socname,$nick,$nick2,$msgsw);
152 }
153
154 sub message_private {
155 my($server, $data, $nick, $address) = @_;
156 if(!Irssi::settings_get_bool('twsocials_remote')) { return; }
157 $target=$nick;
158 $home_chan=$target;
159 $data =~ s/\r//;
160 @data_arr = split " ", $data;
161 if(@data_arr[0] eq "!social") {
162 if(!$#data_arr) {
163 syntax($server,$target);
164 return;
165 }
166 if(@data_arr[1] eq "color") {
167 colorlist($server,$target);
168 return;
169 }
170 if(@data_arr[1] eq "list") {
171 soclist($server,$target);
172 return;
173 }
174 if(@data_arr[1] eq "blist") {
175 socblist($server,$target);
176 return;
177 }
178 if(@data_arr[1] eq "add") {
179 if($#data_arr == 1) {
180 $server->command("msg $target $r3(USAGE) $rs!social$b4 add$rs <social>$r3 :$rs$r2 Adds a new Social.");
181 return;
182 }
183 $socname = @data_arr[2];
184 addsoc($server,$target,$socname);
185 return;
186 }
187 if(@data_arr[1] eq "del") {
188 if($#data_arr == 1) {
189 $server->command("msg $target $r3(USAGE) $rs!social$b4 dels$rs <social> $r3:$r2 Deletes a Social.");
190 return;
191 }
192 $socname = @data_arr[2];
193 delsoc($server,$target,$socname);
194 return;
195 }
196 if(@data_arr[1] eq "set") {
197 if($#data_arr <= 3) {
198 set_syntax($server, $target, $socname);
199 return;
200 }
201 $socname = @data_arr[2];
202 $set = @data_arr[3];
203 $cutstr = "@data_arr[0] @data_arr[1] @data_arr[2] @data_arr[3] ";
204 $data =~ s/$cutstr//;
205 setsoc($server,$target,$socname,$set,$data);
206 return;
207 }
208 $socname = @data_arr[1];
209 print_social($server, $target, $socname);
210 return;
211 }
212 if(@data_arr[0] eq "!soclist") {
213 soclist($server,$target);
214 return;
215 }
216 $chr="!";
217 $socname = @data_arr[0];
218 @socname_arr = split //, $socname;
219 if(@socname_arr[0] ne $chr) { return; }
220 $socname =~ s/$chr//;
221 if(!ifexist_social($socname)) { return; }
222 if($#data_arr == 0) {
223 $nick2 = "UNSET";
224 $msgsw=0;
225 }
226 if($#data_arr == 1) {
227 $nick2 = @data_arr[1];
228 $msgsw=0;
229 }
230 if($#data_arr == 2) {
231 $nick2 = @data_arr[1];
232 $msgsw=1;
233 }
234 $nick1 = $nick;
235 do_social($server,$target,$socname,$nick1,$nick2,$msgsw);
236 }
237
238 sub on_public {
239 my($server, $data, $nick, $address, $target) = @_;
240 if(!Irssi::settings_get_bool('twsocials_remote')) { return; }
241 if($data !~ /^!/) { return; }
242 $home_chan=$nick;
243 $target=Irssi::active_win()->{active}->{name};
244 $home_chan=$target;
245 $data =~ s/\r//;
246 @data_arr = split " ", $data;
247 if(@data_arr[0] eq "!social") {
248 if(!$#data_arr) {
249 syntax($server,$target);
250 return;
251 }
252 if(@data_arr[1] eq "color") {
253 colorlist($server,$target);
254 return;
255 }
256 if(@data_arr[1] eq "list") {
257 soclist($server,$target);
258 return;
259 }
260 if(@data_arr[1] eq "blist") {
261 socblist($server,$target);
262 return;
263 }
264 if(@data_arr[1] eq "add") {
265 if($#data_arr == 1) {
266 $server->command("msg $target $r3(USAGE) $rs!social$b4 add$rs <social>$r3 :$rs$r2 Adds a new Social.");
267 return;
268 }
269 $socname = @data_arr[2];
270 addsoc($server,$target,$socname);
271 return;
272 }
273 if(@data_arr[1] eq "del") {
274 if($#data_arr == 1) {
275 $server->command("msg $target $r3(USAGE) $rs!social$b4 dels$rs <social> $r3:$r2 Deletes a Social.");
276 return;
277 }
278 $socname = @data_arr[2];
279 delsoc($server,$target,$socname);
280 return;
281 }
282 if(@data_arr[1] eq "set") {
283 if($#data_arr <= 3) {
284 set_syntax($server, $target, $socname);
285 return;
286 }
287 $socname = @data_arr[2];
288 $set = @data_arr[3];
289 $cutstr = "@data_arr[0] @data_arr[1] @data_arr[2] @data_arr[3] ";
290 $data =~ s/$cutstr//;
291 setsoc($server,$target,$socname,$set,$data);
292 return;
293 }
294 $socname = @data_arr[1];
295 print_social($server, $target, $socname);
296 return;
297 }
298 if(@data_arr[0] eq "!soclist") {
299 soclist($server,$target);
300 return;
301 }
302 $chr="!";
303 $socname = @data_arr[0];
304 @socname_arr = split //, $socname;
305 if(@socname_arr[0] ne $chr) { return; }
306 $socname =~ s/$chr//;
307 if(!ifexist_social($socname)) {
308 return;
309 }
310 if($#data_arr == 0) {
311 $nick2 = "UNSET";
312 $msgsw=0;
313 }
314 if($#data_arr == 1) {
315 $nick2 = @data_arr[1];
316 $msgsw=0;
317 }
318 if($#data_arr == 2) {
319 $nick2 = @data_arr[1];
320 $msgsw=1;
321 }
322 $nick1 = $server->{nick};
323 $chan = Irssi::Irc::Server->channel_find($home_chan);
324 $nick_obj = $chan->nick_find($nick2);
325 if($nick_obj->{nick} eq "" && $nick2 ne "UNSET") {
326 $server->command("msg $target nickname does not exist.");
327 return;
328 }
329 do_social($server,$target,$socname,$nick1,$nick2,$msgsw);
330 }
331
332 sub on_private {
333 my($server, $data, $nick, $address, $target) = @_;
334 if(!Irssi::settings_get_bool('twsocials_remote')) { return; }
335 if($data !~ /^!/) { return; }
336 $home_chan=$nick;
337 $target=$nick;
338 $data =~ s/\r//;
339 @data_arr = split " ", $data;
340 if(@data_arr[0] eq "!social") {
341 if(!$#data_arr) {
342 syntax($server,$target);
343 return;
344 }
345 if(@data_arr[1] eq "color") {
346 colorlist($server,$target);
347 return;
348 }
349 if(@data_arr[1] eq "list") {
350 soclist($server,$target);
351 return;
352 }
353 if(@data_arr[1] eq "blist") {
354 socblist($server,$target);
355 return;
356 }
357 if(@data_arr[1] eq "add") {
358 if($#data_arr == 1) {
359 $server->command("msg $target $r3(USAGE) $rs!social$b4 add$rs <social>$r3 :$rs$r2 Adds a new Social.");
360 return;
361 }
362 $socname = @data_arr[2];
363 addsoc($server,$target,$socname);
364 return;
365 }
366 if(@data_arr[1] eq "del") {
367 if($#data_arr == 1) {
368 $server->command("msg $target $r3(USAGE) $rs!social$b4 dels$rs <social> $r3:$r2 Deletes a Social.");
369 return;
370 }
371 $socname = @data_arr[2];
372 delsoc($server,$target,$socname);
373 return;
374 }
375 if(@data_arr[1] eq "set") {
376 if($#data_arr <= 3) {
377 set_syntax($server, $target, $socname);
378 return;
379 }
380 $socname = @data_arr[2];
381 $set = @data_arr[3];
382 $cutstr = "@data_arr[0] @data_arr[1] @data_arr[2] @data_arr[3] ";
383 $data =~ s/$cutstr//;
384 setsoc($server,$target,$socname,$set,$data);
385 return;
386 }
387 $socname = @data_arr[1];
388 print_social($server, $target, $socname);
389 return;
390 }
391 if(@data_arr[0] eq "!soclist") {
392 soclist($server,$target);
393 return;
394 }
395 $chr="!";
396 $socname = @data_arr[0];
397 @socname_arr = split //, $socname;
398 if(@socname_arr[0] ne $chr) { return; }
399 $socname =~ s/$chr//;
400 if(!ifexist_social($socname)) {
401 return;
402 }
403 if($#data_arr == 0) {
404 $nick2 = "UNSET";
405 $msgsw=0;
406 }
407 if($#data_arr == 1) {
408 $nick2 = @data_arr[1];
409 $msgsw=0;
410 }
411 if($#data_arr == 2) {
412 $nick2 = @data_arr[1];
413 $msgsw=1;
414 }
415 $nick1 = $server->{nick};
416 $target = $nick;
417 do_social($server,$target,$socname,$nick1,$nick2,$msgsw);
418 }
419
420 sub addsoc {
421 my ($server,$target,$socname) = @_;
422 if(ifexist_social($socname)) {
423 $server->command("msg $target $r3social: $rs$socname already exist.");
424 return;
425 }
426 #write_social($socname,$fpriv,$fself,$fnobody,$fpublic,$fyou,$fthem)
427 write_social($socname,"0","UNSET","UNSET","UNSET","UNSET","UNSET");
428 irssicmd_socials();
429 $server->command("msg $target $r2 done.");
430 return;
431 }
432
433 sub irssi_addsoc {
434 my ($data, $server, $witem) = @_;
435 @data_arr = split / /, $data;
436 if(@data_arr[0] eq "") {
437 irssi_syntax();
438 return;
439 }
440 $socname = @data_arr[0];
441 if(ifexist_social($socname)) {
442 print "$rs$socname already exist.";
443 return;
444 }
445 write_social($socname,"0","UNSET","UNSET","UNSET","UNSET","UNSET");
446 irssicmd_socials();
447 print "$r2 done.";
448 return;
449 }
450
451 sub delsoc {
452 my ($server,$target,$socname) = @_;
453 if(!ifexist_social($socname)) {
454 $server->command("msg $target $r3 DELETE $socname: $rs$socname social does not exist.");
455 return;
456 }
457 $filename ="$path/$socname.txt";
458 unlink($filename);
459 irssicmd_socials();
460 $server->command("msg $target $r2 done.");
461 return;
462 }
463
464 sub irssi_delsoc {
465 my ($data, $server, $witem) = @_;
466 @data_arr = split / /, $data;
467 if(@data_arr[0] eq "") {
468 irssi_syntax();
469 return;
470 }
471 $socname = @data_arr[0];
472 if(!ifexist_social($socname)) {
473 print "$r3 DELETE $socname: $rs$socname social does not exist.";
474 return;
475 }
476 $filename ="$path/$socname.txt";
477 unlink($filename);
478 irssicmd_socials();
479 print "$r2 done.";
480 return;
481 }
482
483 sub setsoc {
484 my ($server,$target,$socname,$set,$data) = @_;
485 my @sets = ("priv","nobody","public","self","them","you");
486 if(!ifexist_social($socname)) {
487 $server->command("msg $target $r3 SET $social: $rs$socname does not exist.");
488 return;
489 }
490 $set = "\L$set";
491 $found=0;
492 foreach(@sets) { if($set eq $_) { $found=1; } }
493 if(!$found) {
494 $server->command("msg $target $r3 social:$rs invalid field name.");
495 return;
496 }
497 $filename = "$path/$socname.txt";
498 $cx=0;
499 open(FILE,"<$filename") or do {
500 print "File ".$filename." Not found.";
501 return;
502 };
503 while (<FILE>) {
504 chomp;
505 $fpriv = $_ if($cx == 0);
506 $fnobody = $_ if($cx == 1);
507 $fpublic = $_ if($cx == 2);
508 $fself = $_ if($cx == 3);
509 $fthem = $_ if($cx == 4);
510 $fyou = $_ if($cx == 5);
511 $cx++;
512 }
513 close FILE;
514 $fpriv = $data if($set eq "priv");
515 $fnobody = $data if($set eq "nobody");
516 $fpublic = $data if($set eq "public");
517 $fself = $data if($set eq "self");
518 $fthem = $data if($set eq "them");
519 $fyou = $data if($set eq "you");
520 write_social($socname,$fpriv,$fself,$fnobody,$fpublic,$fyou,$fthem);
521 $server->command("msg $target $r2 done.");
522 irssicmd_socials();
523 return;
524 }
525
526 sub irssi_setsoc {
527 my ($data, $server, $witem) = @_;
528 @data_arr = split / /, $data;
529 if($#data_arr <=1) {
530 irssi_set_syntax();
531 return;
532 }
533 $cutstr = "/";
534 $socname = @data_arr[0];
535 $set = @data_arr[1];
536 $cutstr = "$socname $set ";
537 $data =~ s/$cutstr//g;
538 my @sets = ("priv","nobody","public","self","them","you");
539 if(!ifexist_social($socname)) {
540 print "$r3 SET $social: $rs$socname does not exist.";
541 return;
542 }
543 $set = "\L$set";
544 $found=0;
545 foreach(@sets) { if($set eq $_) { $found=1; } }
546 if(!$found) {
547 print "$r3 social:$rs invalid field name.";
548 return;
549 }
550 $filename = "$path/$socname.txt";
551 $cx=0;
552 open(FILE,"<$filename") or do {
553 print "File ".$filename." Not found.";
554 return;
555 };
556 while (<FILE>) {
557 chomp;
558 $fpriv = $_ if($cx == 0);
559 $fnobody = $_ if($cx == 1);
560 $fpublic = $_ if($cx == 2);
561 $fself = $_ if($cx == 3);
562 $fthem = $_ if($cx == 4);
563 $fyou = $_ if($cx == 5);
564 $cx++;
565 }
566 close FILE;
567 $fpriv = $data if($set eq "priv");
568 $fnobody = $data if($set eq "nobody");
569 $fpublic = $data if($set eq "public");
570 $fself = $data if($set eq "self");
571 $fthem = $data if($set eq "them");
572 $fyou = $data if($set eq "you");
573 write_social($socname,$fpriv,$fself,$fnobody,$fpublic,$fyou,$fthem);
574 print "$r2 done.";
575 irssicmd_socials();
576 return;
577 }
578
579 sub syntax {
580 my ($server,$target) = @_;
581 $server->command("msg $target $r3(USAGE) $rs!social $r3 :$r2 Prints this screen.");
582 $server->command("msg $target !social <social> $r3 :$r2 Displays the social msgs");
583 $server->command("msg $target !social$b4 add $rs<social>$r3 :$r2 Adds a new Social.");
584 $server->command("msg $target !social$b4 del $rs<social>$r3 :$r2 Dels a Social.");
585 $server->command("msg $target !social$b4 set $rs<social>$r3 :$r2 Sets The social msg per line.");
586 $server->command("msg $target !social$b4 list $r3 :$r2 A list of socials.");
587 $server->command("msg $target !social$b4 blist $r3 :$r2 A list of socials in a box.");
588 $server->command("msg $target !social$b4 color $r3 :$r2 A list of color codes.");
589 $server->command("msg $target !soclist $r3 :$r2 Prints a list of socials.");
590 $server->command("msg $target !<social> $r3 :$r2 does the Social.");
591 }
592
593 sub irssi_syntax {
594 my ($server,$target) = @_;
595 print "$r3(USAGE) $rs!social $r3 :$r2 Prints this screen.";
596 print " !social <social> $r3 :$r2 Displays the social msgs";
597 print " !social$b4 add $rs<social>$r3 :$r2 Adds a new Social.";
598 print " !social$b4 del $rs<social>$r3 :$r2 Dels a Social.";
599 print " !social$b4 set $rs<social>$r3 :$r2 Sets The social msg per line.";
600 print " !social$b4 list $r3 :$r2 A list of socials.";
601 print " !social$b4 blist $r3 :$r2 A list of socials in a box.";
602 print " !social$b4 color $r3 :$r2 A list of color codes.";
603 print " !soclist $r3 :$r2 Prints a list of socials.";
604 print " !<social> $r3 :$r2 does the Social.";
605 }
606
607 sub colorlist {
608 my ($server,$target) = @_;
609 my $title = "$bc($bt Color List $bc)";
610 my $spc = ' 'x50;
611 my $text = "";
612 my $tmp = "";
613 $cx=0;
614 $bar = "------------------------------------------------------------------";
615 $bar = ".".substr($bar,0,int(($maxsize-13)/2)).$title.substr($bar,0,int(($maxsize-13)/2)).".";
616 $server->command("msg $target $bc$bar$rs");
617
618 foreach (@colname) {
619 $col = substr("@mirc_color_name[$cx] = @colname[$cx]$spc",0,20);
620 $tmp = $text.$col;
621 if(strsize($tmp) >= $maxsize) {
622 $text.=' 'x50;
623 $blah =~ s/\003//;
624 $blah = @mirc_color_arr[$cx];
625 $text = substr(" $text",0,$maxsize);
626 $text = "$bc|$rs$text$bc|$rs";
627 $server->command("msg $target $text");
628 $text="";
629 }
630 $text=$text.$col;
631 $cx++;
632 }
633 $bar = "-------------------------------------------------------------------------------------------";
634 $bar = "`".substr($bar,0,$maxsize)."\'";
635 $server->command("msg $target $bc$bar$rs");
636 return;
637 }
638
639 sub irssi_colorlist {
640 my ($server,$target) = @_;
641 $spc = ' 'x50;
642 my $title = "$bc($bt Color List $bc)";
643 $bar = "------------------------------------------------------------------";
644 $bar = ".".substr($bar,0,int(($maxsize-13)/2)).$title.substr($bar,0,int(($maxsize-13)/2)).".";
645 print "$bc$bar$rs";
646 foreach (@colname) {
647 $col = substr("@mirc_color_name[$cx] = @colname[$cx]$spc",0,20);
648 $tmp = $text.$col;
649 if(strsize($tmp) >= $maxsize) {
650 $text.=' 'x50;
651 $blah =~ s/\003//;
652 $blah = @mirc_color_arr[$cx];
653 $text = substr(" $text",0,$maxsize);
654 $text = "$bc|$rs$text$bc|$rs";
655 print $text;
656 $text="";
657 }
658 $text=$text.$col;
659 $cx++;
660 }
661 $bar = "-------------------------------------------------------------------------------------------";
662 $bar = "`".substr($bar,0,$maxsize)."\'";
663 print "$bc$bar$rs";
664 return;
665 }
666
667 sub set_syntax {
668 my ($server,$target) = @_;
669 $server->command("msg $target $r3(USAGE) $rs!social$b4 set$rs <social>$b4 nobody $rs<msg>: Sets the message when no nickname is set.");
670 $server->command("msg $target !social$b4 set $rs<social>$b4 public $rs<msg> : Sets the message for the channel");
671 $server->command("msg $target !social$b4 set $rs<social>$b4 self $rs<msg> : Sets the message when you social yourself.");
672 $server->command("msg $target !social$b4 set $rs<social>$b4 you $rs<msg> : Sets message that will be messaged to you.");
673 $server->command("msg $target !social$b4 set $rs<social>$b4 them $rs<msg> : Sets The social message that will be sent to them.");
674 return;
675 }
676
677 sub irssi_set_syntax {
678 my ($server,$target) = @_;
679 print "$r3(USAGE)";
680 print "!social$b4 set$rs <social>$b4 nobody $rs<msg>: Sets the message when no nickname is set.";
681 print "!social$b4 set $rs<social>$b4 public $rs<msg>: Sets the message for the channel";
682 print "!social$b4 set $rs<social>$b4 self $rs<msg>: Sets the message when you social yourself.";
683 print "!social$b4 set $rs<social>$b4 you $rs<msg>: Sets message that will be messaged to you.";
684 print "!social$b4 set $rs<social>$b4 them $rs<msg>: Sets The social message that will be sent to them.";
685 return;
686 }
687
688 sub soclist{
689 my ($server,$target) = @_;
690 my $text="";
691 my $cutstr=".txt";
692 my @array;
693 opendir(DIR,$path) or return 0;
694 while (defined(my $file = readdir(DIR))) {
695 if($file =~ m".txt") {
696 $tmp=$file;
697 $tmp =~ s/$cutstr//;
698 push(@array,$tmp);
699 }
700 }
701 closedir(DIR);
702 @array = sort(@array);
703 foreach(@array) { $text.=" $_"; }
704 $server->command("msg $target $text");
705 return;
706 }
707
708 sub socblist {
709 my ($server,$target) = @_;
710 my @array;
711 my $text="";
712 opendir(DIR,$path) or return 0;
713 my $title = "$bc($bt Social List $bc)";
714 $bar = "------------------------------------------------------------------";
715 $bar = ".".substr($bar,0,int(($maxsize-15)/2)).$title.substr($bar,0,int(($maxsize-15)/2)+1).".";
716 $server->command("msg $target $bc$bar$rs");
717 $spc = " ";
718 $cutstr=".txt";
719 opendir(DIR,$path) or return 0;
720 while (defined(my $file = readdir(DIR))) {
721 if($file =~ m".txt") {
722 $tmp=$file;
723 $tmp =~ s/$cutstr//;
724 push(@array,$tmp);
725 }
726 }
727 closedir(DIR);
728 @array = sort(@array);
729 foreach(@array) {
730 $socname=$_;
731 $socname =~ s/$cutstr//;
732 if(!get_social_str($socname,"priv")) {
733 $name = substr(" $socname$spc",0,10);
734 }
735 else {
736 $name = substr("*$socname$spc",0,10);
737 }
738 my $tmp = $text.$name;
739 if(strsize($tmp) >= $maxsize) {
740 $text.=" ";
741 $text = substr(" $text",0,($maxsize));
742 $text = "$bc|$rs$text$bc|$rs";
743 $server->command("msg $target $text");
744 $text="";
745 }
746 $text=$text.$name;
747 }
748 $text.=" ";
749 $text = substr(" $text",0,($maxsize));
750 $text = "$bc|$rs$text$bc|$rs";
751 $server->command("msg $target $text");
752 $bar = "-------------------------------------------------------------------------------------------";
753 $bar = "`".substr($bar,0,$maxsize)."\'";
754 $server->command("msg $target $bc$bar$rs");
755 return;
756 }
757
758 sub irssi_socblist {
759 my ($data, $server, $witem) = @_;
760 my @array;
761 my $text="";
762 opendir(DIR,$path) or return 0;
763 my $title = "$bc($bt Social List $bc)";
764 $bar = "------------------------------------------------------------------";
765 $bar = ".".substr($bar,0,int(($maxsize-15)/2)).$title.substr($bar,0,int(($maxsize-15)/2)+1).".";
766 print "$bc$bar$rs";
767 $spc = " ";
768 $cutstr=".txt";
769 opendir(DIR,$path) or return 0;
770 while (defined(my $file = readdir(DIR))) {
771 if($file =~ m".txt") {
772 $tmp=$file;
773 $tmp =~ s/$cutstr//;
774 push(@array,$tmp);
775 }
776 }
777 closedir(DIR);
778 @array = sort(@array);
779 foreach(@array) {
780 $socname=$_;
781 $socname =~ s/$cutstr//;
782 if(!get_social_str($socname,"priv")) {
783 $name = substr(" $socname$spc",0,10);
784 }
785 else {
786 $name = substr("*$socname$spc",0,10);
787 }
788 my $tmp = $text.$name;
789 if(strsize($tmp) >= $maxsize) {
790 $text.=" ";
791 $text = substr(" $text",0,($maxsize));
792 $text = "$bc|$rs$text$bc|$rs";
793 print "$text";
794 $text="";
795 }
796 $text=$text.$name;
797 }
798 $text.=" ";
799 $text = substr(" $text",0,($maxsize));
800 $text = "$bc|$rs$text$bc|$rs";
801 print "$text";
802 $bar = "-------------------------------------------------------------------------------------------";
803 $bar = "`".substr($bar,0,$maxsize)."\'";
804 print "$bc$bar$rs";
805 return;
806 }
807
808 sub do_social {
809 my ($server,$target,$socname,$name1,$name2,$msgsw) = @_;
810 if($name1 eq $name2) {
811 $text = get_social_str($socname,"self");
812 $text= social_parse($name1,$name2,$text);
813 $server->command("msg $target $text");
814 return;
815 }
816 if($name2 eq "UNSET") {
817 $text = get_social_str($socname,"nobody");
818 $text= social_parse($name1,$name2,$text);
819 $server->command("msg $target $text");
820 return;
821 }
822 if(get_social_str("priv")) {
823 $text = get_social_str($socname,"public");
824 $text= social_parse($name1,$name2,$text);
825 $server->command("msg $target $text");
826 if($msgsw) {
827 $text = get_social_str($socname,"you");
828 $text= social_parse($name1,$name2,$text);
829 $server->command("msg $name1 $text");
830 $text = get_social_str($socname,"them");
831 $text= social_parse($name1,$name2,$text);
832 $server->command("msg $name2 $text");
833 }
834 }
835 else {
836 $text = get_social_str($socname,"you");
837 $text= social_parse($name1,$name2,$text);
838 $server->command("msg $name1 $text");
839 $text = get_social_str($socname,"them");
840 $text= social_parse($name1,$name2,$text);
841 $server->command("msg $name2 $text");
842 }
843 return;
844 }
845
846 sub print_social {
847 my ($server,$target,$socname) = @_;
848 my $text="";
849 $filename = "$path/$socname.txt";
850 $cx=0;
851 open(FILE,"<$filename") or do {
852 $server->command("msg $target $socname does not exist.");
853 return;
854 };
855 while (<FILE>) {
856 chomp;
857 $fpriv = $_ if($cx == 0);
858 $fnobody = $_ if($cx == 1);
859 $fpublic = $_ if($cx == 2);
860 $fself = $_ if($cx == 3);
861 $fthem = $_ if($cx == 4);
862 $fyou = $_ if($cx == 5);
863 $cx++;
864 }
865 close FILE;
866 $server->command("msg $target $r3 Name:$r2 $socname");
867 $server->command("msg $target $r3 Private:$r2 $fpriv");
868 $server->command("msg $target $r3 Nobody:$r2 ".colsocial($fnobody));
869 $server->command("msg $target $r3 Public:$r2 ".colsocial($fpublic));
870 $server->command("msg $target $r3 Self:$r2 ".colsocial($fself));
871 $server->command("msg $target $r3 Them:$r2 ".colsocial($fthem));
872 $server->command("msg $target $r3 You:$r2 ".colsocial($fyou));
873 return;
874 }
875
876 sub irssi_print_social {
877 my ($data, $server, $witem) = @_;
878 @data_arr = split / /, $data;
879 $cutstr = "/";
880 if (@data_arr[0] =~ m/^[(set)|(blist)|(add)|(list)|(del)|(color)]/i && !ifexist_social(@data_arr[0])) {
881 Irssi::command_runsub ('social', $data, $server, $item);
882 return;
883 }
884 $socname = @data_arr[0];
885 my $text="";
886 $filename = "$path/$socname.txt";
887 $cx=0;
888 open(FILE,"<$filename") or do {
889 print "$socname does not exist.";
890 return;
891 };
892 while (<FILE>) {
893 chomp;
894 $fpriv = $_ if($cx == 0);
895 $fnobody = $_ if($cx == 1);
896 $fpublic = $_ if($cx == 2);
897 $fself = $_ if($cx == 3);
898 $fthem = $_ if($cx == 4);
899 $fyou = $_ if($cx == 5);
900 $cx++;
901 }
902 close FILE;
903 print"$r3 Name:$r2 $socname";
904 print"$r3 Private:$r2 $fpriv";
905 print"$r3 Nobody:$r2 ".colsocial($fnobody);
906 print"$r3 Public:$r2 ".colsocial($fpublic);
907 print"$r3 Self:$r2 ".colsocial($fself);
908 print"$r3 Them:$r2 ".colsocial($fthem);
909 print"$r3 You:$r2 ".colsocial($fyou);
910 return;
911 }
912
913 sub colsocial {
914 my ($str) = @_;
915 my $name1 = "$r2 name1$rs";
916 my $name2 = "$r2 name2$rs";
917 return $str;
918 }
919
920 sub color_parse {
921 my ($str) = @_;
922 my $cx=0;
923 foreach(@mirc_color_name) {
924 $old = @mirc_color_name[$cx];
925 $new = @mirc_color_arr[$cx];
926 $str =~ s/$old/$new/g;
927 $cx++;
928 }
929 return $str;
930 }
931
932 sub social_parse {
933 my ($name1,$name2,$str) = @_;
934 $name1 = "$r2$name1$rs";
935 $name2 = "$r2$name2$rs";
936 $str =~ s/name1/$name1/g;
937 $str =~ s/name2/$name2/g;
938 return $str;
939 }
940
941 sub get_social_str {
942 my ($social,$colum) = @_;
943 $filename = "$path/$social.txt";
944 $cx=0;
945 open(FILE,"<$filename");
946 while (<FILE>) {
947 chomp;
948 $fpriv = color_parse($_) if($cx == 0);
949 $fnobody = color_parse($_) if($cx == 1);
950 $fpublic = color_parse($_) if($cx == 2);
951 $fself = color_parse($_) if($cx == 3);
952 $fthem = color_parse($_) if($cx == 4);
953 $fyou = color_parse($_) if($cx == 5);
954 $cx++;
955 }
956 close FILE;
957 return $fpriv if($colum eq "priv");
958 return $fself if($colum eq "self");
959 return $fnobody if($colum eq "nobody");
960 return $fpublic if($colum eq "public");
961 return $fyou if($colum eq "you");
962 return $fthem if($colum eq "them");
963 return "UNSET";
964 }
965
966 sub ifexist_social {
967 my ($social) = @_;
968 my $cutstr= ".txt";
969 $filename = "$path/$socname.txt";
970 opendir(DIR,$path) or return 0;
971 while (defined(my $file = readdir(DIR))) {
972 if($file =~ m".txt") {
973 $tmp=$file;
974 $tmp =~ s/$cutstr//;
975 return 1 if($social eq $tmp);
976 }
977 }
978 return 0;
979 }
980
981 sub strsize {
982 my ($word) = @_;
983 @word_arr = split //, $word;
984 return $#word_arr+1;
985 }
986
987 sub write_social {
988 my ($socname,$fpriv,$fself,$fnobody,$fpublic,$fyou,$fthem) = @_;
989 $filename = "$path/$socname.txt";
990 open(FILE,">$filename");
991 print FILE "$fpriv\n";
992 print FILE "$fnobody\n";
993 print FILE "$fpublic\n";
994 print FILE "$fself\n";
995 print FILE "$fthem\n";
996 print FILE "$fyou\n";
997 close FILE;
998 return;
999 }
1000
1001 sub irssicmd_reset {
1002 for my $cmd (Irssi::commands()) {
1003 if($cmd->{category} eq "Social Commands") {
1004 $tmp=$cmd->{cmd};
1005 Irssi::command_unbind($tmp,on_cmd);
1006 }
1007 }
1008 }
1009
1010 sub irssicmd_socials {
1011 my ($social) = @_;
1012 irssicmd_reset();
1013 my $cutstr= ".txt";
1014 $filename = "$path/$socname.txt";
1015 opendir(DIR,$path) or return 0;
1016 while (defined(my $file = readdir(DIR))) {
1017 if($file =~ m".txt") {
1018 $tmp=$file;
1019 $tmp =~ s/$cutstr//;
1020 Irssi::command_bind($tmp,on_cmd,'Social Commands');
1021 }
1022 }
1023 }
1024
1025 sub on_cmd {
1026 my ($data, $server, $witem) = @_;
1027 @data_arr = split / /, $lastcmd;
1028 $cutstr = "/";
1029 $socname = @data_arr[0];
1030 $socname =~ s/$cutstr//;
1031 $target=Irssi::active_win()->{active}->{name};
1032 $home_chan=$target;
1033 $nick = "TechWizard";
1034 if($#data_arr == 0) {
1035 $nick2 = "UNSET";
1036 $msgsw=0;
1037 }
1038 if($#data_arr == 1) {
1039 $nick2 = @data_arr[1];
1040 $msgsw=0;
1041 }
1042 if($#data_arr == 2) {
1043 $nick2 = @data_arr[1];
1044 $msgsw=1;
1045 }
1046 if($home_chan =~ /^#/) {
1047 $chan = Irssi::Irc::Server->channel_find($home_chan);
1048 $nick_obj = $chan->nick_find($nick2);
1049 if($nick_obj->{nick} eq "" && $nick2 ne "UNSET") {
1050 $server->command("msg $target nickname does not exist.");
1051 return;
1052 }
1053 }
1054 do_social($server,$target,$socname,$nick,$nick2,$msgsw);
1055 }
1056
1057 sub cmd_sig {
1058 my($args) = @_;
1059 irssicmd_socials();
1060 $lastcmd=$args;
1061 }
1062
1063 sub check_dir {
1064 $sw=1;
1065 opendir(DIR,$path) or $sw=0;
1066 closedir(DIR);
1067 return $sw;
1068 }
1069
1070 sub init_socpath {
1071 if(check_dir()) { return; }
1072 @socnam_arr = ("beer","bslap","chains","cut","drp","fart","french","halo",
1073 "hug","hump","kiss","smacks","smooch","spank","stab","staple",
1074 "strip","trout","whips","yawn"
1075 );
1076 @socline_arr = (
1077 "0\nWho wants Beer!?!?!?\nname1 throws name2 a fresh cold beer out of the fridge.\nname1 opens up a nice cold beer, and drinks it.\nname1 tosses you a nice cold beer, better catch it!!\nyou just tossed name2 a nice cold beer.\n",
1078 "0\nLook OUT!!!! name1 is ready to Bitch slap someone!!!!\nname1 Bitch slaps name2 Violently, OUWWW that gotta hurt!\nname1 Bitch Slaps themself hard, Are they Crazy or what???\nyou gotten Bitch Slapped by name1, can you call 911?.\nyou violently bitch slap name2.\n",
1079 "0\nname1 looks around swinging the chains around, who shall be my victim?\nname1 chains name2 up, Ohh... Boy, name2 is gonna get it...\nname1 chain themself up, and swallowed the keys.\nname1 chained you up, aren't you wondering what they will do next?\nyou just chained up name2, whats next? torchure?\n",
1080 "0\nname1 wants to cut something......\nname1 cut name2 arms and legs off with blood on your face\nname1 cut something on them off\nyou cut everything off of their body\nyou cut name2 arms and legs off and blood flies everywhere\n",
1081 "0\nname1 goes out and buys a box of ~R1Dr.Pepper~RS.\nname1 tosses a ~R1Dr.Pepper~RS can to name2, If you waste it, You're Dead.\nname1 grabs a ~R1Dr.Pepper~RS, pops it open and gulps it down... aaahhhh.....\nname1 tosses you a can of ~R1Dr.Pepper~RS.\nyou gave name2 a can of ~R1Dr.Pepper~RS.\n",
1082 "0\nname1 farts, Roam roam!!!! Can ya hear it?\nname1 farts towards name2!! QUICK Wear a Gas Mask!!!!\nname1 farts up a storm and kills themself.\nname1 farts towards you, EWWWWW!!! can ya smell it????\nyou farted towards name2! you B*stard!\n",
1083 "0\nname1 need to be french\nname1 french name2 until name2 cant breathe\nname1 want to be french\nname1 french them until name1 cant breathe\nyou french name2 with all you got\n",
1084 "0\nname1 looks around seeing whoes innocent.\nname1 does their best best to look innocent.\nname1 looks and the mirror and finds a gold circle.\nblah\n",
1085 "0\nname1 needs a hug.\nname1 hugs name2 tightly.\nname1 hugs themself tightly.\nname1 hugs you tightly.\nyou hugs name2 tightly.\n",
1086 "0\nname1 wants to be hump........\nname1 hump name2 until name1 drop\nname1 hump themself\nname1 hump them hard and passionately\nyou hump name2 with all you got\n",
1087 "0\nname1 needs a kiss.\nname1 kisses name2 passionately.\nname1 kisses themself passionately.\nname1 kisses them passionately.\nyou kisses name2 passionately.\n",
1088 "0\nname1 smacks his monkey slowly.\nname1 smacks name2 for being an idiot, What were they thinking???\nname1 smacks and smacks until his face burns red.\nname1 smacks you for being an idiot.\nyou smacked name2, that damn idiot, what were they thinking???\n",
1089 "0\nname1 smooches everyone in the channel.\nname1 smooches name2. AWW aint that cute.. NOT!!!\nname1 tries to smooch themself, but can't. Anyone got a mirror????\nname1 smooches you very passionately.\nyou have smooched name2 on the lips.\n",
1090 "0\nname1 looks for a paddle to spank someone's ass with.\nname1 spanks name2 ass for being naughty.....\nname1 is trying to spank their own ass, does somebody have a paddle?\nyou felt something on your ass, you turned around a look, did name1 spank you?\nhow did feel spanking name2's ass.\n",
1091 "0\nLook OUT!!!! name1 is ready to Stab someone with a knife!!!!\nname1 Stabs name2 Violently, I hope they got life insurance\nname1 tries to Stab themself with a knife, 911, SUICIDE!!!\nname1 slaps ya with their dirty trout, are you going to let them get away with that???\nyou slapped name2 with your trout, I hope ya cleaned it first.\n",
1092 "0\nname1 grabs a staple gun and reloads the gun.\nname1 staples name2 to the wall, now they can't run, MUahahaha....\nname1 tries to staple themself to the wall, OUWWWW!!\nyou got stapled to the wall by name1.\nyou have stapled name2 to the wall.\n",
1093 "0\nname1 is waiting for someone to strip down, any volunteers?\nname1 strips name2 down one clothes after another.\nname1 watches themself in a mirror while stripping down.\nname1 is removing ya clothes.\nyou are removing name2's clothes, you better hope that camera is ready.\n",
1094 "0\nname1 is juggling the trout while looking for their victim.\nname1 slaps name2 with their dirty trout, *SPLAT*!!!\nname1 slaps himself with a dead trout, EWWWWWWW\nname1 slaps you with a dead trout, EWWWWWWW!!!\nyou slapped name2 with a dead trout, EWWWWWWW!!!\n",
1095 "0\nname1 is looking for a whip to torture someone.......RUN............\nname1 whips name2 until name1 sees blood.....\nname1 whips themself without mercy\nname1 whips them violently\nyou whips name2 with everything you have\n",
1096 "0\nname1 yawns and stretches.\nname1 yawns at name2, mann.. You're boring.\nname1 yawns and stretches and then falls over, WHOOPS!!\nname1 yawns at you, they are very bored.\nyou yawned at name2, how rude....\n",
1097 );
1098 my $cx=0;
1099 print "Mkdir $path.";
1100 mkdir($path);
1101 print "Inserting socials into $path.";
1102 foreach $socname (@socnam_arr) {
1103 $filename = "$path/$socname.txt";
1104 open(FILE,">$filename");
1105 print FILE @socline_arr[$cx];
1106 close FILE;
1107 $cx++;
1108 }
1109 }
1110
1111 Irssi::command_bind('social','irssi_print_social','tech_addon');
1112 Irssi::command_bind('social set','irssi_setsoc','tech_addon');
1113 Irssi::command_bind('social color','irssi_colorlist','tech_addon');
1114 Irssi::command_bind('social reset','irssicmd_reset','tech_addon');
1115 Irssi::command_bind('social add','irssi_addsoc','tech_addon');
1116 Irssi::command_bind('social del','irssi_delsoc','tech_addon');
1117 Irssi::command_bind('social list','irssi_socblist','tech_addon');
1118 Irssi::command_bind('soclist','irssi_socblist','tech_addon');
1119 Irssi::command_bind('soccolor','irssi_socblist','tech_addon');
1120
1121 Irssi::signal_add_first('send command', 'cmd_sig');
1122 Irssi::signal_add_last('message public', 'message_public');
1123 Irssi::signal_add_last('message private', 'message_private');
1124 Irssi::signal_add_last("message own_public", "on_public");
1125 Irssi::signal_add_last("message own_private", "on_private");
1126 Irssi::settings_add_bool('tech_addon', 'twsocials_instruct', 1);
1127 Irssi::settings_add_bool('tech_addon', 'twsocials_remote', 0);
1128 irssicmd_socials();
1129
1130 if(Irssi::settings_get_bool('twsocials_instruct')) {
1131 print $instrut;
1132 }
1133