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
| Identificatore | Valore |
$1 ... $9 | Gli argomenti passati al comando/alias. |
$0 | Quanti argomenti sono stati passati. |
$N- | Da N in poi, es. $2-. |
$N-M | Un intervallo, es. $2-4. |
%variabile | Il valore di una variabile impostata con set (vedi Scripting). |
Contesto (chi/dove/cosa)
| Identificatore | Valore |
$nick | Chi ha scritto/cliccato (o, nei popup nicklist, il nick su cui hai fatto click destro). |
$chan | Il nome del canale/gruppo per gli eventi di canale, vuoto per chat private/Status. |
$network | La rete della finestra corrente (telegram o whatsapp). |
$me | Il tuo nome. |
$event | Il nome dell'evento in corso - utile se più "on" condividono lo stesso alias/codice. |
Media (aggiunta nostra - IRC non ha allegati)
| Identificatore | Valore |
$mediatype | Dentro "on message": photo/video/audio/document/sticker se il messaggio ha un allegato, vuoto se è solo testo. |
$filename | Nome file per i documenti, vuoto altrimenti. |
Notifiche (aggiunta nostra)
| Identificatore | Valore |
$noticetype | Dentro "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)
| Identificatore | Equivalente mIRC | Valore |
$yoakedir | $mircdir | La cartella dati dell'applicazione. |
$yoakeexe | $mircexe | Il percorso dell'eseguibile. |
$yoakeini | $mircini | Il percorso completo di Yoake.ini. |
$scriptdir | $scriptdir | La cartella degli script (userData/scripts/). |
$script | $script | Percorso completo del file .ini da cui viene l'alias/evento/popup in esecuzione (aliases.ini/remote.ini/popups.ini). |
$logdir | $logdir | La cartella log (userData/logs/). |
Costanti (identificatori nudi, come nel vero mIRC)
| Identificatore | Valore |
$true / $false | 1 / 0 - usabili in confronti, es. if ($isnum(%x) == $true). |
$null | Sempre vuoto. |
$cr / $lf / $crlf | Ritorno a capo (carriage return / line feed / entrambi insieme). |
$date | Data corrente. |
$time | Ora corrente. |
$ctime / $gmt | Secondi trascorsi dal 1° gennaio 1970 (epoch) - solo la forma senza parametri: $ctime(testo) per convertire una data scritta a mano non è supportato. |
$fulldate | Data e ora completa in un'unica stringa. |
$feof | 1/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). |
$ferr | 1/0 a seconda che l'ultima operazione su file (fopen/fwrite/$fread/$fgetc) eseguita in QUALSIASI script sia fallita. |
$sockname | Dentro on sockopen/on sockread/on sockclose: il nome del socket che ha generato l'evento. Vuoto altrove. |
$sockerr | Il messaggio dell'ultimo errore di rete (connessione fallita, chiusa dall'altra parte, ecc.), vuoto se nessun errore. |
$sockbr | Byte 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.
| Funzione | Cosa 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
| Funzione | Cosa 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).
| Funzione | Cosa 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.
| Funzione | Cosa 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.
| Funzione | Cosa fa |
$sock(name).mark | L'etichetta impostata con sockmark, vuota se non impostata. |
$sock(name).ip | L'indirizzo a cui è connesso (quello passato a sockopen). |
$sock(name).port | La porta a cui è connesso. |
$sock(name).connected | 1/0 a seconda che sia attualmente connesso. |
$sock(name).listening | 1/0 a seconda che name sia un listener aperto con socklisten (invece di un socket connesso). |
$sock(name).ssl | 1/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
| Funzione | Cosa 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.
| Identificatore | Descrizione |
$active | Il titolo della finestra attiva (quella in primo piano). |
$activewid | L'id interno della finestra attiva. |
$wid | L'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).topic | In questa app coincide col titolo del gruppo (Telegram/WhatsApp non hanno un campo topic separato, vedi /topic). |
$chan(N).wid | L'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).wid | L'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 / .status | Nome 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).id | L'id del messaggio - serve a /playmedia per aprirlo. |
$msg(canale,N).type | Il tipo di media del messaggio (video/photo/ecc, come $mediatype), vuoto se è solo testo. |
$msg(canale,N).sender | Chi 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.
| Codice | Effetto |
$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
| Identificatore | Valore |
$away | 1 se sei in away (vedi /away in Comandi), 0 altrimenti. |
$awaymsg | Il messaggio di away corrente, vuoto se non sei away. |
$awaytime | Da quando sei away, in secondi Unix (come $ctime) - non un conto alla rovescia. |
$idle | Secondi 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
| Identificatore | Valore |
$version | La 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. |
$titlebar | Il 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). |
$mediadir | Cartella 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.