En respuesta a
Veamos esta explicación es para los que en verdad quieren aprender primeramente y resumidamente.....
1.- NO EXISTE $CHAN en el evento on :NICK: (si no existe entonces no se puede especificar el canal con el identificador)
2.- Hacer un método para la extracción de los canales en común y verificar si en esos canales se cuenta con op
en conclusión lo de:
on *:nick:{
if ($newnick ison $chan) { $BaneaUsuarios($newnick) }
}
No funcionara por que REPITO
no existe el identificador $chan en el evento ON :NICK:como mencione debemos usar
$comchan --> Este identificador nos permite ver los canales en comun, esta en el manual de ayuda en identificadores, resumiendo funciona asi:
$comchan(nick,0) = devuelve la cantidad de canales en común
$comchan(nick,N) = muestra el canal
N listado, es decir si tenemos como canal
4 #navarra, nos los pondrá si ponemos a
N como
4, y así sucesivamente.
La solución es por medio de un while teniendo una variable de conteo como control en este caso seria el valor de 1 y no de 0
la razón es muy sencilla, si se hace un while con decremento al usar en su asignación
$comchan(nick,0) no ciclaria y nos congelara al ejecutarse, a menos que se usen dos variables o doble if de control. En mi caso particular deseo tenerlo asi:
//var %a 1 | while ($comchan(quetzalcoatl, %a)) { echo -s $v1 | inc %a }
con eso nos regresa los canales compatibles, pero si lo agregamos por medio de un remoto reemplazamos por
$nick, ya que se usara en un evento
on :nick: se usara
$newnickquedando como:
var %a 1 | while ($comchan($newnick, %a)) { echo -s $v1 | inc %a }
siendo que en el código original se usa:
on *:nick:{
if ($newnick ison $chan) { $BaneaUsuarios($newnick) }
}
nos quedaría algo como:
on *:nick:{
var %a 1 | while ($comchan($newnick, %a)) { $BaneaUsuarios($newnick,$v1) | inc %a }
}
donde agregaríamos el
$v1 para especificar el canal en el alias de BaneaUsuarios, el cual debe ser modificado para poder especificar el canal, ya que repito
no existe el identificador $chan en el evento ON :NICK:, notese que no he usado el isop, ya que ese puede ser usado en el alias principal.
quedándonos la parte del evento como:
ban -u1800 $2 $1 $+ !*@* | kick $2 $1 Nick inapropiado. Cambiatelo para entrar. | msg #cogotazos 1[BN %bannick $+ ] Expulsando 1 $1 ( $address($1,2) ) por: Nick inapropiado.
agregando
$2 como el canal, por el evento del cambio de nick por lo tanto en el evento on join deberá agregarse como segundo parametro el canal, ya que se modificara el alias de BaneaUsuarios.
en conclusión el código completo quedaría como:
ON 99:TEXT:*:?: {
tokenize 32 $strip($1-)
if (.addnick == $1) {
msg $nick Añadido $2 en la lista de nicks prohibidos.
write nicks.txt $2
}
else if (.delnick == $1) {
msg $nick Borrado $2 de la lista de nicks prohibidos.
write -ds $+ $2 nicks.txt
}
else if (.addex == $1) {
msg $nick Añadido $2 en la lista de nicks en excepción.
write nicks-exceptuados.txt $2
}
else if (.delex == $1) {
msg $nick Borrado $2 de la lista de nicks en excepcion.
write -ds $+ $2 nicks-exceptuados.txt
}
}
on 1:join:#: {
$BaneaUsuarios($nick,$chan)
}
on *:nick:{
var %a 1 | while ($comchan($newnick, %a)) { $BaneaUsuarios($newnick,$v1) | inc %a }
}
alias BaneaUsuarios {
var %cuentaNicks = 1
while (%cuentaNicks <= $lines(nicks.txt)) {
if ($read(nicks.txt,%cuentaNicks) isin $1) || ($read(nicks.txt,%cuentaNicks) iswm $1) {
var %cuentaExcepciones = 1
while (%cuentaExcepciones <= $lines(nicks-exceptuados.txt)) {
if ($read(nicks-exceptuados.txt,%cuentaExcepciones) isin $1) || ($read(nicks-exceptuados.txt,%cuentaExcepciones) iswm $1) {
halt
}
inc %cuentaExcepciones
}
ban -u1800 $2 $1 $+ !*@* | kick $2 $1 Nick inapropiado. Cambiatelo para entrar. | msg #cogotazos 1[BN %bannick $+ ] Expulsando 1 $1 ( $address($1,2) ) por: Nick inapropiado.
halt
}
inc %cuentaNicks
}
}
Posdata: En el mirc cuenta con su propio manual de ayuda para acceder a el se usa /help o presionando la tecla de F1, No estaría mal darle una ojeada si es que algún identificador o manejo de procesos se cuenta con una duda.