<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>TeleIRC</title><revhistory><revision><revnumber>8</revnumber><date>2022-04-01 14:10:16</date><authorinitials>160.97.54.39</authorinitials><revremark>servizio dismesso</revremark></revision><revision><revnumber>7</revnumber><date>2018-08-01 08:54:17</date><authorinitials>host222-246-static.59-217-b.business.telecomitalia.it</authorinitials><revremark>variabili d'ambiente necessarie per systemd</revremark></revision><revision><revnumber>6</revnumber><date>2017-05-17 14:53:56</date><authorinitials>Stefanauss</authorinitials><revremark>Modifiche su telegram non propagate</revremark></revision><revision><revnumber>5</revnumber><date>2017-05-17 09:10:58</date><authorinitials>Stefanauss</authorinitials><revremark>Avvio automatico istanze systemd --user</revremark></revision><revision><revnumber>4</revnumber><date>2017-05-15 19:31:54</date><authorinitials>Stefanauss</authorinitials><revremark>Aggiunta policy</revremark></revision><revision><revnumber>3</revnumber><date>2017-05-15 19:24:16</date><authorinitials>Stefanauss</authorinitials></revision><revision><revnumber>2</revnumber><date>2017-05-15 19:21:01</date><authorinitials>Stefanauss</authorinitials><revremark>Completamento prima stesura</revremark></revision><revision><revnumber>1</revnumber><date>2017-05-15 13:03:32</date><authorinitials>Stefanauss</authorinitials><revremark>Prima stesura della documentazione per l'istanza Ninux di TeleIRC</revremark></revision></revhistory></articleinfo><section><title>(DISMESSO) TeleIRC: Bridge Telegram-IRC</title><para><emphasis><emphasis role="strong">SERVIZIO DISMESSO IL 01/04/2022</emphasis></emphasis> </para><itemizedlist><listitem><para><emphasis role="strong">URL</emphasis>: <ulink url="http://teleirc.ninux.org"/> </para></listitem><listitem><para><emphasis role="strong">Maintainer</emphasis>: <ulink url="http://www.nnx.me/TeleIRC/Stefanauss#">Stefanauss</ulink> </para></listitem></itemizedlist><para><emphasis role="strong">TeleIRC</emphasis> è il <ulink url="https://github.com/FruitieX/teleirc">software</ulink> che fa da <emphasis>bridge</emphasis> (ponte) tra il canale <ulink url="http://www.nnx.me/TeleIRC/IRC#">IRC</ulink> ufficiale Ninux (#ninux.org @ freenode) e il gruppo ufficiale <ulink url="http://www.nnx.me/TeleIRC/telegram#">telegram</ulink> (<ulink url="https://t.me/ninuxorg"/>), consentendo a chi entra in uno dei due sistemi di chat di comunicare con chi è membro dell'altro. In questo modo ognuno può usare il proprio sistema di chat preferito raggiungendo comunque tutta la community ninux che chatta. </para></section><section><title>Cose da sapere</title><para>Il bridge è essenzialmente trasparente: chatti su IRC, reinoltra su Telegram; chatti su Telegram, reinoltra su IRC; tutti vedono tutto. </para><para>La <emphasis role="strong">principale limitazione</emphasis> (tipica di molti bridge) è che <emphasis role="strong">non è possibile ottenere una lista completa degli utenti</emphasis>: l'utente virtuale del bridge &quot;nasconde&quot; quelli presenti dall'altro lato. </para><itemizedlist><listitem><para>Su Telegram: è possibile (per ora), visualizzare la lista degli utenti su IRC inviando nel gruppo telegram il comando <code>/names</code>, ma probabilmente verrà presto rimossa perché il comando non è limitabile a precisi momenti o utenti. </para></listitem><listitem><para>Su IRC: non è possibile ottenere la lista degli utenti del gruppo Telegram. Si può &quot;apprendere&quot; il nick di un utente solo quando questo si unisce al gruppo o manda qualche messaggio. </para></listitem></itemizedlist><para>Altre info utili: </para><itemizedlist><listitem><para>Al momento, l'utente del bot non è registrato presso <ulink url="http://www.nnx.me/TeleIRC/FreeNode#">FreeNode</ulink>, quindi non ha il nick prenotato. Fate i bravi e non usate <emphasis>ninux-telegram</emphasis>. </para></listitem><listitem><para>Al momento, il bot non ha particolari privilegi IRC nell'ambito del canale. Non dovrebbero essere necessari. </para></listitem><listitem><para>La connessione bot-freenode è su TLS/SSL, quindi sicura. Più per stile che per altro, visto che quella bot-telegram è in HTTP (sigh) </para></listitem><listitem><para>Su Telegram: rispondendo ad un messaggio del bot, su IRC viene propagato sostituendo l'utente corretto: nice! </para></listitem><listitem><para>Per menzionare un utente è consigliato utilizzare &quot;@nick&quot;; questo perché si adegua all'unico funzionante in Telegram e perché è comunque funzionante anche intra-IRC su quasi tutti i client </para></listitem><listitem><para>Il bot fa caching dei media (immagini, file, messaggi vocali, stickers, tutt'e'cose) postati su Telegram, e li reinoltra come link su IRC. </para></listitem></itemizedlist><section><title>Policy (update: 20170515)</title><para>Il servizio di bridging è mantenuto secondo una logica as-is, best-effort. </para><para>Al momento non ho piani precisi per lo storage a lungo termine della cache dei media. Lo spazio a disposizione è 45 GiB circa. Il bridging ha potenziale per trasformarsi in un log onnicomprensivo delle chat Ninux, quindi se sarà possibile tenere tutti i file lo farò. Servirebbe implementare un management più raffinato di un cache-everything, però. </para></section><section><title>Bug Noti</title><itemizedlist><listitem><para>nei file inviati via telegram, la didascalia non viene propagata ad IRC </para></listitem><listitem><para>le modifiche dei messaggi su telegram non vengono propagate ad IRC </para></listitem></itemizedlist></section><section><title>TODO</title><itemizedlist><listitem><para>Verificare se <ulink url="http://www.nnx.me/TeleIRC/FreeNode#">FreeNode</ulink> usa un certificato self-signed per il login TLS; se no, possiamo evitare di accettarli </para></listitem></itemizedlist></section></section><section><title>Configurazione</title><section><title>Bot Telegram</title><para>L'<ulink url="https://core.telegram.org/bots">interazione programmatica</ulink> con il servizio di messaggistica istantanea Telegram avviene attraverso dei &quot;<emphasis role="strong">bot</emphasis>&quot;, dei software che creano un profilo telegram con cui è poi possibile chattare, sia singolarmente che in chat di gruppo, impartendo loro comandi, mettendoli in attesa di particolari eventi o messaggi che scateneranno le azioni desiderate. In due parole: sono &quot;utenti&quot; telegram programmabili. </para><para>Per creare un bot, si chatta con un super-bot chiamato <emphasis role="strong">@botfather</emphasis>. Per aprire una chat con botfather basta cercarlo nel campo ricerca globale del proprio client telegram. Ecco come si svolge la chat di creazione di un bot TeleIRC: se qualcosa non tornasse, basta semplicemente seguire le istruzioni passo-passo che il bot ci sputerà contro dopo ogni nostra parola. <emphasis role="strong">Tra parentesi quadre commenti a margine da leggere, ma non digitare</emphasis>. </para><itemizedlist><listitem><para><emphasis role="strong">Noi:</emphasis>: /newbot </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Alright, a new bot. How are we going to call it? Please choose a name for your bot. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: Ninux.org TeleIRC Bridge [il &quot;nome e cognome&quot; del nostro bot, sarebbe il nome per esteso che comparirà nelle bolle-messaggio] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Good. Now let's choose a username for your bot. It must end in <code>bot</code>. Like this, for example: ~<ulink url="http://www.nnx.me/TeleIRC/TetrisBot#">TetrisBot</ulink> or tetris_bot. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: ninuxorg_teleircbot [questo sarà un &quot;nickname&quot; per il bot, che si potrà menzionare con la @nomecheabbiamoappenascritto. <emphasis role="strong">Deve terminare in &quot;bot&quot;</emphasis>]   </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Done! Congratulations on your new bot. You will find it at t.me/ninuxorg_teleircbot. ... Use this token to access the HTTP API: <emphasis role="strong">numeriacaso:altrarobaacaso</emphasis> ... </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: /setprivacy [dobbiamo permettere al bot di accedere a tutti i messaggi postati dal nostro gruppo] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Choose a bot to change group messages settings. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: ... Current status is: ENABLED </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: Disable [occhio a digitarlo <emphasis role="strong">esattamente così</emphasis>] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Success! The new status is: DISABLED. /help </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: /setabouttext </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Choose a bot to change the about section. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: OK. Send me the new 'About' text. People will see this text on the bot's profile page and it will be sent together with a link to your bot when they share it with someone. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: [massimo 120 caratteri per descrivere il nostro bot, che compariranno nel suo profilo] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Success! About section updated. /help </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: /setdescription </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Choose a bot to change description. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: OK. Send me the new description for the bot. People will see this description when they open a chat with your bot, in a block titled 'What can this bot do?'. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: [una descrizione più lunga di cosa farà il nostro bot, che comparirà a chiunque cominci una chat col nostro bot] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Success! Description updated. /help </para></listitem><listitem><para><emphasis role="strong">Noi</emphasis>: /setuserpic </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: Choose a bot to change profile photo. </para></listitem><listitem><para><emphasis role="strong">Noi:</emphasis>: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente] </para></listitem><listitem><para><emphasis role="strong">botfather</emphasis>: OK. Send me the new profile photo for the bot. </para></listitem><listitem><para><emphasis role="strong">Noi</emphasis>: [carichiamo la foto profilo che vogliamo per il nostro bot] </para></listitem></itemizedlist><para>Quello che abbiamo fatto in sintesi è: </para><itemizedlist><listitem><para>creare un nuovo bot, con nome esteso e nickname di nostra scelta </para></listitem><listitem><para><emphasis role="strong">abbiamo ottenuto un token</emphasis> (numeriacaso:altrarobaacaso) con cui accedere ai server telegram. Appuntiamoceli! </para></listitem><listitem><para>gli abbiamo permesso di leggere tutti i messaggi del gruppo Telegram in cui si troverà, che è essenziale affinché possa ritrasmetterli </para></listitem><listitem><para>lo abbiamo dotato di una descrizione breve, una estesa e di una sua foto profilo </para></listitem></itemizedlist><para>A questo punto non ci resta che <emphasis role="strong">aggiungere il nostro bot nei gruppi telegram per il quali dovrà fare da bridge</emphasis>. </para></section><section><title>TeleIRC</title><section><title>Installazione</title><itemizedlist><listitem><para><emphasis role="strong">Base</emphasis>: Ubuntu Server 16.04.x LTS </para></listitem></itemizedlist><para><emphasis role="strong">N.B.</emphasis>: Questo howto non copre la parte di installazione, configurazione e messa in sicurezza del sistema operativo server, macchina virtuale o container che ospiterà il servizio, ma solo le istruzioni specifiche per TeleIRC. </para><para>TeleIRC è basato sul runtime javascript <emphasis role="strong">Node.js</emphasis>. Per installare una versione aggiornata di Node.js utilizzeremo i <ulink url="https://github.com/nodesource/distributions">repository NodeSource</ulink> (disponibili per molteplici distribuzioni Linux). </para><screen><![CDATA[curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs]]></screen><para>Prima di proseguire con l'installazione di TeleIRC, installiamo librerie e toolchain necessarie: </para><screen><![CDATA[sudo apt-get install build-essentials libicu-dev]]></screen><para>Installiamo TeleIRC attraverso il gestore pacchetti di Node.js </para><screen><![CDATA[sudo npm install -g teleirc]]></screen></section><section><title>Utente ad-hoc</title><para>Eseguiremo il bot col suo proprio utente, applicando il principio del minimo privilegio: </para><screen><![CDATA[sudo adduser teleirc
sudo su - teleirc]]></screen></section><section><title>config.js</title><para>Una volta completata l'installazione, generiamo la configurazione di partenza di teleirc, che risiederà in <code>~/.teleirc/config.js</code> e che poi personalizzeremo: </para><screen><![CDATA[mkdir ~/.teleirc
teleirc --genconfig]]></screen><para>Apriamo il file appena generato col nostro editor di testo per terminale preferito e cominciamo ad editarlo nei punti chiave. Segue la versione appuntata in italiano del file, che rappresenta anche la configurazione in essere per l'istanza in uso da Ninux: </para><screen><![CDATA[var config = {};
module.exports = config;
]]><![CDATA[
/////////////////////
//  General config //
/////////////////////
]]><![CDATA[
// livello di dettaglio dei log, dal più dettagliato al meno
// silly, debug, verbose, info, warn, error
config.logLevel = 'info';
]]><![CDATA[
// NINUX: copioincollare il token fornito da botfather 
config.tgToken = 'numeriacaso:robaacaso';
]]><![CDATA[
// NINUX: i cambi topic IRC vengono annunciati su Telegram
config.sendTopic = true;
]]><![CDATA[
// NINUX: ingressi e uscite dal canale non vengono annunciati su telegram
// NINUX: sennò usciamo pazzi
config.sendNonMsg = false;
]]><![CDATA[
// NINUX: il nostro bridge salva foto, file, messaggi vocali e qualsiasi media Telegram
// NINUX: e li rende disponibili su IRC inviando un link
config.showMedia = true;
]]><![CDATA[
// NINUX: la URL conterrà 8 caratteri a caso per evitare che sia facilmente predicibile
config.mediaRandomLength = 8;
]]><![CDATA[
// NINUX: Se il bot si disconnette e poi riconnette, alla sua riconnessione NON inoltrerà
// NINUX: i messaggi telegram più vecchi di tot secondi, configurabili qui
// NINUX: un valore molto alto rischia di inondare il canale con tantissimi messaggi
// NINUX: se il bot rimane disconnesso per molto tempo
// NINUX: per il momento lasciamo 1 minuto, calibreremo col tempo
config.maxMsgAge = 60;
]]><![CDATA[
// Porta HTTP per servire i media cachati
config.httpPort = 9090;
]]><![CDATA[
// NINUX: La URL dei media sarà http://teleirc.ninux.org:9090/8numeriacaso/file.ext
config.httpLocation = 'http://teleirc.ninux.org' + ':' + config.httpPort;
]]><![CDATA[
// NINUX: usando /command davanti al proprio messaggio telegram
// NINUX: il bot eviterà di anteporre il nostro nick telegram
// NINUX: quando pubblicherà il messaggio su IRC
// NINUX: è potenzialmente utile per inoltrare comandi IRC puri
// NINUX: al momento disabilitata perché non funziona bene col meetbot
config.allowCommands = false;
]]><![CDATA[
//////////////////
//  IRC config  //
//////////////////
]]><![CDATA[
// NINUX: il bot colorerà i nick degli utenti telegram
// NINUX: li rende facilmente distinguibili agli utenti IRC
// NINUX: attivata perché ovvia bene alla mancanza degli utenti telegram
// NINUX: nella lista degli utenti IRC
config.nickcolor = true;
]]><![CDATA[
// Nick color palette
config.palette = [
    'white', 'silver', 'navy',
    'green', 'red', 'brown',
    'purple', 'olive', 'yellow',
    'lime', 'teal', 'cyan',
    'pink', 'blue'
];
]]><![CDATA[
// If soloUse is true, send all messages without username preview, intented
// to use telegram as a limited IRC client.
config.soloUse = false;
]]><![CDATA[
// NINUX: I prossimi due parametri decidono come compaiono gli utenti telegram su IRC
// NINUX: la prima scelta è il nick, se specificato dall'utente
// NINUX: se l'utente non ha un nick, usiamo nome-cognome
config.nameFormat = '%username%';
config.usernameFallbackFormat = '%firstName% %lastName%';
]]><![CDATA[
// NINUX: i ritorni a capo nei messaggi Telegram vengono sostituiti da 3 puntini sospensivi
// NINUX: prima di venire reinoltrati su IRC
// Volendo si può utilizzare \n per specificare di mantenere i ritorni a capo
config.replaceNewlines = ' … ';
]]><![CDATA[
config.ircNick = 'ninux-telegram';
config.ircServer = 'irc.freenode.net';
]]><![CDATA[
// NINUX: qui si potrà eventualmente istruire il bot ad effettuare il login su freenode
config.ircPerformCmds = [];
]]><![CDATA[
// NINUX: elenco dei bridge IRC-Telegram gestiti da questa istanza del bot
// NINUX: ne usiamo due: una per i canali ufficiali e una per testing e debug
]]><![CDATA[
config.channels = [
    // NINUX: Bridge tra #teleircnnx (IRC) e TeleIRC Testing (TG)
    {
        ircChan: '#teleircnnx',
        tgGroup: 'TeleIRC Testing'
    },
]]><![CDATA[
    // NINUX: Bridge tra #ninux.org (IRC) e Ninux.org (TG)
    {
        ircChan: '#ninux.org',
        tgGroup: 'Ninux.org'
    }
]]><![CDATA[
];
]]><![CDATA[
// NINUX: Elenco delle opzioni di connessione alla rete IRC
// NINUX: Istanziano un oggetto della libreria Node.js Node-IRC
// NINUX: Utilizzata da TeleIRC
// see https://node-irc.readthedocs.org/en/latest/API.html#client
config.ircOptions = {
    userName: 'ninux-telegram', // NINUX: Nickname e nome esteso del bot su IRC
    realName: 'Ninux.org TeleIRC Bot', // NINUX: Nickname e nome esteso del bot su IRC
    port: 7070, // NINUX: Connessione ad una delle porte TLS di FreeNode
    localAddress: null,
    showErrors: false,
    autoRejoin: true, // NINUX: ci riconnettiamo automaticamente in caso di down
    autoConnect: true, // NINUX: join immediato dopo la connessione al server
    channels: [], // auto generated, do not touch
    secure: true, // NINUX: connessione SSL
    selfSigned: true, // NINUX: accettiamo certificati self-signed
    certExpired: false,
    floodProtection: true,
    floodProtectionDelay: 1000,
    sasl: false,
    stripColors: true,
    channelPrefixes: '&#!',
    messageSplit: 512,
    encoding: ''
};
]]><![CDATA[
// NINUX: effettuiamo il relay di tutti i messaggi da IRC a Telegram
config.ircRelayAll = true;
]]><![CDATA[
// si può configurare una espressione regolare per reinoltrare solo messaggi specifici
var regex = '^ *(?:' + config.ircNick + '[:,]?|!) +(.*\\S.*)$';
config.hlRegexp = new RegExp(regex, 'i');
]]><![CDATA[
// if there was a match, should we only show the parenthesized substring match?
// with the default regexp this would hide the bot nickname in messages when
// highlighted
config.hlOnlyShowMatch = false;]]></screen></section><section><title>Primo avvio</title><para>Verifichiamo che tutto funzioni avviando TeleIRC in modalità ultra-verbosa, con <code>teleirc -vvv</code>. Dovremmo </para><itemizedlist><listitem><para>vedere comparire nella lista utenti di IRC il nostro bot </para></listitem><listitem><para>scrivendo messaggi da ambedue i lati, verderli reinoltrati sull'altro </para></listitem></itemizedlist></section><section><title>Autoboot</title><para>Systemd utilizza, oltre all'init di sistema con PID 1, anche un processo (user mode, <code>--user</code>) per ogni utente che nasce e muore al login/logout di quell'utente e permette a ciscuno di essi di gestire i propri service/socket/unit/mount systemd in maniera autonoma. </para><para>Affinché l'istanza di systemd per ogni utente possa avviarsi, è necessaria la libreria PAM per Systemd: </para><screen><![CDATA[sudo apt-get install libpam-systemd]]></screen><para>Il file service per il bot risiederà nella directory </para><screen><![CDATA[cd
mkdir -p .config/systemd/user/
$EDITOR .config/systemd/user/teleirc.service]]></screen><para>dove <code>$EDITOR</code> è il nostro editor di testo CLI preferito. </para><para>Il contenuto del file sarà </para><screen><![CDATA[[Unit]
Description=Telegram-IRC bridging bot
After=network-online.target oidentd.socket
]]><![CDATA[
[Service]
ExecStart=/usr/bin/env node /usr/bin/teleirc -vv
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
]]><![CDATA[
[Install]
WantedBy=default.target]]></screen><para>Aggiugiamo in ~/.profile le seguenti variabili d'ambiente, in fondo al file. Dopo averle aggiunte <emphasis role="strong">sarà necessario riloggarsi</emphasis> con l'utente teleirc affinché abbiano effetto: </para><screen><![CDATA[export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/`id -u`/bus
export XDG_RUNTIME_DIR=/run/user/`id -u`]]></screen><para>Testiamo il nostro file service con </para><screen><![CDATA[# notare --user e l'assenza dei privilegi di root per l'uso di systemd
systemctl --user start teleservice]]></screen><para>Se tutto andrà bene, vedremo uno stato del genere: </para><screen><![CDATA[systemctl --user status teleirc
● teleirc.service - teleirc
   Loaded: loaded (/home/teleirc/.config/systemd/user/teleirc.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-05-14 18:12:40 CEST; 1 day 2h ago
 Main PID: 3334 (node)
   CGroup: /user.slice/user-1000.slice/user@1000.service/teleirc.service
           └─3334 node /usr/bin/teleirc -vv]]></screen><para>A questo punto potremo abilitare definitivamente il servizio per l'autostart </para><screen><![CDATA[systemctl --user enable teleirc]]></screen><para>Non basta però: di default le istanze per-utente systemd si avviano solo al primo login e terminano dopo il logout. Per avviarle e lasciarle in esecuzione è necessario abilitarle con </para><screen><![CDATA[sudo loginctl enable-linger teleirc]]></screen></section></section></section><section><title>Troubleshooting</title><para>Appuntandoci il Main PID nell'output di <code>systemctl --user status teleirc</code>, possiamo poi consultare il log di teleirc usando il comando: </para><screen><![CDATA[sudo journalctl _PID=$MAIN_PID]]></screen><para>Affinché teleirc sia sufficientemente informativo nei log di sistema, è necessario avviarlo con i flag <code>-v</code> o <code>-vv</code> (vedi file .service da noi creato). </para></section></article>