You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
bodqhrohro 083f207f7c
Add README
4 years ago
config Catch timeout setting 4 years ago
persistence Relogin fix 4 years ago
telegram Migrate some comments from Zhabogram; change queue behaviour 4 years ago
test Presence/iq handling and rudimental telegram client 5 years ago
xmpp Migrate some comments from Zhabogram; change queue behaviour 4 years ago
yamldb Save sessions on exit 5 years ago
.gitignore Relogin fix 4 years ago
Makefile Add tests for sessions 4 years ago
README.md Add README 4 years ago
config.yml.example Catch timeout setting 4 years ago
config_schema.json Presence/iq handling and rudimental telegram client 5 years ago
go.mod Implement an own authorizer 4 years ago
go.sum Telegram authorization 4 years ago
log.go Set logging level for Logrus and TDlib from config 5 years ago
log_test.go Tests for log constants 5 years ago
telegabber.go Migrate some comments from Zhabogram; change queue behaviour 4 years ago

README.md

Telegabber: like Zhabogram, but in Go!

Now it's native, more asynchronous, and does not require to mess your server up with a monstrous third-party interpreter.

The configuration file is compatible with Zhabogram 2.0, so you can easily copy your existing config.yml.

Build

Prerequisites: Go links the binary against the glibc version present in the system where the build process happens, so it should be less or equal to the version of glibc in the system where Telegabber will run.

  • Build TDLib according to TDLib build instructions.
  • Install Go (tested with 1.13, but may work with earlier versions too).
  • Open the source dir in a new shell (to make sure that $GOPATH works) and run make. Dependencies will be installed automatically.

After a successful build, you get a single binary to deploy on your server.

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 'users.db'  
	jid: 'tlgrm.localhost'  
	host: 'localhost'  
	port: 8888  
	secret: 'secret'  
	loglevel: :warn   

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:
    :tdlib:
        :lib_path: 'lib/'
        :client:
            :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 :link: config.yml.

Set :path: according to location (for our example it will be /var/zhabogram/content).
Set :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;
    }	

}


Finally, update `:upload:` in your config.yml to match `server_name` in nginx config.