Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/licht1stein/ptb-firebase-persistence

python-telegram-bot firebase persistence
https://github.com/licht1stein/ptb-firebase-persistence

Last synced: about 2 months ago
JSON representation

python-telegram-bot firebase persistence

Awesome Lists containing this project

README

        

![](https://github.com/python-telegram-bot/logos/blob/master/logo/png/ptb-logo_240.png?raw=true)
# Firebase Persistence for [python-telegram-bot](https://python-telegram-bot.org/)
![PyPI](https://img.shields.io/pypi/v/ptb-firebase-persistence)

This is an implementation of python-telegram-bot [BasePersistence](https://python-telegram-bot.readthedocs.io/en/stable/telegram.ext.basepersistence.html?highlight=basepersistence)
class that uses [Google Firebase](https://firebase.google.com/) as persistence back-end.
This has a very nice advantage of being able to look at your `user_data`, `chat_data`, `bot_data`
and `convesations` real-time using the firebase web app.

# Installation
The library obviously requires (but does not install) python-telegram-bot. It also requires *and installs*
officeial library foor Google Firebase: [firebase-admin](https://firebase.google.com/docs/admin/setup/)

```bash
pip install ptb-firebase-persistence
```

# Usage

## Before you start: obtain credentials from firebase
First of all you need to obtain firebase credentials, that look like this:

```json
{
"type": "service_account",
"project_id": "YOUR_ID",
"private_key_id": "YOUR_PRIVATE_KEY",
"private_key": "-----BEGIN PRIVATE KEY-----\nMII...EwQ=\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-SOME_STRING@SOME_DOMAIN.iam.gserviceaccount.com",
"client_id": "11743776666698009",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-SOMES_STRING.iam.gserviceaccount.com"
}
```

and the firebase database url that looks like this, something like `https://YOUR_APP.firebaseio.com`

## Instantiation

### From environment variables (recommended)
Store the database URL in an environment variable `FIREBASE_URL` and the config as a json string in an environment variable
`FIREBASE_CREDENTIALS`.

After that instantiation is as easy as:

```python
from ptb_firebase_persistence import FirebasePersistence
from telegram.ext import Updater

my_persistence = FirebasePersistence.from_environment()

updater: Updater = Updater(
'BOT_TOKEN',
persistence=my_persistence,
use_context=True,
)
```

### Direct instantiation
You can also just pass the firebase credentials as URL as simple init params:

```python
from ptb_firebase_persistence import FirebasePersistence
from telegram.ext import Updater

my_persistence = FirebasePersistence(database_url='YOUR_DATABASE_URL', credentials='YOUR_CREDENTIALS_DICT')

updater: Updater = Updater(
'BOT_TOKEN',
persistence=my_persistence,
use_context=True,
)
```

That's it! You can now watch your data change live on Firebase.