Identificatori e funzioni

Gli identificatori ($qualcosa) vengono sostituiti col loro valore prima che una riga di script (o un comando digitato con //) venga eseguita.

Argomenti

IdentificatoreValore
$1 ... $9Gli argomenti passati al comando/alias.
$0Quanti argomenti sono stati passati.
$N-Da N in poi, es. $2-.
$N-MUn intervallo, es. $2-4.
%variabileIl valore di una variabile impostata con set (vedi Scripting).

Contesto (chi/dove/cosa)

IdentificatoreValore
$nickChi ha scritto/cliccato (o, nei popup nicklist, il nick su cui hai fatto click destro).
$chanIl nome del canale/gruppo per gli eventi di canale, vuoto per chat private/Status.
$networkLa rete della finestra corrente (telegram o whatsapp).
$meIl tuo nome.
$eventIl nome dell'evento in corso - utile se più "on" condividono lo stesso alias/codice.

Media (aggiunta nostra - IRC non ha allegati)

IdentificatoreValore
$mediatypeDentro "on message": photo/video/audio/document/sticker se il messaggio ha un allegato, vuoto se è solo testo.
$filenameNome file per i documenti, vuoto altrimenti.

Notifiche (aggiunta nostra)

IdentificatoreValore
$noticetypeDentro "on notice": distingue il tipo di notifica sintetica. Vedi Notifiche ed eventi di sistema per l'elenco completo dei valori.

Percorsi (come nel vero mIRC)

IdentificatoreEquivalente mIRCValore
$yoakedir$mircdirLa cartella dati dell'applicazione.
$yoakeexe$mircexeIl percorso dell'eseguibile.
$yoakeini$mirciniIl percorso completo di Yoake.ini.
$scriptdir$scriptdirLa cartella degli script (userData/scripts/).
$script$scriptPercorso completo del file .ini da cui viene l'alias/evento/popup in esecuzione (aliases.ini/remote.ini/popups.ini).
$logdir$logdirLa cartella log (userData/logs/).

Costanti (identificatori nudi, come nel vero mIRC)

IdentificatoreValore
$true / $false1 / 0 - usabili in confronti, es. if ($isnum(%x) == $true).
$nullSempre vuoto.
$cr / $lf / $crlfRitorno a capo (carriage return / line feed / entrambi insieme).
$dateData corrente.
$timeOra corrente.
$ctime / $gmtSecondi trascorsi dal 1° gennaio 1970 (epoch) - solo la forma senza parametri: $ctime(testo) per convertire una data scritta a mano non è supportato.
$fulldateData e ora completa in un'unica stringa.
$feof1/0 a seconda che l'ultima $fread()/$fgetc() eseguita in QUALSIASI script abbia raggiunto la fine del file (come nel vero mIRC, non è per singolo handle).
$ferr1/0 a seconda che l'ultima operazione su file (fopen/fwrite/$fread/$fgetc) eseguita in QUALSIASI script sia fallita.
$socknameDentro on sockopen/on sockread/on sockclose: il nome del socket che ha generato l'evento. Vuoto altrove.
$sockerrIl messaggio dell'ultimo errore di rete (connessione fallita, chiusa dall'altra parte, ecc.), vuoto se nessun errore.
$sockbrByte letti dall'ultimo sockread - 0 quando non c'è più niente da leggere nel buffer (segnale per uscire dal ciclo di lettura).

Manipolazione token

Un "token" è un pezzo di testo separato da un carattere scelto da te (di solito uno spazio) - queste funzioni dividono/ricompongono liste di questo tipo. Come nel vero mIRC, il separatore C è sempre un codice ASCII (es. 32=spazio, 46=punto), non il carattere stesso - assente, vale spazio.

FunzioneCosa fa
$gettok(testo,N,C)L'N-esimo token, o un intervallo "N-M" (anche negativi, contano dalla fine; "N-" = da N in poi).
$numtok(testo,C)Quanti token ci sono.
$findtok(testo,token,N,C)Posizione dell'N-esima occorrenza (case-insensitive). N=0 = quante volte occorre.
$istok(testo,token,C)1/0 a seconda che il token esista (case-insensitive).
$matchtok(testo,sottostringa,N,C)N-esimo token che CONTIENE sottostringa (case-insensitive). N=0 = quanti la contengono.
$wildtok(testo,wildcard,N,C)N-esimo token che soddisfa un pattern con */? (case-insensitive). N=0 = quanti la soddisfano.
$addtok(testo,token,C)Aggiunge in fondo, solo se non già presente (confronto case-insensitive).
$instok(testo,token,N,C)Inserisce alla posizione N, anche se già presente altrove.
$puttok(testo,token,N,C)Sovrascrive l'N-esimo token.
$deltok(testo,N,C)Elimina l'N-esimo token (o l'intervallo "N-M").
$remtok(testo,token,N,C)Rimuove l'N-esima occorrenza di token (case-insensitive, N=0 = tutte).
$reptok(testo,token,nuovo,N,C)Sostituisce l'N-esima occorrenza di token con "nuovo" (case-insensitive, N=0 = tutte).
$sorttok(testo,C,ncra)Ordina i token: default alfabetico case-insensitive, n=numerico, r=inverso.

Le funzioni che confrontano il CONTENUTO di un token (non solo la posizione) hanno anche una variante ...cs (case-sensitive), stessi parametri: $addtokcs, $findtokcs, $istokcs, $matchtokcs, $remtokcs, $reptokcs, $sorttokcs, $wildtokcs. $gettok/$deltok/$instok/ $numtok/$puttok non hanno una variante cs perché lavorano solo per posizione, il maiuscolo/minuscolo non li riguarda.

$gettok(a.b.c.d.e,3,46)      ; c
$gettok(a.b.c.d.e,2-,46)     ; b.c.d.e
$addtok(a.b.c,d,46)          ; a.b.c.d
$deltok(a.b.c.d,2-3,46)      ; a.d
$istok(a.B.c,b,46)           ; 1 (case-insensitive: B conta come b)
$istokcs(a.B.c,b,46)         ; 0 (case-sensitive: B non è b)
$gettok esisteva già ma con un separatore a stringa letterale invece che a codice ASCII - se avevi script che lo usavano, vanno aggiornati al nuovo formato (es. $gettok(%x,2,44) invece di $gettok(%x,2,",")).

Data/ora con parametri, matematica, validazione

FunzioneCosa fa
$duration(secondi,N)Formato leggibile "1w 2d 3h 4m 5s". N=2 senza i secondi, N=3 formato hh:nn:ss.
$iif(condizione,T,F)Il ternario: se condizione è vera restituisce T (o "1" se assente), altrimenti F (o vuoto se assente).
$str(testo,N)Ripete testo N volte.
$strip(testo)Rimuove i codici di formattazione (grassetto/sottolineato/colore/ecc.) - vedi la sezione "Codici di controllo" per come inserirli.
$isnum(testo)1/0 a seconda che sia un numero.
$isupper(testo) / $islower(testo)1/0 a seconda che sia tutto maiuscolo/minuscolo.
$eval(testo,N)Rivaluta testo (identificatori/%variabili) N volte in più (default 1) - utile per riferimenti indiretti.
$abs(N)Valore assoluto.
$round(N,D)Arrotonda N a D cifre decimali (default 0).
$floor(N) / $ceil(N) / $int(N)Arrotonda per difetto/eccesso/tronca.
$min(...) / $max(...)Minimo/massimo di una lista di numeri (separati da virgola o spazio).

File e hash

Versione semplificata rispetto al vero mIRC (che ha molti più switch/opzioni per ognuna di queste).

FunzioneCosa fa
$exists(percorso)1/0 a seconda che il file o la cartella esista.
$isfile(percorso) / $isdir(percorso)1/0 a seconda che sia un file/una cartella.
$read(file[,N])Una riga a caso dal file, o la riga N (1-based) se indicato. Non supporta gli switch di ricerca per testo/wildcard del vero mIRC.
$md5(testo) / $sha1(testo)Hash MD5/SHA1 del testo.
$fread(handle)La riga successiva (fino al prossimo a-capo) dell'handle aperto con fopen, avanzando il punto di lettura. Vuoto se non c'è altro da leggere (vedi $feof).
$fgetc(handle)Il carattere successivo dell'handle, avanzando di 1. Vuoto a fine file.

Vedi anche Comandi per fopen/fclose/fwrite, e le costanti $feof/$ferr qui sopra.

Variabili binarie (Binary Files)

Versione semplificata rispetto al vero mIRC. Vedi Comandi per bread/ bwrite/bset/bunset/bcopy/breplace/btrunc, che creano e modificano le variabili binarie &nome lette da queste funzioni.

FunzioneCosa fa
$bvar(&binvar,N,M)M valori ascii (separati da spazio) a partire dal byte N (1-based). $bvar(&binvar,0) (o N assente) restituisce invece la lunghezza della variabile.
$bfind(&binvar,N,M)Posizione (1-based) della prima occorrenza di M a partire dal byte N; 0 se non trovato. M può essere un valore ascii singolo (es. 32), una sequenza di valori ascii separati da spazio (es. 87 65 86), o del testo semplice (ricerca case-insensitive).
bset &v 1 72 101 108 108 111    ; &v = "Hello" in byte
$bvar(&v,1,5)                   ; 72 101 108 108 111
$bfind(&v,1,101)                ; 2 (posizione della "e")
$bfind(&v,1,ello)               ; 2
Le dot-properties del vero mIRC (.text/.textcs/.regex su $bfind, .text/.word/.nword/.long/.nlong su $bvar) non sono supportate - qui $bvar restituisce sempre valori ascii separati da spazio, non testo o numeri a più byte con un ordine specifico.

Socket (Sockets)

Vedi Comandi per sockopen/sockwrite/sockread/ sockclose/sockmark, e le costanti $sockname/$sockerr/ $sockbr qui sopra.

FunzioneCosa fa
$sock(name).markL'etichetta impostata con sockmark, vuota se non impostata.
$sock(name).ipL'indirizzo a cui è connesso (quello passato a sockopen).
$sock(name).portLa porta a cui è connesso.
$sock(name).connected1/0 a seconda che sia attualmente connesso.
$sock(name).listening1/0 a seconda che name sia un listener aperto con socklisten (invece di un socket connesso).
$sock(name).ssl1/0 a seconda che sia una connessione TLS (aperta con sockopen -e).
$sock(name) (senza proprietà)Il nome stesso, se il socket esiste; vuoto altrimenti - utile per un controllo rapido tipo if ($sock(nome)) { ... }.
Versione ridotta rispetto al vero mIRC: mancano .sent/.rcvd/.sq/ .rq/.to/.type (oltre "tcp" fisso)/.wserr/.wsmsg e la ricerca per wildcard/indice N ($sock(name,N)) - qui name è sempre un nome esatto.

Funzioni di testo/numeri

FunzioneCosa fa
$len(testo)Lunghezza del testo.
$upper(testo) / $lower(testo)Maiuscolo/minuscolo.
$left(testo,N)Primi N caratteri da sinistra. N negativo = tutti tranne gli ultimi N.
$right(testo,N)Ultimi N caratteri da destra. N negativo = tutti tranne i primi N.
$mid(testo,inizio[,lunghezza])"lunghezza" caratteri a partire da "inizio" (1-based). Senza "lunghezza" (o con 0): fino alla fine.
$pos(testo,sottostringa[,N])Posizione (1-based) della N-esima occorrenza di "sottostringa" in "testo", case-insensitive. Senza N (o con 0): quante volte occorre in tutto. Vuoto se non trovata.
$replace(testo,da,a[,da2,a2,...])Sostituisce tutte le occorrenze, case-insensitive. Accetta più coppie da/a in sequenza, come nel vero mIRC.
$chr(N)Il carattere con codice ASCII N, es. $chr(32) = spazio.
$asc(C)Il codice ASCII del carattere C.
$+(a,b,c,...)Unisce più elementi senza spazi.
$rand(min,max)Numero casuale tra min e max.
$calc(espressione)Calcola un'espressione aritmetica.
$nick(N)N-esimo partecipante (1-based) della nicklist della finestra corrente; $nick(0) restituisce il totale.
$input(testo,tipo,titolo,default)Apre una finestra di richiesta testo davvero bloccante (vedi nota sotto) e restituisce quanto digitato, o $null se annullato.
$input() è diverso da $dialog()//dialog -m (che NON bloccano davvero, vedi Dialogs): qui usiamo window.prompt()/window.confirm() del browser, le uniche funzioni realmente bloccanti a disposizione - lo script si ferma per davvero finché non rispondi, esattamente come nel vero mIRC, quindi var %x = $input(...) seguito da un if sulla riga dopo funziona. La contropartita è l'aspetto: è la finestra nativa del sistema/browser, non lo stile mIRC dell'app - le icone i/w/q del vero mIRC sono ignorate (nessun controllo sull'icona di una prompt()/confirm() nativa). Se tipo contiene e appare una casella di testo (con default come valore iniziale); se contiene y o n è una domanda sì/no (yes/no); altrimenti è un OK/Annulla semplice.
alias cambianick {
  var %nuovonick = $input(Inserisci il nuovo nickname:, e, Cambia Nickname, $me)
  if (%nuovonick != $null) {
    /nick %nuovonick
  }
}

; /away è un comando vero (vedi sezione "Away/idle" sotto) - l'avviso a chi
; ti scrive mentre sei via lo manda già l'app da sola, non serve scriverlo:
alias setaway {
  var %frase = $input(Frase da mostrare se ti scrivono mentre sei via:, e, Imposta Away)
  if (%frase != $null) {
    away %frase
  }
}
set %i 1
while (%i <= $nick(0)) {
  echo $nick(%i)
  inc %i
}

echo $+(Ciao, ,$nick,!)   ; niente spazi indesiderati tra i pezzi
Gli identificatori legati ai media/notifiche/percorsi Yoake-specifici sono aggiunte nostre: IRC (e quindi il vero mIRC) non ha allegati, sotto-tipi di NOTICE, o un secondo nome di prodotto da distinguere. Tutto il resto di questa pagina (token, data/ora, matematica, file, hash, testo) segue invece la documentazione ufficiale mIRC il più fedelmente possibile - identificatori legati a IRC/DCC/Windows senza un vero equivalente qui (liste di ban, canali/modalità IRC, editbox/clipboard di Windows, DDE, ecc.) non sono stati replicati.

Vedi anche Dialogs per $did()/$dialog()/$didtok()/ $didwm()/$didreg()/$dbuw/$dbuh, e i comandi /dialog//did//didtok; e Custom Windows per $window()/$line()/$fline()/$flinen, e i comandi /window//aline//cline//dline//iline//rline/ /sline//renwin.

Window Identifiers

Dalla documentazione ufficiale mIRC (window_identifiers.html): qui è stato implementato solo il sottoinsieme che ha un vero equivalente in questa app. Non esistono i concetti di DCC chat separata, file server, "finestra query unica" ($compact), modalità a schermo intero ($fullscreen) o stato dell'applicazione ($appactive/$appstate) - quindi $chat(), $compact, $dqwindow, $fserve(), $fullscreen, $appactive, $appstate, $lactive e $lactivewid non sono stati replicati.

IdentificatoreDescrizione
$activeIl titolo della finestra attiva (quella in primo piano).
$activewidL'id interno della finestra attiva.
$widL'id della finestra in cui gira lo script corrente (non necessariamente quella attiva sullo schermo).
$chan(N) / $chan(#nome)N-esimo gruppo/canale aperto (1-based), o quello con quel nome; $chan(0) restituisce il totale. Solo gruppi/canali, non query/status.
$chan(N).topicIn questa app coincide col titolo del gruppo (Telegram/WhatsApp non hanno un campo topic separato, vedi /topic).
$chan(N).widL'id interno di quel gruppo/canale.
$query(N) / $query(nick)N-esima chat privata aperta (1-based), o quella con quel nick; $query(0) restituisce il totale.
$query(N).widL'id interno di quella chat privata.
$send(N) / $send(nick)Il trasferimento /dcc send in corso, se c'è (qui uno solo alla volta, non una vera coda come nel vero mIRC); $send(0) restituisce 1/0 invece del conteggio di una coda.
$send(N).file / .size / .pc / .statusNome file, dimensione, percentuale completata, stato testuale del trasferimento.
$msg(canale,N)L'N-esimo messaggio già caricato di quel canale/gruppo/query (nome con o senza # davanti, o l'id finestra); $msg(canale,0) (o senza N) restituisce il totale. Testo del messaggio se usato senza dot-property.
$msg(canale,N).idL'id del messaggio - serve a /playmedia per aprirlo.
$msg(canale,N).typeIl tipo di media del messaggio (video/photo/ecc, come $mediatype), vuoto se è solo testo.
$msg(canale,N).senderChi ha scritto quel messaggio.
echo Finestra attiva: $active ($activewid) - sono in $wid
echo Gruppi aperti: $chan(0)
if ($chan(0) > 0) echo Il primo è $chan(1), id $chan(1).wid
echo Chat private aperte: $query(0)
if ($send(0) == 1) echo Invio in corso: $send(1).file al $send(1).pc%
echo Messaggi caricati in #canale: $msg(#canale,0)
if ($msg(#canale,3).type == video) echo Il terzo messaggio è un video, id $msg(#canale,3).id
$msg() è una possibilità che il vero mIRC non ha mai avuto: nel vero mIRC, $line (e i comandi che leggono/modificano riga per riga, /aline//cline/ /dline//iline//rline) funzionano SOLO sulle finestre custom (quelle con la @ davanti) - è una limitazione nota e documentata, mai tolta nonostante sia stata richiesta più volte sul forum ufficiale: un vero canale IRC è puro testo, senza nessuna struttura dati da interrogare. Qui invece i messaggi sono già salvati in modo strutturato (con tipo di media, mittente, id), quindi $msg() può leggerli anche per una chat/canale vero, non solo per le finestre custom. Vedi /playmedia e l'evento on videoend in Comandi/Scripting per un esempio di playlist video automatica costruita con questo identificatore.

Codici di controllo (grassetto, colore, sottolineato...)

Gli stessi codici di controllo del vero mIRC, inseribili con $chr(N) dentro qualunque testo (messaggi, comandi say/echo, righe di Custom Window). Vengono visualizzati davvero in modalità testo semplice (MESSAGE_FORMAT=text nelle Opzioni) - in modalità HTML non si applicano, quella modalità usa la formattazione nativa di Telegram/WhatsApp, un sistema diverso e non correlato.

CodiceEffetto
$chr(2)Grassetto - attiva/disattiva (scrivilo due volte intorno al testo).
$chr(31)Sottolineato - stesso schema.
$chr(29)Corsivo - stesso schema.
$chr(22)Inverso (scambia colore testo/sfondo) - stesso schema.
$chr(3)NN[,MM]Colore: NN = testo (0-15, palette standard mIRC), MM = sfondo opzionale. $chr(3) da solo azzera il colore.
$chr(15)Azzera tutto (grassetto/sottolineato/corsivo/inverso/colore) in un colpo solo.
say $chr(2)Attenzione!$chr(2) Questo è $chr(3)4rosso$chr(15) e questo $chr(31)sottolineato$chr(31).

Ctrl+K (come nel vero mIRC): apre una tavolozza dei 16 colori direttamente nella casella di testo di qualunque finestra - clicca un colore per inserirlo alla posizione del cursore, senza dover scrivere $chr(3) a mano. Solo il colore di primo piano (il vero mIRC permette anche lo sfondo con un secondo click); per lo sfondo si può comunque scrivere ,MM subito dopo a mano.

Away / idle

IdentificatoreValore
$away1 se sei in away (vedi /away in Comandi), 0 altrimenti.
$awaymsgIl messaggio di away corrente, vuoto se non sei away.
$awaytimeDa quando sei away, in secondi Unix (come $ctime) - non un conto alla rovescia.
$idleSecondi dall'ultimo tasto premuto in una casella di testo dell'app - identico al vero mIRC (dal 1996): non è un rilevamento di sistema operativo "lontano dal PC", conta solo l'attività dentro il client.
Il vero mIRC non ha un timer automatico dentro /away stesso ("torna online da solo dopo N minuti") - chi lo vuole se lo scrive con uno script che controlla $idle periodicamente, esattamente come qui sotto. Un vero server IRC avvisa da solo chi ti scrive quando sei away (risposta automatica del server); Telegram/WhatsApp non hanno niente di simile, quindi qui è l'app stessa a mandare il messaggio di away al posto del server - una volta sola per chat privata, mai nei gruppi (vedi /away in Comandi).
; auto-away dopo 10 minuti di inattività, controllato ogni 60 secondi
on start { timer99 0 60 { if ($idle >= 600) && (!$away) { away Assente da un po', torno presto } } }

Altri identificatori

IdentificatoreValore
$versionLa versione di Yoake in uso (da package.json).
$isalias(nome)1 se esiste un alias con quel nome, 0 altrimenti - utile per controlli difensivi prima di sovrascriverlo/chiamarlo.
$titlebarIl testo impostato con /titlebar (senza il prefisso "Yoake -"), vuoto se non impostato.
$ignore(N/nick)N-esimo nick ignorato (1-based, $ignore(0) il totale), o il nick stesso se lo passi per nome ed è ignorato. Le dot-property .type/.secs del vero mIRC (flag di ignore, scadenza automatica) restituiscono sempre vuoto - il nostro /ignore è un mute semplice, senza flag né scadenza.
$count(testo,sub,...) / $countcs(...)Quante volte ciascuna delle substring compare in testo, sommate. cs = case-sensitive.
$remove(testo,sub,...) / $removecs(...)Rimuove tutte le occorrenze delle substring indicate. cs = case-sensitive.
$bytes(N)Dimensione leggibile (es. 1.5 KB, 2 MB).
$nofile(percorso)Solo la cartella, senza il nome del file.
$nopath(percorso)Solo il nome del file, senza la cartella.
$asctime(N,formato) / $asctime(formato) / $asctime(N)Converte un valore $ctime (o l'ora corrente, se N non è indicato) in testo leggibile. Token di formato supportati: yyyy yy mmmm mmm mm dddd ddd dd HH hh nn ss tt TT (sottoinsieme dei token ufficiali - quelli per il fuso orario e le forme a una cifra non sono supportati). Senza formato, un default nostro leggibile (non garantito identico byte-per-byte al vero mIRC, che non ne documenta il formato esatto).
$mediadirCartella dove va a finire "Salva nella cartella predefinita" dal tasto destro su una foto/video aperti - vedi /mediadir in Comandi. Nostra aggiunta: il vero mIRC non ha un identificatore per questo, solo un'impostazione nella finestra Options.
echo $count(hello world hello,hello) occorrenze di "hello"
echo $bytes($nick(0))                 ; ovviamente senza senso, solo per l'esempio
echo Oggi è il $asctime(dd/mm/yyyy) alle $asctime(hh:nn:ss)
echo File: $nopath(%percorso) in $nofile(%percorso)
La pagina ufficiale "Other Identifiers" del vero mIRC elenca molti altri identificatori legati a funzionalità senza equivalente qui: connessione a un vero server IRC ($network esiste già ma semplificato, $server, $status, $ssl*...), DCC ($dccport, $passivedcc...), dialoghi/impostazioni di Windows ($isadmin, $darkmode, $lock...). Non replicati per lo stesso motivo di sempre: non esiste il concetto a cui si riferiscono in questa app. Lo stesso vale per le pagine "File and Directory", "Nick and Address" e "Time and Date" del vero mIRC: la maggior parte riguarda liste ban IRC, indirizzi hostmask, dialoghi di scelta file nativi di Windows o funzionalità legate a un vero log su file - nessun equivalente qui.