A library to build Telegram Bot with a privilege system.
Project description
privibot
This library provides decorators to restrict access to your Telegram bot handlers based on privileges given to users. The privileges are stored in a database through SQLAlchemy (SQLite, Postgres, etc.).
Requirements
privibot requires Python 3.6 or above.
To install Python 3.6, I recommend using pyenv
.
# install pyenv
git clone https://github.com/pyenv/pyenv ~/.pyenv
# setup pyenv (you should also put these three lines in .bashrc or similar)
export PATH="${HOME}/.pyenv/bin:${PATH}"
export PYENV_ROOT="${HOME}/.pyenv"
eval "$(pyenv init -)"
# install Python 3.6
pyenv install 3.6.8
# make it available globally
pyenv global system 3.6.8
Installation
With pip
:
python3.6 -m pip install privibot
With pipx
:
python3.6 -m pip install --user pipx
pipx install --python python3.6 privibot
Usage
To restrict access to a handler, decorate your callback functions like following:
from privibot import require_access, require_admin
@require_access
def callback_for_registered_users(update, context):
pass
@require_admin
def callback_for_admins_only(update, context):
pass
To use custom privileges, define them like so:
# privileges.py
from privibot import Privilege, Privileges as Ps
class Privileges(Ps):
MEDIA_MANAGER = Privilege(
name="media_manager",
verbose_name="Media Manager",
description="This privilege allows users to act (accept or reject) on media-related requests.",
)
USER_MANAGER = Privilege(
"user_manager", "User Manager", "This privilege allows users to manage access of other users to the bot."
)
TESTER = Privilege("tester", "Tester", "This privilege allows users to test new things.")
Now simply use these privileges with the decorator:
from privibot import require_privileges
from .privileges import Privileges
@require_privileges([Privileges.USER_MANAGER])
def callback_for_user_managers_only(update, context):
pass
You can also manually check for privileges like so:
from privibot import User
from .privileges import Privileges
def some_callback(update, context):
telegram_user = update.effective_user
db_user = User.get_with_id(telegram_user.id)
if db_user.has_privilege(Privileges.TESTER):
# do something
elif db_user.has_privileges([Privileges.MEDIA_MANAGER, Privileges.USER_MANAGER]):
# do something else
Users who do not pass the privilege test will receive a message saying they have been denied access.
Built-in handlers
This library also provides handlers and their callbacks for the following commands:
- /start
- /help
- /requestAccess
- /myPrivileges
- /grant
- /revoke
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file privibot-0.1.1.tar.gz
.
File metadata
- Download URL: privibot-0.1.1.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.17 CPython/3.6.8 Linux/5.3.7-arch1-1-ARCH
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 01d7320bfa9a7ddd8e86de6b72cdb1872271a94b46779f9d9188a4cd78cfac89 |
|
MD5 | b3e3fae0e95a5317db826cb1a1b12fa4 |
|
BLAKE2b-256 | 3fcd44e6f6dae156a5b759a049a76898986e970f38b06f6745606ed4a7da4801 |
File details
Details for the file privibot-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: privibot-0.1.1-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.17 CPython/3.6.8 Linux/5.3.7-arch1-1-ARCH
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa5cd667db385ef09806b29a4f5dcba812652a26b97091ed683221c6d1ecf017 |
|
MD5 | 88846d6e9cd6240afd098f85661aea98 |
|
BLAKE2b-256 | 0e98fb51a1afc7a8d5eb4c0e29668763980d7dcd41aa575d8659802cdb3e3d78 |