Yoake ha un motore di scripting che segue da vicino la sintassi del vero mIRC, applicata alle chat di Telegram e WhatsApp. Si apre da Tools > Aliases.../Popups.../Remote... (Editor Script), con quattro schede: Aliases, Remote (eventi), Popups, Variables.
Tutto è salvato come file .ini veri dentro userData/scripts/ (aliases.ini,
remote.ini, popups.ini, variables.ini) - modificabili anche con un editor
di testo esterno; il pulsante "Load..." nell'editor importa un file .ini esterno nella scheda aperta.
Comandi personalizzati, richiamabili come /nome:
saluta {
say Ciao $1
}
aliases.ini si scrive solo nome { ... }, MAI
alias nome { ... } - quel prefisso serve (ed è richiesto) solo dentro Remote qui sotto, dove
distingue un alias da un on evento.Ogni evento gira PRIMA dell'azione predefinita corrispondente (come nel vero mIRC): può osservarla e, dove
indicato, sopprimerla con haltdef (o interromperla del tutto con halt, solo dentro
"on message").
Riga visibile in chat: come nel vero mIRC, join/part/kick/
op/deop/topic/nick mostrano sempre una riga di sistema in
chat (es. --> Mario has joined, * Mario is now an admin) - indipendentemente da
qualunque script tu abbia scritto, esattamente come mIRC lo fa di default. Lo script gira comunque, in aggiunta,
non al posto di questa riga.
on start { ... } (nessun livello, niente
condizione: Yoake non ha livelli d'accesso e i suoi eventi non filtrano per nick/canale, scattano sempre), è
accettata anche la sintassi vera del vero mIRC on *:START:{ ... } (con livello ed eventuali
condizioni extra, es. on *:TEXT:*:#canale:{ ... }) - comoda per incollare uno script mIRC già
pronto senza doverlo tradurre a mano. Livello e condizione vengono letti e scartati (nessun matching reale su di
essi), solo il nome evento conta.| Evento | Quando scatta | $nick | $chan | $1-$9 / args | haltdef |
|---|---|---|---|---|---|
on start | Una volta sola, all'avvio di Yoake. | You | - | - | no |
on load | Quando salvi/chiudi l'Editor Script (gli script vengono ricompilati) - non all'avvio, a differenza del vero mIRC dove "on load" scatta quando un file .mrc viene caricato. | You | - | - | no |
on connect | Connessione riuscita a una rete (login normale o QR). | il tuo nome | - | - | no |
on connectfail | Tentativo di connessione fallito. | You | - | il messaggio d'errore, come parole separate | no |
on disconnect | Disconnesso da una rete (manuale con /disconnect, o forzato es. dispositivo disassociato dal telefono). | You | - | - | no |
on message | Un messaggio in arrivo (mai per i tuoi stessi messaggi inviati). | chi ha scritto | il canale/gruppo, vuoto in privato | testo del messaggio | sì (non mostra il messaggio) - halt fa lo stesso e interrompe anche lo script |
on notice | Notifica sintetica (screenshot, pin, chiamata persa...) - vedi Notifiche ed eventi di sistema per l'elenco completo dei $noticetype. | chi l'ha causata | dove (se nota) | testo della notice | sì |
on whois | Prima di stampare il risultato di /whois - nostra aggiunta: il vero mIRC non ha un evento dedicato, usa invece i RAW event numerici del protocollo (301/311/312/317/318/319...), uno per ogni pezzo di dato. Qui il nostro /whois restituisce già tutto insieme, quindi un solo evento con haltdef ha più senso che simularne 5-6 finti. | la persona cercata | - | $1 = nome, $2 = username, $3 = telefono, $4 = on/off/vuoto (stato online, vuoto se sconosciuto), $5 = bio, $6 = URL foto profilo, $7 = data spunte blu lette (entrambe le reti, vuoto se non lo sappiamo), $8 = ultimo accesso (data precisa, o su Telegram anche una fascia vaga tipo "di recente"/"nell'ultima settimana"/"nell'ultimo mese" quando Telegram non dà un orario esatto - vuoto se non lo sappiamo o se è online adesso) | sì - sopprime le righe di default, lo script le ridisegna come preferisce |
on call | Una chiamata (audio o video) sta arrivando - nostra aggiunta: solo segnalazione, GramJS/Baileys non implementano affatto l'audio/video vero, non è possibile "rispondere" per davvero. Vedi /rejectcall in Comandi per rifiutarla (eventualmente con un messaggio a chi ha chiamato). | chi sta chiamando | - | $1 = video o audio | sì - sopprime la riga "Chiamata in arrivo" di default |
on join | Qualcuno entra in un gruppo. | chi è entrato | il gruppo | - | no |
on part | Qualcuno esce da un gruppo. | chi è uscito | il gruppo | - | no |
on kick | Qualcuno viene rimosso da un gruppo. | chi ha rimosso | il gruppo | $1 = chi è stato rimosso | no |
on op | Qualcuno diventa admin di un gruppo (con /op, o perché lo fa un altro admin). | chi è diventato admin | il gruppo | - | no |
on deop | Qualcuno perde lo stato admin (con /deop, o perché lo fa un altro admin). | chi ha perso l'admin | il gruppo | - | no |
on nick | Un contatto/utente cambia nome - scatta nello Status e in ogni finestra aperta dove è rilevante (chat privata con lui, o gruppo di cui fa parte). | il nome PRIMA del cambio | - | $1 = il nome nuovo | no |
on notify | Un contatto nella tua lista Notify (vedi Rubrica) si connette. Scatta nello Status della rete. | il nome del contatto | - | - | no |
on unotify | Un contatto nella tua lista Notify si disconnette. | il nome del contatto | - | - | no |
on invite | Due casi distinti, entrambi coperti: (1) ricevi un messaggio con un vero link d'invito (t.me/joinchat, t.me/+..., chat.whatsapp.com/...) - il caso più fedele a IRC, la notifica arriva PRIMA che tu entri; (2) sei stato aggiunto direttamente a un gruppo nuovo senza nessun link (un admin che ha il tuo contatto può farlo su entrambe le reti) - qui lo scopri "a cose fatte", non c'è modo di saperlo prima. | chi ha mandato il link (caso 1) o vuoto (caso 2) | chi ha mandato il messaggio (caso 1) o il gruppo (caso 2) | $1 = il link (solo caso 1) | no |
on topic | L'argomento/nome di un gruppo cambia. | - | il gruppo | $1 = il vecchio titolo | no |
on open | Si apre una finestra qualsiasi (canale, gruppo, query, status, o una @finestra creata con /window). | You | il titolo della finestra (per una @finestra: il suo nome, es. @log) | - | no |
on close | Si chiude una finestra qualsiasi (idem, incluse le @finestre). | You | il titolo della finestra | - | no |
on queryopen | Si apre nello specifico una chat privata (query). | You | - | - | no |
on queryclose | Si chiude una chat privata (query). | You | - | - | no |
on input | Ogni riga inviata in qualsiasi finestra (comando o messaggio), prima ancora di processarla. | You | - | il testo digitato, come parole separate | sì - /halt//haltdef qui annullano davvero l'invio predefinito (comando o messaggio), come nel vero mIRC: lo script deve pensarci lui a mandare qualcosa con say/msg se vuole comunque far uscire un testo modificato |
on filesent | Un invio con /dcc send è concluso. | il destinatario | - | $1 = nome del file | no |
on filercvd | Un media/documento in arrivo ha finito di scaricarsi (foto/video/audio/documento cliccato, o caricato automaticamente in modalità HTML). | - | - | $1 = nome del file (vuoto per foto/video/audio) | no |
on videoend | Nostra aggiunta (il vero mIRC non ha mai avuto video) - un video aperto nel visualizzatore (doppio click, o /playmedia) finisce di riprodursi da solo. La finestra non si chiude da sola: se lo script vuole, decide lui con /close $wid. | You | - | - | no |
on sockopen | Un sockopen si è connesso con successo - vedi Comandi (sezione Socket). | - | - | - | no |
on socklisten | Una connessione in arrivo su un socklisten - accettala con sockaccept, altrimenti va persa. | - | - | - | no |
on sockread | Sono arrivati dati su un socket aperto - usa sockread per leggerli, altrimenti restano in coda (persi al prossimo dato in arrivo se non svuotati). | - | - | - | no |
on sockclose | Un socket si è chiuso (dall'altra parte, o perché la connessione è fallita/caduta) - $sockerr è valorizzato se c'è stato un errore. | - | - | - | no |
on run | Nostra aggiunta (il vero /run non restituisce mai l'output - vedi Comandi, sezione Programmi esterni). Un programma avviato con /run è terminato. | - | - | $1- = l'output (diviso in parole) - $runoutput per il testo intero, a capo compresi | no |
on reaction | Nostra aggiunta (il vero mIRC non ha reazioni - vedi /react in Comandi). Qualcuno reagisce con un'emoji a un tuo messaggio o a una tua Storia/Stato, su Telegram o WhatsApp. Vale solo per reazioni nuove/cambiate da quando Yoake è connesso, non per reazioni già esistenti su messaggi vecchi. | chi ha reagito | il canale/gruppo (vuoto in privato o per una reazione a una Storia/Stato) | $1 = l'emoji, $2 = id del messaggio (vuoto per una reazione a una Storia/Stato) | sì - sopprime la riga di default, lo script la ridisegna come preferisce |
on join/on part/on kick/on topic/
on op/on deop/on invite funzionano su Telegram e WhatsApp (on invite
non ha senso su IRC, che non ha link d'invito). Su Telegram c'è però un limite della piattaforma stessa (non di
Yoake): il protocollo manda questi aggiornamenti solo agli amministratori del canale/supergruppo, o a tutti i
membri nei gruppi piccoli - se non li vedi arrivare in un gruppo Telegram grande di cui non sei admin, è perché
Telegram stesso non te li sta mandando. Su IRC, on join/on part/on kick/
on topic/on op/on deop funzionano senza questo limite (il server manda
sempre questi eventi a tutti quelli nel canale, non solo agli admin) - vedi IRC.on op {
echo $nick è diventato admin di $chan
}
on nick {
echo $nick ora si chiama $1
}
on invite {
echo ⚠️ $nick ti ha mandato un link d'invito: $1
}
on message {
echo $nick ha scritto in $chan
}
on notice {
if ($noticetype == missedcall) haltdef
}
Whois personalizzato - sostituisce le righe di default con un formato tutto tuo:
on whois {
haltdef
echo -a ── $nick ──
echo -a Nome: $1
if ($2 != $null) echo -a Username: $2
if ($4 == on) echo -a Stato: 🟢 online
elseif ($4 == off) echo -a Stato: ⚫ offline
}
Blocca tutte le chiamate - le rifiuta subito e avvisa chi ha chiamato invece di mostrare "Chiamata in arrivo":
on call {
haltdef
rejectcall Non rispondo alle chiamate, scrivimi pure qui!
}
Playlist video automatica - scorre un canale/gruppo (es. le puntate di una serie) cercando i video con
$msg() (vedi Identificatori) e passa al successivo da solo con
on videoend:
alias playlist {
set %pl.chan $1
set %pl.idx 0
playlist.next
}
alias playlist.next {
inc %pl.idx
while (%pl.idx <= $msg(%pl.chan,0)) && ($msg(%pl.chan,%pl.idx).type != video) {
inc %pl.idx
}
if (%pl.idx > $msg(%pl.chan,0)) {
echo -a Playlist finita.
return
}
playmedia %pl.chan $msg(%pl.chan,%pl.idx).id
}
on videoend {
playlist.next
}
Poi basta /playlist #NomeCanale (o l'id finestra) per farla partire. Nota: $msg() vede
solo i messaggi già caricati in quella finestra (apri il canale e scorri su per caricarne di più, se necessario).
alias nome { ... } - funziona
uguale a scriverlo nella scheda Aliases, mIRC non separa gli alias per file.Nella scheda Variables, una dichiarazione per riga: %nome valore. Usabili come %nome
dentro aliases/eventi/popup, ovunque nel testo di uno script.
%saluto Ciao dal mio alias!
saluta {
say %saluto $1
}
variables.ini. Questo vale sia per quelle dichiarate a mano nella scheda
Variables sia per quelle create/modificate a runtime con set/inc/dec
durante l'esecuzione di uno script: vengono scritte su disco automaticamente (con un breve ritardo, per non
scrivere ad ogni singola iterazione di un ciclo - lo stesso principio del vero mIRC, che salva periodicamente
invece che ad ogni /set).Esempio - un contatore che sopravvive ai riavvii, senza bisogno di dichiararlo a mano nella scheda Variables:
on message {
set %contatore $calc(%contatore + 1)
echo Messaggi ricevuti finora: %contatore
}
Menu contestuali (tasto destro) - stessa sintassi del vero mIRC, sezioni separate per ogni contesto:
| Sezione | Dove compare |
|---|---|
[status] | Tasto destro nella finestra Status. |
[channel] | Tasto destro al centro della finestra di un gruppo/canale. |
[query] | Tasto destro al centro di una chat privata. |
[nicklist] | Tasto destro su un nick nella lista utenti. |
[menubar] | Popup collegabile alla barra dei menu. |
Nella scheda Popups, il menu a tendina "View" (o il menu View in alto nell'editor) sceglie quale sezione stai modificando - ognuna ha il suo testo, come nel vero editor di mIRC. Il menu "Popup" in alto mostra un'anteprima dal vivo di come verrà disegnato il menu mentre lo scrivi.
Sintassi: Etichetta:comando una voce per riga, - per un separatore, sottomenu annidati
con un punto in più per livello. Nei popup [nicklist], $1 e $nick sono il
nick su cui hai fatto click destro:
Saluta tutti:say Ciao a tutti! - Altri comandi .Chi sono:whois $1 .Espelli:kick $1