Advertisement
Guest User

Untitled

a guest
May 21st, 2017
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.84 KB | None | 0 0
  1. #!/usr/bin/perl -W
  2.  
  3. use IO::Socket;
  4.  
  5. #variables
  6. $server = "deep.space";
  7. $serveremoto = "irc.gcrew.es";
  8. $serverdesc = "RoBoTservice";
  9. $key = "openaccess";
  10. $numeric = 200;
  11. ## NICK de los bots de servicios
  12. $nick_chan = "CHaN";
  13. $nick_nick = "NiCK";
  14. $nick_creg = "CReG";
  15. $chan_dias = 15;
  16.  
  17. #NO MODIFICAR NADA
  18. $numero = 9999;
  19.  
  20.  
  21. $envia = IO::Socket::INET->new(
  22. Proto=>"tcp" ,
  23. PeerAddr=> $serveremoto ,
  24. PeerPort=>"4400"
  25. )
  26. or die "No se pudo lograr la conexion con $serveremoto .\n";
  27.  
  28. print "Conectado a $serveremoto\n";
  29.  
  30. print $envia "PASS $key\n";
  31. print $envia "SERVER $server 1 :U0-*-$numeric $serverdesc\n";
  32. print $envia "NICK $nick_chan 1 1475205493 $nick_chan Local $server 0 +oiSq local :$nick_chan\n";
  33. print $envia "NICK $nick_nick 1 1475205494 $nick_nick Local $server 0 +oiSq local :$nick_nick\n";
  34. print $envia "NICK $nick_creg 1 1475205495 $nick_creg Local $server 0 +oiSq local :$nick_creg\n";
  35.  
  36. #While comprueba cada vez que el socket recive o envia informacion y almacena los datos en variables temporarmente para su uso
  37. while (<$envia>)
  38. {
  39. @space = split(" ",$_);
  40. @dots = split (":",$_);
  41. @snick = split(" ",$dots[1]);
  42. @dice = split(" ",$dots[2]);
  43. print "<-" . $_;
  44.  
  45. #PING responde a los ping del servidor
  46. if ($space[0] eq "PING")
  47. {
  48. print $envia "PONG" . $dots[1] . "\n";
  49. }
  50. #NICK mira cuando conecta un nick, y comprueba si esta registrado, de estarlo, pide que se identifique
  51. if ($space[0] eq "NICK")
  52. {
  53. &lee_nick("$space[1]");
  54. if($nick_leenick[0] eq $space[1])
  55. {
  56. my $rango = 9999;
  57. my $otrorango = 963086439;
  58. my $rando = int(rand($otrorango));
  59. my $random_number = int(rand($rango));
  60. print $envia ":$nick_nick PRIVMSG $space[1] :El nick esta registrado.Si el nick le pertenese, identifiquese de este modo\n";
  61. print $envia ":$nick_nick PRIVMSG $space[1] :/msg $nick_nick IDENTIFICA $space[1] contraseña \n";
  62. print $envia "SVSNICK $space[1] invi-$random_number $rando\n";
  63. }
  64. }
  65. if ($space[1] eq "JOIN")
  66. {
  67. my($levejoin);
  68. my(@lee_joinlee);
  69. my($datos_joinlee_temp);
  70. my(@separa_joinlee);
  71.  
  72. open(joinlee,"<$space[2].txt");
  73. @lee_joinlee =<joinlee>;
  74. foreach $datos_joinlee_temp(@lee_joinlee)
  75. {
  76. @separa_joinlee = split(" ",$datos_joinlee_temp);
  77. if ($separa_joinlee[0] eq $snick[0])
  78. {
  79. $levejoin = $separa_joinlee[1];
  80. }
  81. }
  82. close(joinlee);
  83. if ($levejoin >= 300)
  84. {
  85. print $envia ":$nick_chan MODE $space[2] +o $snick[0] \n";
  86. }
  87. elsif ($levejoin <= 299 && $levejoin >= 150)
  88. {
  89. print $envia ":$nick_chan MODE $space[2] +v $snick[0] \n";
  90. }
  91. my(@lee_joincanal);
  92. my($datos_joincanal);
  93. my(@separa_joincanal);
  94. open(joincanal,"<$space[2].txt");
  95. @lee_joincanal=<joincanal>;
  96. foreach $datos_joincanal(@lee_joincanal)
  97. {
  98. @separa_joincanal = split(" ",$datos_joincanal);
  99. if ($separa_joincanal[0] eq "MODO")
  100. {
  101. print $envia ":$nick_chan MODE $space[2] +$separa_joincanal[1] \n";
  102. }
  103. if ($separa_joincanal[0] eq "TOPIC")
  104. {
  105. print $envia ":$nick_chan TOPIC $space[2] $separa_joincanal[1] \n";
  106. }
  107. }
  108. close(joincanal);
  109. }
  110. #SENDSNO comprueba cuando algien se logea como Administrador , Ircop , Operador...
  111. if ($space[1] eq "SENDSNO")
  112. {
  113. if ($dice[7] eq "administrator")
  114. {
  115. open(leead,"<ircop.txt");
  116. @lee_ircop =<leead>;
  117. my($stircop);
  118. foreach $lee_datos_ircop(@lee_ircop)
  119. {
  120. @separa_temp = split(" ",$lee_datos_ircop);
  121. if ($separa_temp[0] eq $dice[0])
  122. {
  123. $ircop{$dice[0]}="2";
  124. close(leead);
  125. }
  126. }
  127. $stircop = exists $ircop{$dice[0]};
  128. if ($stircop == 0)
  129. {
  130. open(leead,">>ircop.txt");
  131. print leead "$dice[0] 2\n";
  132. close(leead);
  133. $ircop{$dice[0]}="2";
  134. }
  135. }
  136. }
  137. #PRIVMSG comprueba si el mensaje va a algun bot de servicio
  138. if ($space[1] eq "PRIVMSG")
  139. {
  140. if("\u".$space[2]."\l" eq "\u$nick_chan\l")
  141. {
  142. &chan("$snick[0]","$dice[0]","$dice[1]","$dice[2]","$dice[3]","$dice[4]");
  143. }
  144. elsif("\u".$space[2]."\l" eq "\u$nick_creg\l")
  145. {
  146. &creg("$snick[0]","$dice[0]","$dice[1]","$dice[2]","$dice[3]");
  147. }
  148. elsif("\u".$space[2]."\l" eq "\u$nick_nick\l")
  149. {
  150. &nick("$snick[0]","$dice[0]","$dice[1]","$dice[2]");
  151. }
  152. }
  153. }
  154.  
  155. sub lee_canal
  156. {
  157. my($chan);
  158. my($passchan);
  159. my($funder);
  160. my($describe);
  161. my($topic);
  162. my(@canal_text);
  163. my(@separa_lee_canal);
  164. my($datos_canal);
  165.  
  166. open(canaltext,"<$_[0].txt");
  167. @canal_text=<canaltext>;
  168. foreach $datos_canal(@canal_text)
  169. {
  170. @separa_lee_canal = split(" ",$datos_canal);
  171. if ($separa_lee_canal[0] eq "CANAL")
  172. {
  173. $chan = $separa_lee_canal[1];
  174. }
  175. if ($separa_lee_canal[0] eq "PASS")
  176. {
  177. $passchan = $separa_lee_canal[1];
  178. }
  179. if ($separa_lee_canal[0] eq "FUNDER")
  180. {
  181. $funder = $separa_lee_canal[1];
  182. }
  183. if ($separa_lee_canal[0] eq "DESCRIPCION")
  184. {
  185. $describe = $separa_lee_canal[1];
  186. }
  187. if ($separa_lee_canal[0] eq "TOPIC")
  188. {
  189. $topic = $separa_lee_canal[1];
  190. }
  191. if ($separa_lee_canal[0] eq "MODO")
  192. {
  193. $modos = $separa_lee_canal[1];
  194. }
  195.  
  196. }
  197. close(canaltext);
  198. @chan_temp =("$chan","$passchan","$funder","$describe","$topic","$modos");
  199. }
  200.  
  201. #Nick toda las funciones
  202. sub nick
  203. {
  204. if ($_[1] eq "REGISTER")
  205. {
  206. my $email = $_[2];
  207. my $nick_register = $_[0];
  208. &nick_register("$nick_register","$email");
  209. }
  210. elsif ($_[1] eq "HELP")
  211. {
  212. &nick_help("$_[0]","$_[2]");
  213. }
  214. elsif ($_[1] eq "IDENTIFICA")
  215. {
  216. my $nick_identifica_envia = $_[0];
  217. my $nick_identifica_pass = $_[3];
  218. my $nick_identifica_nick = $_[2];
  219. &nick_identifica("$nick_identifica_envia","$nick_identifica_nick","$nick_identifica_pass");
  220. }
  221.  
  222. }
  223.  
  224. sub lee_nick
  225. {
  226. my(@lee_nick);
  227. my($datos_leenick);
  228. my(@separa_leenick);
  229. my($lee_nick_user);
  230. my($lee_nick_pass);
  231. my($lee_nick_email);
  232. open(leenick,"<$_[0].txt");
  233. @lee_nick=<leenick>;
  234. foreach $datos_leenick(@lee_nick)
  235. {
  236. @separa_leenick = split(" ",$datos_leenick);
  237. if ($separa_leenick[0] eq "NICK")
  238. {
  239. $lee_nick_user = $separa_leenick[1];
  240. }
  241. if ($separa_leenick[0] eq "PASS")
  242. {
  243. $lee_nick_pass = $separa_leenick[1];
  244. }
  245. if ($separa_leenick[0] eq "EMAIL")
  246. {
  247. $lee_nick_email = $separa_leenick[1];
  248. }
  249. }
  250. @nick_leenick =("$lee_nick_user","$lee_nick_pass","$lee_nick_email");
  251. close(leenick);
  252.  
  253. }
  254.  
  255. sub nick_identifica
  256. {
  257. &lee_nick("$_[1]");
  258. my $nick_user_iden = $nick_leenick[0];
  259. my $nick_pass_iden = $nick_leenick[1];
  260. if ($nick_user_iden eq $_[1] && $nick_pass_iden eq $_[2])
  261. {
  262. my $randis = int(rand(963086432));
  263. print $envia "SVSNICK $_[0] $_[1] $randis \n";
  264. print $envia ":$nick_chan SVSMODE $_[1] +r \n";
  265. print $envia ":$nick_nick PRIVMSG $_[1] :Contraseña aceptada, Bienvenido a casa ;) \n";
  266. }
  267. }
  268.  
  269.  
  270. sub nick_register
  271. {
  272. my($lee_register_nick);
  273. my(@register_mira_nick);
  274. my($comprueba_nick);
  275. my(@nick_register);
  276. open(leenick,">>$_[0].txt");
  277. $pass_rand = int(rand($numero));
  278. $rand_num = rand($numero);
  279. print leenick "NICK $_[0] \n";
  280. print leenick "PASS $pass_rand \n";
  281. print leenick "EMAIL $_[1] \n";
  282. print leenick "AKICK \n";
  283. close(leenick);
  284. my $randiss = int(rand(963086432));
  285. my $numran = int(rand(9999));
  286. print $envia ":$nick_nick PRIVMSG $_[0] :Su nick fue registrado , para identificarse escriba /msg $nick_nick IDENTIFICA $_[0] $pass_rand \n";
  287. print $envia ":$nick_nick PRIVMSG $_[0] :para cambiar su contraseña escriba (debe tener el nick IDENTIFICADO para poder usar este comando \n";
  288. print $envia ":$nick_nick PRIVMSG $_[0] :/msg $nick_nick PASSMODIFI antiguacontraseña nuevacontraseña \n";
  289. print $envia "SVSNICK $_[0] invi-$numran $randiss \n";
  290.  
  291. }
  292.  
  293. #chan toda las funciones
  294. sub chan
  295. {
  296. if($_[1] eq "HELP")
  297. {
  298. &chan_help("$_[0]","$_[1]","$_[2]");
  299. }
  300. if($_[1] eq "OP")
  301. {
  302. &chan_op("$_[0]","$_[2]","$_[3]");
  303. }
  304. if($_[1] eq "ACCESS")
  305. {
  306. my $elnickmanda = $_[0];
  307. my $canalmanda = $_[2];
  308. my $opcionmanda = $_[3];
  309. my $esenickmanda = $_[4];
  310. my $nivelmanda = $_[5];
  311. &chan_access("$elnickmanda","$canalmanda","$opcionmanda","$esenickmanda","$nivelmanda");
  312. }
  313. if($_[1] eq "IDENTIFICA")
  314. {
  315. &chan_identifica("$_[0]","$_[2]","$_[3]");
  316. }
  317. if ($_[1] eq "INFO")
  318. {
  319. &chan_info("$_[0]","$_[2]");
  320. }
  321. }
  322.  
  323.  
  324.  
  325.  
  326. sub chan_info
  327. {
  328. &lee_canal("$_[1]");
  329. if ($chan_temp[0] eq "$_[1]")
  330. {
  331. my $canal_info = $chan_temp[0];
  332. my $fundador_info = $chan_temp[2];
  333. my $descrip_info = $chan_temp[3];
  334. my $topic_info = $chan_temp[4];
  335. my $modos_info = $chan_temp[5];
  336. print $envia ":$nick_chan PRIVMSG $_[0] :Informacion del canal $canal_info \n";
  337. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  338. print $envia ":$nick_chan PRIVMSG $_[0] :Fundador : $fundador_info \n";
  339. print $envia ":$nick_chan PRIVMSG $_[0] :TOPIC :$topic_info \n";
  340. print $envia ":$nick_chan PRIVMSG $_[0] :Usa Los modos $modos_info \n";
  341. }
  342. }
  343.  
  344.  
  345. sub chan_identifica
  346. {
  347. if (!$nicks{$_[0]})
  348. {
  349. &lee_canal("$_[1]");
  350. if ($chan_temp[0] eq "$_[1]")
  351. {
  352. my $chan_canal_identifica = $chan_temp[0];
  353. my $chan_pass_identifica = $chan_temp[1];
  354. my $chan_funder_identifica = $chan_temp[2];
  355. if ($chan_canal_identifica eq $_[1] && $chan_pass_identifica eq $_[2] && $chan_funder_identifica eq $_[0])
  356. {
  357. print $envia ":$nick_chan PRIVMSG $_[0] :Se a identificado correctamente como Fundador de $_[1] \n";
  358. print $envia ":$nick_chan MODE $_[1] +q $_[0]\n";
  359. $nicks{$_[0]}="$_[1]";
  360. }
  361. }
  362. }
  363. }
  364.  
  365.  
  366. sub chan_access
  367. {
  368. my($nivel);
  369. my($founder);
  370. if ($_[2] eq "ADD")
  371. {
  372. open(leechanaccess,"<$_[1].txt");
  373. my @lee_chan_access =<leechanaccess>;
  374. foreach $chan_access_datos_temp(@lee_chan_access)
  375. {
  376. @datos_lee_chan_access = split(" ",$chan_access_datos_temp);
  377. if ($datos_lee_chan_access[0] eq $_[0])
  378. {
  379. $nivel = $datos_lee_chan_access[1];
  380. }
  381. }
  382. }
  383. close(leechanaccess);
  384. if($_[4] <= $nivel)
  385. {
  386. open(miranickaccess,"<$_[3].txt");
  387. @mira_nickaccess =<miranickaccess>;
  388. my($registrado_nick);
  389. foreach $datos_miranickaccess_temp(@mira_nickaccess)
  390. {
  391. @separo_datosaccess = split(" ",$datos_miranickaccess_temp);
  392. if ($separo_datosaccess[1] eq $_[3])
  393. {
  394. open(anadeaccess,">>$_[1].txt");
  395. print anadeaccess "$_[3] $_[4]\n";
  396. close(anadeaccess);
  397. print $envia ":$nick_chan NOTICE $_[1] :$_[0] Añade a la lista de ACCESS a $_[3] con nivel $_[4] \n";
  398. $registrado_nick = "si";
  399. }
  400.  
  401. }
  402. if (!$registrado_nick)
  403. {
  404. print $envia ":$nick_chan PRIVMSG $_[0] :Lo sentimos,el nick $_[3] , parece no tener el nick registrado \n";
  405. }
  406. }
  407. }
  408.  
  409. sub creg_help
  410. {
  411. if (!$_[2])
  412. {
  413. print $envia ":$nick_creg PRIVMSG $_[0] :Comando de ayuda para $nick_creg \n";
  414. print $envia ":$nick_creg PRIVMSG $_[0] :Sintaxis /msg $nick_creg REGISTER <canal> <contraseña> <descripcion> \n";
  415. }
  416. }
  417.  
  418. sub chan_op
  419. {
  420. my($levels);
  421. open(chanop,"<$_[1].txt");
  422. @lee_chanop=<chanop>;
  423. foreach $datos_chanop_temp(@lee_chanop)
  424. {
  425. @separa_chanop = split(" ",$datos_chanop_temp);
  426. if($separa_chanop[0] eq $_[0])
  427. {
  428. $levels = $separa_chanop[1];
  429. if($levels >= 150)
  430. {
  431. print $envia ":$nick_chan MODE $_[1] +o $_[2] \n";
  432. close(chanop);
  433. }
  434. elsif($levels < 150)
  435. {
  436. print $envia ":$nick_chan PRIVMSG $_[0] :Lo siento, no tiene suficiente nivel \n";
  437. close(chanop);
  438. }
  439. }
  440. }
  441. close(chanop);
  442. }
  443.  
  444. sub chan_help
  445. {
  446. if (!$_[2])
  447. {
  448. print $envia ":$nick_chan PRIVMSG $_[0] :Comando ayuda para $nick_chan \n";
  449. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  450. print $envia ":$nick_chan PRIVMSG $_[0] :COMANDOS :Comentario \n";
  451. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  452. print $envia ":$nick_chan PRIVMSG $_[0] :REGISTER :Para registrar un canal \n";
  453. print $envia ":$nick_chan PRIVMSG $_[0] :NICK :Nick Help para mas informacion \n";
  454. print $envia ":$nick_chan PRIVMSG $_[0] :SET :Fija opciones e informacion del canal \n";
  455. print $envia ":$nick_chan PRIVMSG $_[0] :ACCESS :Modifica la lista de usuarios con privilegios \n";
  456. print $envia ":$nick_chan PRIVMSG $_[0] :LEVELS :Redefine los niveles de acceso \n";
  457. print $envia ":$nick_chan PRIVMSG $_[0] :AKICK :Mantiene la lista de Auto-Kick \n";
  458. print $envia ":$nick_chan PRIVMSG $_[0] :DROP :Cancela la registracion de un canal \n";
  459. print $envia ":$nick_chan PRIVMSG $_[0] :INFO :Muestra informacion de un canal \n";
  460. print $envia ":$nick_chan PRIVMSG $_[0] :LIST :Lista los canales registrados \n";
  461. print $envia ":$nick_chan PRIVMSG $_[0] :INVITE :Te invita a un canal \n";
  462. print $envia ":$nick_chan PRIVMSG $_[0] :VOICE :Da voz en un canal \n";
  463. print $envia ":$nick_chan PRIVMSG $_[0] :DEVOICE :Quita voz en un canal \n";
  464. print $envia ":$nick_chan PRIVMSG $_[0] :OP :Da OP en un canal \n";
  465. print $envia ":$nick_chan PRIVMSG $_[0] :KICK :Kickea a un usuario de un canal \n";
  466. print $envia ":$nick_chan PRIVMSG $_[0] :BAN :Poner un BAN en un canal \n";
  467. print $envia ":$nick_chan PRIVMSG $_[0] :UNBAN :Quita un BAN en un canal \n";
  468. print $envia ":$nick_chan PRIVMSG $_[0] :CLEAR :Reinicia los modos de un canal \n";
  469. print $envia ":$nick_chan PRIVMSG $_[0] :RESET :Resetea el canal \n";
  470. print $envia ":$nick_chan PRIVMSG $_[0] :DELACCESS :Elimina nuestro registro de un canal \n";
  471. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  472. print $envia ":$nick_chan PRIVMSG $_[0] :Note que si un canal no es utilizado por $chan_dias días ( es decir \n";
  473. print $envia ":$nick_chan PRIVMSG $_[0] :qué ningún usuario en la lista de acceso del canal entra en \n";
  474. print $envia ":$nick_chan PRIVMSG $_[0] :ese periodo de tiempo) será automaticamente cancelado. \n";
  475. }
  476. if($_[2] eq "SET")
  477. {
  478. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: SET canal opción parámetros\n";
  479. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  480. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: Habilita al fundador del canal a definir varias opciones y\n";
  481. print $envia ":$nick_chan PRIVMSG $_[0] :otra información. El fundador, debe identificarse vía\n";
  482. print $envia ":$nick_chan PRIVMSG $_[0] :comando IDENTIFY antes de utilizar SET.\n";
  483. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  484. print $envia ":$nick_chan PRIVMSG $_[0] :Opciones disponibles:\n";
  485. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  486. print $envia ":$nick_chan PRIVMSG $_[0] :Opciones informativas \n";
  487. print $envia ":$nick_chan PRIVMSG $_[0] : DESC Cambia la descripción del canal \n";
  488. print $envia ":$nick_chan PRIVMSG $_[0] : URL Asocia una URL al canal \n";
  489. print $envia ":$nick_chan PRIVMSG $_[0] : EMAIL Asocia una dirección de correo al canal \n";
  490. print $envia ":$nick_chan PRIVMSG $_[0] : ENTRYMSG Fija un mensaje que será mostrado a los usuarios cuando entren al canal\n";
  491. print $envia ":$nick_chan PRIVMSG $_[0] : TOPIC Cambia el Tema del canal \n";
  492. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  493. print $envia ":$nick_chan PRIVMSG $_[0] :Opciones de seguridad \n";
  494. print $envia ":$nick_chan PRIVMSG $_[0] : KEEPTOPIC Retiene el tema (topic) cuando el canal no está en uso \n";
  495. print $envia ":$nick_chan PRIVMSG $_[0] : TOPICLOCK El Tema SOLO podrá ser cambiado vía SET TOPIC \n";
  496. print $envia ":$nick_chan PRIVMSG $_[0] : DEBUG Activa/desactiva la opción de que CHaN muestre determinadas \n";
  497. print $envia ":$nick_chan PRIVMSG $_[0] : acciones sobre un canal. \n";
  498. print $envia ":$nick_chan PRIVMSG $_[0] : MLOCK Fija los modos del canal en 'ON' u 'OFF' \n";
  499. print $envia ":$nick_chan PRIVMSG $_[0] : PRIVATE Oculta el canal (no se ve cuando se utiliza el comando LIST)\n";
  500. print $envia ":$nick_chan PRIVMSG $_[0] : RESTRICTED Restringe el acceso al canal\n";
  501. print $envia ":$nick_chan PRIVMSG $_[0] : SECURE Activa los rasgos de seguridad de CHaN \n";
  502. print $envia ":$nick_chan PRIVMSG $_[0] : SECUREOPS Control estricto de Status de operador \n";
  503. print $envia ":$nick_chan PRIVMSG $_[0] : AUTOLIMIT Evita los ataques por MassJoin (clones) variando de forma automática y dinámica\n";
  504. print $envia ":$nick_chan PRIVMSG $_[0] : el limite de usuarios de un canal (+l). \n";
  505. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  506. print $envia ":$nick_chan PRIVMSG $_[0] :Opciones administrativas (solo fundadores)\n";
  507. print $envia ":$nick_chan PRIVMSG $_[0] : NAME Ajusta el nombre del canal intercambiando mayúsculas y minúsculas\n";
  508. print $envia ":$nick_chan PRIVMSG $_[0] : FOUNDER Cambia el fundador del canal \n";
  509. print $envia ":$nick_chan PRIVMSG $_[0] : SUCCESSOR Cambia el sucesor del canal\n";
  510. print $envia ":$nick_chan PRIVMSG $_[0] : PASSWORD Cambia la contraseña del fundador\n";
  511. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  512. print $envia ":$nick_chan PRIVMSG $_[0] :Escriba /msg CHaN HELP <opción> para obtener mas \n";
  513. print $envia ":$nick_chan PRIVMSG $_[0] :información de una opción en particular. \n";
  514. }
  515. if($_[2] eq "REGISTER")
  516. {
  517. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: /msg $nick REGISTER <email> <contraseña> \n";
  518. }
  519. if($_[2] eq "ACCESS")
  520. {
  521. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: \n";
  522. print $envia ":$nick_chan PRIVMSG $_[0] :ACCESS canal ADD nick nivel \n";
  523. print $envia ":$nick_chan PRIVMSG $_[0] :ACCESS canal DEL {nick | posición-numero} \n";
  524. print $envia ":$nick_chan PRIVMSG $_[0] :ACCESS canal LIST [máscara]Levels relacionados: \n";
  525. print $envia ":$nick_chan PRIVMSG $_[0] :ACC-CHANGE ACC-LIST \n";
  526. print $envia ":$nick_chan PRIVMSG $_[0] :Nivel por defecto: 450 y 0 respectivamente. \n";
  527. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: Mantiene la lista de accesos del canal. La lista de accesos \n";
  528. print $envia ":$nick_chan PRIVMSG $_[0] :establece qué usuarios están habilitados a ser operadores \n";
  529. print $envia ":$nick_chan PRIVMSG $_[0] :del canal o acceder a comandos de CHaN en el canal. Se pueden \n";
  530. print $envia ":$nick_chan PRIVMSG $_[0] :establecer diferentes niveles de usuarios para acceder a\n";
  531. print $envia ":$nick_chan PRIVMSG $_[0] :diferentes privilegios; utilice /msg CHaN HELP ACCESS LEVELS\n";
  532. print $envia ":$nick_chan PRIVMSG $_[0] :para obtener información mas específica. Cualquier nick que\n";
  533. print $envia ":$nick_chan PRIVMSG $_[0] :no esté en la lista de acceso tiene nivel de usuario 0\n";
  534. print $envia ":$nick_chan PRIVMSG $_[0] :(cero).\n";
  535. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  536. print $envia ":$nick_chan PRIVMSG $_[0] :El comando ACCESS ADD agrega al nick con el nivel dado a la\n";
  537. print $envia ":$nick_chan PRIVMSG $_[0] :lista de acceso; si el usuario ya existe en la lista, se\n";
  538. print $envia ":$nick_chan PRIVMSG $_[0] :reemplazará su nivel. El nivel especificado debe ser menor\n";
  539. print $envia ":$nick_chan PRIVMSG $_[0] :que el que tiene el usuario que está ingresando el comando,\n";
  540. print $envia ":$nick_chan PRIVMSG $_[0] :y si el nick está actualmente en la lista, el nivel actual\n";
  541. print $envia ":$nick_chan PRIVMSG $_[0] :de dicho nick debe ser menor que el nivel del usuario que\n";
  542. print $envia ":$nick_chan PRIVMSG $_[0] :está ingresando el comando.\n";
  543. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  544. print $envia ":$nick_chan PRIVMSG $_[0] :El comando ACCESS DEL elimina un usuario de la lista de\n";
  545. print $envia ":$nick_chan PRIVMSG $_[0] :accesos. Se puede eliminar un usuario ingresando el nick o\n";
  546. print $envia ":$nick_chan PRIVMSG $_[0] :ingresando el número que ocupa en la lista de accesos.\n";
  547. print $envia ":$nick_chan PRIVMSG $_[0] :\n";
  548. print $envia ":$nick_chan PRIVMSG $_[0] :El comando ACCESS LIST muestra la lista de accesos al canal;\n";
  549. print $envia ":$nick_chan PRIVMSG $_[0] :se pueden utilizar caracteres comodines o máscaras, en cuyo\n";
  550. print $envia ":$nick_chan PRIVMSG $_[0] :caso sólo las coincidencias concurrentes serán listadas.\n";
  551. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  552. print $envia ":$nick_chan PRIVMSG $_[0] :Nota: Una máscara es el sistema que utiliza el IRC para identificar a\n";
  553. print $envia ":$nick_chan PRIVMSG $_[0] :un usuario, esta compuesta de nick!ident\@host, donde nick es el \n";
  554. print $envia ":$nick_chan PRIVMSG $_[0] :nick del usuario, ident es el ident y host es la ip virtual. \n";
  555. print $envia ":$nick_chan PRIVMSG $_[0] :Los caracteres ! y @ son los separadores de los respectivos campos. \n";
  556. print $envia ":$nick_chan PRIVMSG $_[0] :Una máscara acepta caracteres \"comodín\" que son el * que sustituye \n";
  557. print $envia ":$nick_chan PRIVMSG $_[0] :cualquier numero de caracteres en su posición y ? que sustituye un único carácter.:\n";
  558. }
  559. if ($_[2] eq "LEVELS")
  560. {
  561. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: \n";
  562. print $envia ":$nick_chan PRIVMSG $_[0] : LEVELS canal SET tipo nivel\n";
  563. print $envia ":$nick_chan PRIVMSG $_[0] : LEVELS canal {DIS | DISABLE} tipo\n";
  564. print $envia ":$nick_chan PRIVMSG $_[0] : LEVELS canal LIST\n";
  565. print $envia ":$nick_chan PRIVMSG $_[0] : LEVELS canal RESET\n";
  566. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  567. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: El comando LEVELS permite un control fino sobre los accesos\n";
  568. print $envia ":$nick_chan PRIVMSG $_[0] :numéricos utilizados por los canales. Con este comando,\n";
  569. print $envia ":$nick_chan PRIVMSG $_[0] :usted puede definir los niveles requeridos para muchas de\n";
  570. print $envia ":$nick_chan PRIVMSG $_[0] :las funciones de CHaN. Los comandos SET FOUNDER,\n";
  571. print $envia ":$nick_chan PRIVMSG $_[0] :SET PASSWORD, así como éste comando están siempre\n";
  572. print $envia ":$nick_chan PRIVMSG $_[0] :restringidos al fundador.\n";
  573. print $envia ":$nick_chan PRIVMSG $_[0] :LEVELS SET habilita el acceso para una función o grupo de\n";
  574. print $envia ":$nick_chan PRIVMSG $_[0] :funciones a ser modificadas.\n";
  575. print $envia ":$nick_chan PRIVMSG $_[0] :LEVELS DISABLE (o DIS en forma abreviada) deshabilita un\n";
  576. print $envia ":$nick_chan PRIVMSG $_[0] :privilegio automático, o deshabilita el acceso para\n";
  577. print $envia ":$nick_chan PRIVMSG $_[0] :cualquier otro que no sea el fundador del canal.\n";
  578. print $envia ":$nick_chan PRIVMSG $_[0] :LEVELS LIST muestra los niveles actuales para cada función o\n";
  579. print $envia ":$nick_chan PRIVMSG $_[0] :grupo de funciones.\n";
  580. print $envia ":$nick_chan PRIVMSG $_[0] :LEVELS RESET vuelve todos los niveles a sus valores por\n";
  581. print $envia ":$nick_chan PRIVMSG $_[0] :defecto, los mismos que cuando se registra por primera vez\n";
  582. print $envia ":$nick_chan PRIVMSG $_[0] :un canal (vea HELP ACCESS LEVELS).\n";
  583. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  584. print $envia ":$nick_chan PRIVMSG $_[0] :Para una lista de las funciones que pueden ser establecidas,\n";
  585. print $envia ":$nick_chan PRIVMSG $_[0] :utilice el comando HELP LEVELS DESC.\n";
  586. }
  587. if ($_[2] eq "AKICK")
  588. {
  589. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis:\n";
  590. print $envia ":$nick_chan PRIVMSG $_[0] : AKICK canal ADD máscara [razón]\n";
  591. print $envia ":$nick_chan PRIVMSG $_[0] : AKICK canal DEL máscara\n";
  592. print $envia ":$nick_chan PRIVMSG $_[0] : AKICK canal LIST [máscara]\n";
  593. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  594. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: \n";
  595. print $envia ":$nick_chan PRIVMSG $_[0] :Definimos AKICK como \"Expulsión automática\".\n";
  596. print $envia ":$nick_chan PRIVMSG $_[0] :Definimos BAN como \"Entrada prohibida\".\n";
  597. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  598. print $envia ":$nick_chan PRIVMSG $_[0] :Este comando, mantiene la lista de AKICK del canal. Si un\n";
  599. print $envia ":$nick_chan PRIVMSG $_[0] :usuario está en la lista de AKICK e intenta entrar al canal,\n";
  600. print $envia ":$nick_chan PRIVMSG $_[0] :CHaN automáticamente agrega dicho usuario a la lista BAN\n";
  601. print $envia ":$nick_chan PRIVMSG $_[0] :del canal, y luego lo expulsa del canal.\n";
  602. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  603. print $envia ":$nick_chan PRIVMSG $_[0] :El comando AKICK ADD agrega un usuario a la lista de AKICK.\n";
  604. print $envia ":$nick_chan PRIVMSG $_[0] :Si una razón es dada con el comando, entonces la razón será\n";
  605. print $envia ":$nick_chan PRIVMSG $_[0] :utilizada por CHaN cuando expulse a dicho usuario; si\n";
  606. print $envia ":$nick_chan PRIVMSG $_[0] :no, el mensaje que se utilizará por defecto, es \n";
  607. print $envia ":$nick_chan PRIVMSG $_[0] :\"No te quiero en el canal\".\n";
  608. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  609. print $envia ":$nick_chan PRIVMSG $_[0] :El comando AKICK DEL elimina al usuario de la lista de\n";
  610. print $envia ":$nick_chan PRIVMSG $_[0] :AKICK. Este comando no remueve el BAN que pueda existir en\n";
  611. print $envia ":$nick_chan PRIVMSG $_[0] :el canal, el cual deberá ser removido manualmente.\n";
  612. print $envia ":$nick_chan PRIVMSG $_[0] :\n";
  613. print $envia ":$nick_chan PRIVMSG $_[0] :El comando AKICK LIST muestra la lista de usuarios en la\n";
  614. print $envia ":$nick_chan PRIVMSG $_[0] :lista de AKICK. Opcionalmente, sólo lista aquellos\n";
  615. print $envia ":$nick_chan PRIVMSG $_[0] :suministrados con la máscara dada.\n";
  616. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  617. print $envia ":$nick_chan PRIVMSG $_[0] :Nota: Una máscara es el sistema que utiliza el IRC para identificar a \n";
  618. print $envia ":$nick_chan PRIVMSG $_[0] :un usuario, esta compuesta de nick!ident\@host, donde nick es el \n";
  619. print $envia ":$nick_chan PRIVMSG $_[0] :nick del usuario, ident es el ident y host es la ip virtual. \n";
  620. print $envia ":$nick_chan PRIVMSG $_[0] :Los caracteres ! y @ son los separadores de los respectivos campos. \n";
  621. print $envia ":$nick_chan PRIVMSG $_[0] :Una máscara acepta caracteres \"comodín\" que son el * que sustituye \n";
  622. print $envia ":$nick_chan PRIVMSG $_[0] :cualquier número de caracteres en su posición y ? que sustituye un único carácter. \n";
  623. }
  624. if ($_[2] eq "INFO")
  625. {
  626. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: INFO canal\n";
  627. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  628. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: Provee información acerca del canal (o informa que no está\n";
  629. print $envia ":$nick_chan PRIVMSG $_[0] :registrado). Lista el fundador, hora y fecha de\n";
  630. print $envia ":$nick_chan PRIVMSG $_[0] :registro, última vez que se utilizó, descripción, opciones y\n";
  631. print $envia ":$nick_chan PRIVMSG $_[0] :modos del canal (si los hubiese).\n";
  632. }
  633. if ($_[2] eq "INVITE")
  634. {
  635. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: INVITE canal\n";
  636. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  637. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: Le dice a CHaN que lo invite a usted al canal indicado.\n";
  638. print $envia ":$nick_chan PRIVMSG $_[0] :Por defecto, solo funciona si su nivel de acceso en dicho\n";
  639. print $envia ":$nick_chan PRIVMSG $_[0] :canal es mayor que 0 (cero).\n";
  640. }
  641. if ($_[2] eq "OP")
  642. {
  643. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: OP #canal nick\n";
  644. print $envia ":$nick_chan PRIVMSG $_[0] : \n";
  645. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: Convierte en Operador al usuario indicado en el canal indicado. \n";
  646. print $envia ":$nick_chan PRIVMSG $_[0] :Por defecto, está limitado a quienes posean nivel 5 o mayor en el canal.\n";
  647. }
  648. if ($_[2] eq "DEOP")
  649. {
  650. print $envia ":$nick_chan PRIVMSG $_[0] :Sintaxis: DEOP #canal nick\n";
  651. print $envia ":$nick_chan PRIVMSG $_[0] :Uso: Quita el estado de Operador (@) al usuario indicado en el canal indicado. \n";
  652. print $envia ":$nick_chan PRIVMSG $_[0] :Tan solo puede usarse sobre nicks con un nivel en el canal inferior al del nick \n";
  653. print $envia ":$nick_chan PRIVMSG $_[0] :que ejecuta el comando.\n";
  654. }
  655. }
  656.  
  657. #creg todas las funciones
  658.  
  659. sub creg
  660. {
  661. if ($_[1] eq "REGISTER")
  662. {
  663. my $canal = $_[2];
  664. my $pass = $_[3];
  665. my $descripcion = $_[4];
  666. my $nick_register_creg = $_[0];
  667. &creg_register("$nick_register_creg","$_[1]","$canal","$pass","$descripcion");
  668. }
  669. elsif ($_[1] eq "HELP")
  670. {
  671. &creg_help("$_[0]","$_[2]");
  672. }
  673. elsif ($_[1] eq "LIST")
  674. {
  675. &creg_list("$_[0]","$_[2]");
  676. }
  677. elsif ($_[1] eq "ACEPTA")
  678. {
  679. &creg_acepta("$_[0]","$_[2]");
  680. }
  681. }
  682.  
  683. sub creg_acepta
  684. {
  685. my($elnick);
  686. my($elcanal);
  687. $elnick = $_[0];
  688. $elcanal = $_[1];
  689. my($mira_cregacepta);
  690. my(@mira_creglist);
  691. my($mira_datos_creglist);
  692. my(@cregacepta_separa);
  693. my ($com_cregacepta);
  694. $com_cregacepta = "no";
  695. $mira_cregacepta = exists($ircop{$elnick});
  696. if ($mira_cregacepta == 1)
  697. {
  698. open(cregmira,"<register.txt");
  699. @mira_creglist =<cregmira>;
  700. foreach $mira_datos_creglist(@mira_creglist)
  701. {
  702. @cregacepta_separa = split(" ",$mira_datos_creglist);
  703. if ($cregacepta_separa[0] eq $elcanal)
  704. {
  705. close(cregmira);
  706. open(cregacepta,">$elcanal.txt");
  707. print cregacepta "CANAL $elcanal \n";
  708. print cregacepta "PASS $cregacepta_separa[1] \n";
  709. print cregacepta "FUNDER $cregacepta_separa[2] \n";
  710. print cregacepta "DESCRIPCION $cregacepta_separa[3]\n";
  711. print cregacepta "TOPIC $cregacepta_separa[3] \n";
  712. print cregacepta "MODO rnt \n";
  713. print cregacepta "\n";
  714. print cregacepta "AKICK \n";
  715. print cregacepta "\n";
  716. print cregacepta "ACCESS \n";
  717. print cregacepta "$elnick 501\n";
  718. close(cregacepta);
  719. $com_cregacepta = "si";
  720. print $envia ":$nick_creg PRIVMSG $elnick :Canal registrado con exito \n";
  721. print $envia ":$nick_creg JOIN $elcanal \n";
  722. print $envia ":$nick_creg MODE $elcanal +rnt \n";
  723. print $envia ":$nick_creg PART $elcanal \n";
  724. }
  725. }
  726. &creg_borra_register($elcanal);
  727. if ($com_cregacepta ne "si")
  728. {
  729. &error("$elnick","error_creg_acepta","$elcanal")
  730. }
  731. }
  732.  
  733.  
  734. }
  735.  
  736. sub creg_borra_register
  737. {
  738. my (@registros,@new_registros);
  739.  
  740. open (DATABASE, "<register.txt") || &error('abrir','archivo');
  741. flock (DATABASE,1)||&error('lock','file');
  742. @registros = <DATABASE>;
  743. close (DATABASE) || &error('cerrar','archivo');
  744. foreach $registro (@registros)
  745. {
  746. $registro =~ s/\n//g;
  747. my(@borra_datos_register) = split(" ",$registro);
  748. if ($borra_datos_register[0] != $_[0])
  749. {
  750. push (@new_registros,$registro);
  751. }
  752. }
  753. open (DATABASE, ">register.txt") || &error('abrir','archivo');
  754. flock (DATABASE,2)||&error('lock','file');
  755. foreach $new_registro (@new_registros)
  756. {
  757. print DATABASE "$new_registro\n";
  758. }
  759. close (DATABASE) || &error('cerrar','archivo');
  760. }
  761.  
  762.  
  763.  
  764. sub creg_list
  765. {
  766. my($mira_list);
  767. my(@creg_list);
  768. my ($datos_creg_list);
  769. $mira_list = exists($ircop{$_[0]});
  770. if ($mira_list == 1)
  771. {
  772. open(creglist,"<register.txt");
  773. @creg_list =<creglist>;
  774. foreach $datos_creg_list(@creg_list)
  775. {
  776. @separa_list_creg = split(" ",$datos_creg_list);
  777. print $envia ":$nick_creg PRIVMSG $_[0] :Lista de canales a la espera de aceptar registro : \n";
  778. print $envia ":$nick_creg PRIVMSG $_[0] : \n";
  779. print $envia ":$nick_creg PRIVMSG $_[0] :Nombre del canal: $separa_list_creg[0] \n";
  780. print $envia ":$nick_creg PRIVMSG $_[0] :Descripcion: $separa_list_creg[3]\n";
  781. print $envia ":$nick_creg PRIVMSG $_[0] :Nick que lo registra: $separa_list_creg[2]\n";
  782. }
  783. }
  784. close(creglist);
  785. }
  786.  
  787. sub creg_register
  788. {
  789. my($lee_register_temp);
  790. my(@register_mira);
  791. my($comprueba);
  792. $comprueba = "no";
  793. my(@creg_register);
  794. open(leecreg,"<register.txt");
  795. @creg_register =<leecreg>;
  796. foreach $lee_register_temp(@creg_register)
  797. {
  798. @register_mira = split(" ",$lee_register_temp);
  799. if ($register_mira[0] eq $_[2])
  800. {
  801. &error("$_[0]","error_canal_registrado","$_[2]");
  802. $comprueba = "si";
  803. close(leecreg);
  804. }
  805. }
  806. if ($comprueba eq "no")
  807. {
  808. open(leecreg,">>register.txt");
  809. print leecreg "$_[2] $_[3] $_[0] $_[4] \n";
  810. close(leecreg);
  811. print $envia ":$nick_creg PRIVMSG $_[0] :El canal $_[2] esta a la espera de ser aceptado,bajo el nick de $_[0] y la contraseña $_[3] ,gracias \n"
  812. }
  813. }
  814.  
  815.  
  816. #funciones de error
  817. sub error
  818. {
  819. if ($_[1] eq "error_canal_registrado")
  820. {
  821. print $envia ":$nick_creg PRIVMSG $_[0] :Lo sentimos, el canal $_[2] ya estaba registrado \n"
  822. }
  823. if ($_[1] eq "error_creg_acepta")
  824. {
  825. print $envia ":$nick_creg PRIVMSG $_[0] :ERROR: El canal $_[2] no esta a la espera de ser aceptado \n";
  826. }
  827. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement