Versione 1 del 2017-05-15 13:03:32

Nascondi questo messaggio
Italiano English
Modifica History Actions

TeleIRC

TeleIRC: Bridge Telegram-IRC

TeleIRC è il software che fa da bridge (ponte) tra il canale IRC ufficiale Ninux (#ninux.org @ freenode) e il gruppo ufficiale telegram (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

Configurazione

Bot Telegram

L'interazione programmatica con il servizio di messaggistica istantanea Telegram avviene attraverso dei "bot", 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 "utenti" telegram programmabili.

Per creare un bot, si chatta con un super-bot chiamato @botfather. 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. Tra parentesi quadre commenti a margine da leggere, ma non digitare.

  • Noi:: /newbot

  • botfather: Alright, a new bot. How are we going to call it? Please choose a name for your bot.

  • Noi:: Ninux.org TeleIRC Bridge [il "nome e cognome" del nostro bot, sarebbe il nome per esteso che comparirà nelle bolle-messaggio]

  • botfather: Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: ~TetrisBot or tetris_bot.

  • Noi:: ninuxorg_teleircbot [questo sarà un "nickname" per il bot, che si potrà menzionare con la @nomecheabbiamoappenascritto. Deve terminare in "bot"]

  • botfather: Done! Congratulations on your new bot. You will find it at t.me/ninuxorg_teleircbot. ... Use this token to access the HTTP API: numeriacaso:altrarobaacaso ...

  • Noi:: /setprivacy [dobbiamo permettere al bot di accedere a tutti i messaggi postati dal nostro gruppo]

  • botfather: Choose a bot to change group messages settings.

  • Noi:: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente]

  • botfather: ... Current status is: ENABLED

  • Noi:: Disable [occhio a digitarlo esattamente così]

  • botfather: Success! The new status is: DISABLED. /help

  • Noi:: /setabouttext

  • botfather: Choose a bot to change the about section.

  • Noi:: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente]

  • botfather: 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.

  • Noi:: [massimo 120 caratteri per descrivere il nostro bot, che compariranno nel suo profilo]

  • botfather: Success! About section updated. /help

  • Noi:: /setdescription

  • botfather: Choose a bot to change description.

  • Noi:: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente]

  • botfather: 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?'.

  • Noi:: [una descrizione più lunga di cosa farà il nostro bot, che comparirà a chiunque cominci una chat col nostro bot]

  • botfather: Success! Description updated. /help

  • Noi: /setuserpic

  • botfather: Choose a bot to change profile photo.

  • Noi:: @ninuxorg_teleircbot [digitiamo o selezioniamo il nick del nostro bot, specificato al passo precedente]

  • botfather: OK. Send me the new profile photo for the bot.

  • Noi: [carichiamo la foto profilo che vogliamo per il nostro bot]

Quello che abbiamo fatto in sintesi è:

  • creare un nuovo bot, con nome esteso e nickname di nostra scelta
  • abbiamo ottenuto un token (numeriacaso:altrarobaacaso) con cui accedere ai server telegram. Appuntiamoceli!

  • gli abbiamo permesso di leggere tutti i messaggi del gruppo Telegram in cui si troverà, che è essenziale affinché possa ritrasmetterli
  • lo abbiamo dotato di una descrizione breve, una estesa e di una sua foto profilo

A questo punto non ci resta che aggiungere il nostro bot nei gruppi telegram per il quali dovrà fare da bridge.

TeleIRC

Installazione

  • Base: Ubuntu Server 16.04.x LTS

N.B.: 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.

TeleIRC è basato sul runtime javascript Node.js. Per installare una versione aggiornata di Node.js utilizzeremo i repository NodeSource (disponibili per molteplici distribuzioni Linux).

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

Prima di proseguire con l'installazione di TeleIRC, installiamo librerie e toolchain necessarie:

sudo apt-get install build-essentials libicu-dev

Installiamo TeleIRC attraverso il gestore pacchetti di Node.js

sudo npm install -g teleirc

Una volta completata l'installazione, generiamo la configurazione di partenza di teleirc, che risiederà in ~/.teleirc/config.js e che poi personalizzeremo:

mkdir ~/.teleirc
teleirc --genconfig

config.js

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:

var config = {};
module.exports = config;

/////////////////////
//  General config //
/////////////////////

// livello di dettaglio dei log, dal più dettagliato al meno
// silly, debug, verbose, info, warn, error
config.logLevel = 'info';

// NINUX: copioincollare il token fornito da botfather 
config.tgToken = 'numeriacaso:robaacaso';

// NINUX: i cambi topic IRC vengono annunciati su Telegram
config.sendTopic = true;

// NINUX: ingressi e uscite dal canale non vengono annunciati su telegram
// NINUX: sennò usciamo pazzi
config.sendNonMsg = false;

// 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;

// NINUX: la URL conterrà 8 caratteri a caso per evitare che sia facilmente predicibile
config.mediaRandomLength = 8;

// 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;

// Porta HTTP per servire i media cachati
config.httpPort = 9090;

// NINUX: La URL dei media sarà http://teleirc.ninux.org:9090/8numeriacaso/file.ext
config.httpLocation = 'http://teleirc.ninux.org' + ':' + config.httpPort;

// 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;

//////////////////
//  IRC config  //
//////////////////

// 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;

// Nick color palette
config.palette = [
    'white', 'silver', 'navy',
    'green', 'red', 'brown',
    'purple', 'olive', 'yellow',
    'lime', 'teal', 'cyan',
    'pink', 'blue'
];

// If soloUse is true, send all messages without username preview, intented
// to use telegram as a limited IRC client.
config.soloUse = false;

// 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%';

// 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 = ' … ';

config.ircNick = 'ninux-telegram';
config.ircServer = 'irc.freenode.net';

// array of commands to send to IRC server as soon as we're connected,
// example: config.ircPerformCmds = [
//     'PRIVMSG Q@CServe.quakenet.org :AUTH <username> <password>'
// ]
config.ircPerformCmds = [];

config.channels = [
    // example of a barebones IRC channel:
    // '#channel1' will be bridged to a Telegram group called 'Tg_Group_1'
    {
        ircChan: '#teleircnnx',
        tgGroup: 'TeleIRC Testing'
    //},

    // example of a password-protected IRC channel:
    //{
    //    ircChan: '#channel2',
    //    chanPwd: 'passwd',
    //    tgGroup: 'Tg_Group_2'
    //},

    // example of an IRC channel with an alias:
    // channel name will be displayed as '!channel3' instead of '!XXXXXchannel3'
    //{
    //    ircChan: '!XXXXXchannel3',
    //    chanAlias: '!channel3',
    //    tgGroup: 'Tg_Group_3'
    }
];

// see https://node-irc.readthedocs.org/en/latest/API.html#client for
// documentation
config.ircOptions = {
    userName: 'ninux-telegram',
    realName: 'Ninux.org TeleIRC Bot',
    port: 7070,
    localAddress: null,
    showErrors: false,
    autoRejoin: true,
    autoConnect: true,
    channels: [], // auto generated, do not touch
    secure: true,
    selfSigned: true,
    certExpired: false,
    floodProtection: true,
    floodProtectionDelay: 1000,
    sasl: false,
    stripColors: true,
    channelPrefixes: '&#!',
    messageSplit: 512,
    encoding: ''
};

// if you wish to relay every irc message to telegram, set this to true.
// if false, then only lines matching config.hlRegexp will be relayed
config.ircRelayAll = true;

// the default hilight regexp will match lines containing the bot nick, or
// lines starting with '! '
var regex = '^ *(?:' + config.ircNick + '[:,]?|!) +(.*\\S.*)$';
config.hlRegexp = new RegExp(regex, 'i');

// 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;