Metadata-Version: 2.1
Name: davtelepot
Version: 2.4.15
Summary: Telegram bot API mirroring class, featuring dataset-powered SQLite databases.
Home-page: https://gogs.davte.it/davte/davtelepot
Author: Davide Testa
Author-email: davide@davte.it
License: GNU General Public License v3.0
Description: # davtelepot
        This project conveniently mirrors the Telegram bot API with the class `Bot`.
        
        Please note that Python3.5+ is needed to run async code.
        
        Check requirements.txt for third party dependencies.
        
        Check out `help(Bot)` for detailed information.
        
        ## Project folders
        
        ### `davtelepot/data` folder
        * `config.py` contains configuration settings (e.g. certificate path, local_host, port etc.)
        * `passwords.py` contains secret information to be git-ignored (e.g. bot tokens)
        * `*.db` files are SQLite databases used by bots
        * `*.log`: log files (store log_file_name and errors_file_name in `data/config.py` module)
        
        ### `examples` folder
        This folder contains full-commented and ready-to-run examples for simple davtelepot.bot Telegram bots.
        
        ## Usage
        ```
        import sys
        
        from davtelepot.bot import Bot
        
        from data.passwords import my_token, my_other_token
        
        long_polling_bot = Bot(token=my_token, database_url='my_db')
        webhook_bot = Bot(token=my_other_token, hostname='example.com',
                          certificate='path/to/certificate.pem',
                          database_url='my_other_db')
        
        @long_polling_bot.command('/foo')
        async def foo_command(bot, update, user_record):
            return "Bar!"
        
        @webhook_bot.command('/bar')
        async def bar_command(bot, update, user_record):
            return "Foo!"
        
        exit_state = Bot.run(
            local_host='127.0.0.5',
            port=8552
        )
        sys.exit(exit_state)
        ```
        Check out `help(Bot)` for detailed information.
        
        ## Webhook additional information
        To run a bot in webhook modality, you have to provide a `hostname` and `certificate` at bot instantiation and a `local_host` and `port` when calling `Bot.run` method.
        * Telegram will send POST requests at `https://{hostname}/webhook/{tokens}/` using `certificate` for encryption
        * `aiohttp.web.Application` server will listen on `http://{local_host}:{port}` for updates
        
        It is therefore required a reverse proxy passing incoming requests to local_host.
        
        **Example of nginx reverse proxy serving this purpose**
        ```nginx
        server {
          listen 8553 ssl;
          listen [::]:8553 ssl;
        
          server_name example.com www.example.com;
        
          location /telegram/ {
             proxy_pass http://127.0.0.5:8552/;
          }
        
          ssl_certificate /path/to/fullchain.pem;
          ssl_certificate_key /path/to/privkey.pem;
        }
        
        ```
        
        **Example of python configuration file in this situation**
        ```python
        # File data/config.py, gitignored and imported in main script
        hostname = "https://www.example.com:8553/telegram"
        certificate = "/path/to/fullchain.pem"
        local_host = "127.0.0.5"
        port = 8552
        
        # Main script
        from data.config import hostname, certificate, local_host, port
        from data.passwords import bot_token
        from davtelepot.bot import Bot
        
        my_bot = Bot(
          token=bot_token,
          hostname=hostname,
          certificate=certificate
        )
        
        # ...
        
        Bot.run(
          local_host=local_host,
          port=port
        )
        ```
        
Keywords: telegram bot python asyncio async aiohttp
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Communications :: Chat
Description-Content-Type: text/markdown
