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
}
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.
| 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 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 join/on part/on kick/on topic/
on op/on deop/on invite funzionano su entrambe le reti. 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.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
}
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