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