Jabber transport to Telegram network
This repository has been archived on 2024-05-28. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
annelin 88c7eb09da Release 1.0-beta1. Some more tests and here we go..
Warning! It is beta software and it has not been tested thoroughly.

[UPD] Code restructurization. Removed unneccessary XMPPSession class.
[UPD] Recuded memory consumption.
[UPD] Seems like memory leaks fixed too, need test a bit longer
[UPD] Now running in forever-loop, use double Ctrl+C to quit
[ADD] Admin commands /sessions, /debug and /restart
[ADD] New config parameters: xmpp->debug to print XML stream and xmpp->admins[] to give access to above mentioned /commands
[ADD] We can now use memory profiler to get detailed memory usage information: run application with --profiler key (and also gem install memprof2) (yes, fucking leaks...)
[FIX] Fixed secret chat closing (I hope so...)
2019-05-04 23:17:29 +03:00
inc Release 1.0-beta1. Some more tests and here we go.. 2019-05-04 23:17:29 +03:00
lib Added libtdjson build for Debian Stretch x64 2019-04-07 22:19:20 +03:00
config.yml.example Release 1.0-beta1. Some more tests and here we go.. 2019-05-04 23:17:29 +03:00
LICENSE Added README.md & license 2019-04-16 07:53:31 +03:00
README.md Release 1.0-beta1. Some more tests and here we go.. 2019-05-04 23:17:29 +03:00
zhabogram.rb Release 1.0-beta1. Some more tests and here we go.. 2019-05-04 23:17:29 +03:00

Dependencies

  • Ruby >= 1.9
  • ruby-sqlite3 >= 1.3
  • xmpp4r == 0.5.6
  • tdlib-ruby == 2.0 with pre-compiled libtdjson.so
  • memprof2 == 0.1.2 (optional, if running with --profiler key to detailed memory usage information)

There is pre-compiled libtdjson.so for Debian Stretch x64 in repository.
For any other distro you need to manually compile tdlib and place libtdjson.so to relative lib/ directory (or LD_LIBRARY_PATH).

Installation

First of all, you need to create component listener on your Jabber server. For example, for ejabberd in /etc/ejabberd/ejabberd.yml:

listen:  
  -  
    port: 8888  
    module: ejabberd_service  
    access: all  
    shaper_rule: fast  
    ip: "127.0.0.1"  
    service_check_from: false  
    hosts:  
        "tlgrm.localhost":  
            password: "secret"

Next, rename config.yml.example to config.yml and edit xmpp section to match your component listener:

xmpp:
	db_path: 'users.db'  
	jid: 'tlgrm.localhost'  
	host: 'localhost'  
	port: 8888  
	secret: 'secret'  
	loglevel: 0   

Configuration

It is good idea to obtain Telegram API ID from https://my.telegram.org to remove demo key requests limit, and then edit in config.yml:

telegram:
    api_id: '845316' # telegram API ID (my.telegram.org) #
    api_hash: '27fe5224bc822bf3a45e015b4f9dfdb7' # telegram API HASH (my.telegram.org) #
    ...

How to receive files from Telegram

First of all, you need to set up web server that will serve some directory in your filesystem. Example nginx config:

server {
	listen 80;
	server_name tlgrm.localhost;
	location /content {
		alias /var/zhabogram;
	}
}

You need to set content_path and content_link in config.yml.

Set content_path according to location (for our example it will be /var/zhabogram/content).
Set content_link according to server_name (for our example it will be http://tlgrm.localhost)

How to send files to Telegram chats

You need to setup mod_http_upload for your XMPP server.
For example, for ejabberd in /etc/ejabberd/ejabberd.yml

modules:
  mod_http_upload:
    docroot: "/var/ejabberd/upload" # this must be a valid path, user ownership and SELinux flags must be set accordingly
    put_url: "https://xmpp.localhost:5443/upload/@HOST@"
    get_url: "https://xmppfiles.localhost/upload/@HOST@"
    access: local
    max_size: 500000000 #500 MByte
    thumbnail: false
    file_mode: "0644"
    dir_mode: "0744"

Then you need to setup nginx proxy that will serve get_url path, because Telegram will not handle URLs with non-default http(s) ports.
Example nginx config:

server {
	listen 80;
	listen 443 ssl;

	server_name xmppfiles.localhost;

        # SSL settigns #
        keepalive_timeout   60;
        ssl_certificate      /etc/ssl/domain.crt;
        ssl_certificate_key  /etc/ssl/domain.key;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  "RC4:HIGH:!aNULL:!MD5:!kEDH";
        add_header Strict-Transport-Security 'max-age=604800';

        location / {
            proxy_pass https://xmpp.localhost:5443;
        }	

}