MEMO: Messaggi Automatici in XChat

Qui trovi le Guide dedicate allo script
BuDuS
Amministratore
Messaggi: 364
Iscritto il: 19/07/2009, 14:15
Contatta:

MEMO: Messaggi Automatici in XChat

Messaggioda BuDuS » 17/02/2012, 1:43

Mi è stato chiesto di realizzare un sistema che, prendendo dei messaggi in modo casuale da un file, li invii ad uno specifico canale.

Il BOT per BuDuScRiPt già realizza questa cosa tramite il comando !memo; tuttavia si tratta di un servizio che è stato realizzato per essere usato da più utenti, con tanto di privilegi diversi a seconda delle varie funzionalità disponibili.

Per addomesticarlo ad un lavoro più blando e "privato" è necessario crearsi un ambiente in cui eseguire gli script del comando in modo opportuno.
In pratica dovremo installare il BOT (anche se poi, in pratica, useremo solo alcuni file) usando il comando di menu: BuDuScRiPt -> Preferenze -> Gestione Plugin\Script Esterni -> Installa BOT

Andiamo quindi a creare l'ambiente con i seguenti comandi da terminale (come utente normale, chiaramente):

Codice: Seleziona tutto

cd $HOME/.xchat2/buduscript
mkdir memo
cd memo
ln -s ../budus_admin.sh .
ln -s ../budus_memo.sh .
ln -s ../budus_validate.sh .
touch budus_setup.sh

Ora siamo in grado di eseguire lo script del MEMO senza problematiche legate ai privilegi.

A questo punto è necessario creare una macro con la quale governare il MEMO; nella cartella "$HOME/.xchat2/buduscript" andiamo a creare il file "memo.mcr" il cui contenuto sarà il seguente:

Codice: Seleziona tutto

#fastflush
# Macro: MEMO
# USE: /budus macro memo <subcomando> [parametri]
# EX:  /budus macro memo help
#exec:/budus if '$1' = '' /budus cmd /ECHO end( %C8,1%BATTENZIONE: Non hai specificato il sub-comando. )
#exec:/budus pipe_script echo '000000_000000 : JOIN: [0000000000 | XXX XXX XX XX:XX:XX XXXX ] -> server:[$mhostname] channel:[$mchannel] nick:[$mnick] address:[MEMO_CLIENT_ADDRESS]' > $HOME/$mxchat_path/buduscript/memo/$mhostname.log
#exec:/budus pipe_script echo '000000_999999 : JOIN: [0000000000 | XXX XXX XX XX:XX:XX XXXX ] -> server:[$mhostname] channel:[$mchannel] nick:[MEMO_CLIENT_NICK_CHECK] address:[MEMO_CLIENT_ADDRESS_CHECK]' >> $HOME/$mxchat_path/buduscript/memo/$mhostname.log
#exec:/budus pipe_script echo 'all:/$mnick/MEMO_CLIENT_ADDRESS/' > $HOME/$mxchat_path/buduscript/memo/operator.lst
/budus cmd /budus pipe_script $HOME/$mxchat_path/buduscript/memo/budus_memo.sh \(MEMO_CLIENT_NICK_CHECK\) \($mnick\) \(MEMO_CLIENT_ADDRESS\) \($mchannel\) \($mhostname\) \($mhostname\) \(removecolors( !memo $1 $2- )\) \($mdatabase\)


Per utilizzare il comando si lancia la MACRO in questo modo:

Codice: Seleziona tutto

/budus macro memo help

ottenendo la guida; ad esempio, per aggiungere una frase al database, usiamo:

Codice: Seleziona tutto

/budus macro memo add ...frase da aggiungere...

per fermare il servizio:

Codice: Seleziona tutto

/budus macro memo stop

e così via.

Volendo personalizzare i parametri del servizio (ad esempio l'intervallo tra un messaggio e l'altro) dobbiamo inserire nel file "budus_setup.sh" le seguenti righe:

Codice: Seleziona tutto

######################################################################
# budus_memo.sh
#
# Codice da inserire in testa ad ogni frase inserita; notare che non
# e' opportuno lasciare vuota questa variabile per motivi di
# sicurezza. Si consiglia di modificarla con *estrema* attenzione.
memo_header_string="%O"
# Comando IRC da utilizzare per visualizzare le MEMO nel
# canale. Notare che, se lo script e' stato configurato per fornire
# una risposta privata anziche' pubblica, la variabile *NON DEVE*
# essere cambiata.
memo_print_command="/SAY "
# Lasso di tempo, espresso in secondi, che deve trascorrere tra la
# stampa di un MEMO ed il successivo, quando il servizio viene avviato
# in automatico ("!memo start").
memo_print_interval=3600
# Numero massimo di risultati visualizzabili quando si utilizza il
# sub-comando "list".
memo_max_list_result=10
# Numero massimo di risultati visualizzabili quando si utilizza il
# sub-comando "search".
memo_max_search_result=10
# Numero massimo di risultati visualizzabili quando si utilizza il
# sub-comando "delrgx".
memo_max_delrgx_result=10
# Numero minimo di records presenti nel database dei MEMO, raggiunto
# il quale, il servizio parte in automatico o, viceversa se non viene
# piu' rispettato, il servizio si ferma in automatico (se era attivo).
memo_min_db_records_autostart=24
# Comando da utilizzare per inviare il file del database dei MEMO. La
# variabile "REMOTE_USER" viene sostituita con il nickname dell'utente
# che ha eseguito il comando. La variabile "FILENAME" viene sostituita
# con il nome del file del database da inviare. Per gli utenti che non
# possono utilizzare il BOT come Server, si consiglia di usare "SEND"
# al posto di "PSEND".
memo_send_db_command="/DCC PSEND REMOTE_USER FILENAME"


e personalizzare i valori come desiderato.

Infine, per fare in modo che il servizio parta in automatico quando entriamo in un determinato canale, conviene creare una sentinella simile alla seguente:

Codice: Seleziona tutto

/event add 1 jchannel '#miocanale'='$channel' /budus macro memo start

dove, chiaramente, "#miocanale" deve essere personalizzato; salviamo la sentinella tramite il comando di menu: BuDuScRiPt -> Gestione Sentinelle -> Salva Sentinelle in Memoria

BuDuS
Amministratore
Messaggi: 364
Iscritto il: 19/07/2009, 14:15
Contatta:

Re: MEMO: Messaggi Automatici in XChat

Messaggioda BuDuS » 19/02/2012, 14:08

E SE VOLESSI CONTROLLARE IL MEMO NON TRAMITE MACRO MA SCRIVENDO "!MEMO" COME FOSSE UN BOT ?

È necessario utilizzare questi 4 comandi:

Codice: Seleziona tutto

/event add 0 text '$nick:#miocanale:!memo='$lu:$channel:$data' /budus cmd /budus pipe_script $HOME/.xchat2/buduscript/memo/budus_memo.sh \(MEMO_CLIENT_NICK_CHECK\) \($nick\) \(MEMO_CLIENT_ADDRESS\) \($channel\) \($hostname\) \($hostname\) \(removecolors( $data )\) \($database\)
/budus eventdebug 2
/event save
/budus save

andando a sostituire "#miocanale" con quello desiderato. Se i canali sono più di uno, si può usare una cosa di questo tipo:

Codice: Seleziona tutto

/event add 0 text '$nick:!memo='$lu:$data' /budus cmd /budus pipe_script $HOME/.xchat2/buduscript/memo/budus_memo.sh \(MEMO_CLIENT_NICK_CHECK\) \($nick\) \(MEMO_CLIENT_ADDRESS\) \($channel\) \($hostname\) \($hostname\) \(removecolors( $data )\) \($database\)

che, però, implica l'impossibilità di usare il comando "!memo" fornito da altri in canali diversi, salvo facendo reagire anche il proprio.

ATTENZIONE: Non è casuale se lo script non è sensibile all'evento text prodotto dall'utente locale ma solo da quelli remoti; se, ad esempio, si usa il comando "!memo help", lo script andrà a stampare la guida del comando memo ma, contestualmente, interpreterà ogni riga scritta come un comando da eseguire !

Questo avviene perché lo script non è in grado di discernere quando qualcosa viene scritto direttamente dall'utente locale anziché da uno script (e, in questo caso, si tratta addirittura di se stesso).

Fortunatamente lo script che gestisce il memo, quando gli si chiede la guida, non scrive nulla di simile a:

Codice: Seleziona tutto

!memo help

altrimenti si instaurerebbe un loop infinito !


Torna a “Guide”

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti