Telegram bot framework
Project description
telgine is the python telegram bot framework
Установка
Поддерживаемая версия - Python 3.10
и выше
Важно! Если вы на Windows, то запускаете скрипт ниже из консоли запущенной с правами админимтратора, иначе скрипт не добавится в переменную PATH
и команды ni
и telgine
работать не будут.
Напишите pip install telgine
для установки пакета из PyPI.
Для разработки этого пакета требуется установить Poetry командой pip install poetry
. Обязательно посмотрите документацию этого пакетного менеджера!
Напишите ni init superbot
для инициализации проекта.
Проект
Конфигурация
bot/config/env.py
Файл для описния переменных среды.
class EnvConfig:
BOT_NAME: str
BOT_TOKEN: str
ADMINS: list[int]
APP_HOST: str = 'localhost'
APP_PORT: int = 8443
DB_HOST: str
DB_PORT: int
DB_NAME: str
DB_USER: str
DB_PASSWORD: str
Взгляните на этот кусок кода:
APPHOST: str = 'localhost'
APP_HOST
это поле класса в которое будет подргужено значение из файла .env
по ключу APP_HOST
.
str
означает, что при подргрузке переменной, ее значение будет приведено к этому типу.
'localhost'
- это значение по умолчанию, которое будет использовано в случае отсутствия ключа или его значения в файле .env
Контроллеры
bot/controllers
- папака для контроллеров
Все контроллеры подгружаются и регистрируются автоматически при инициализации приложения.
from telgine import command, send
from bot.config import config
@command
async def start():
await send(f'Application started at {config.APP_HOST}:{config.APP_PORT}')
@command
- это декоратор, который помечает обработчик команд start()
как команду. Если вы отправите боту /start
, то он исполнит тело этого обработчика.
По умочанию за имя команду принимается название функции. Вы также можете изменить его изменив значение параметра name
.
Для добавления описания функции, которое будет отображатся в списке команд Telegram, используйте поле description
.
@command(name='start', description='Start this bot for you')
def rename_me(): pass
send()
- функция, которая отсылает текст пользователю бота, который вызвал обработку этого коллбека.
Получение данных от пользователя
Для получения данных и текста введеного пользователем, вызовите функцию message()
from telgine import command, message
@command
async def start():
msg = message()
print(msg)
Запрос данных у пользователя
ask()
Отсылает сообщение с просьбой ввести информацию и возвращает обьект сообщения с этой информацией.
from telgine import command, ask, send
@command
async def start():
name_msg = await ask('Введите ваше имя')
age_msg = await ask('Теперь введите ваш возраст')
print(name_msg)
print(age_msg)
send(f'Привет {name_msg.text}, которому {age_msg.text} лет')
Другие декораторы для создания контроллеров
@startup
- Запускает обработчик при запуске приложения
@halt
- Запускает обработчик при остановке приложения
@hear
- Запускает обработчик при получение сообщения с обычным текстом текста
Хранение данных вне обработчиков
Для сохранения данных введенных пользователем между вызовами разных обработчиков, нужно использовать UserStore
# bot/stores/user.py
from telgine import UserStore
class User(UserStore):
# 'Петр' и 10 - это значение по умолчанию
name: str = 'Рома'
age: int = 16
# bot/controllers/start.py
from telgine import ask, command
from bot.stores.User import User
@command
async def start():
name = await ask('Введите ваше имя')
age = await ask('Введите ваш возраст')
user = User()
user.name = name.text,
user.age = int(age.text)
@command
async def info():
user = User()
await send(f'Привет {user.name}, которому {user.age} лет')
Здесь класс User
- сохраняет данные не глобально для всех пользователей, а локально именно для этого пользователя в хранилеще по id
его чата в Storage
. По умолчанию используется MemoryStorage
, но потом мы добавим RedistStorage
, MongoStorage
и FileStorage
UserStore.clear()
- востанавливает значение хранилища к значениям по умолчанию, если их нет, то удаляет все данные для этого пользователя.
UserStore.delete()
- полностью удаляет данные этого хранилища для этого пользователя.
Tasks
- Implement modules autoimport
- Implement method
select(message: str, enum: Enum)
which send a message with selection and return option of enum and map selected option to value - Implement
LocalStorage()
with the same syntaxname, email, age = LocalStore()
which create storage for each user. For implementation need to use python AST. - Make architecture for this project
- Refactor all project
- Make documentation better
- Make errors better
- Make using Config class from project for type auto complete
- Add code formatter - black
- Set name to "bot" folder the same as project
- Make plugin system
- Add Template renderer
- Add
@startup
,@stop
decorators - Add
@hear
decorator - Add the ability to work with inline query
- Add checking for existence value in .env file. If value is not defined then raise error
- Colorize output
- Make beautiful serve message
- Add the ability to adding other threads to app
- Add
@middleware
decorator - Add
@filter
decorator - Add questions to init project command
- Add auto db injection to peewee models
- Change every event syntax
- Implement overwrite default
/help
command text and reaction for it - Implement
/myuserid
command for improve user experience - Implement
setcommand()
function for showing commands at list - Schedulling with localization
- Add logging with structuring for years, month and days
- Buy website for telgine project
- Make additional cli commands:
-
generate
- generate something project items -
start
- start server -
dev
- start server with auto reloading -
build
- compile all project to one .pyc file -
deploy
- deploy bot to telgine server -
auth
- authorize for telgine server for deploy
-
- Implement plugins:
- Role plugin
- Admin plugin
- Analytic plugin
- Payment plugin
- Add notification about startup and stopping for bot admins
- Detach telgine from specific service (Telegram) and make it universe:
- Telegram
- Discord
- Github
- Twitter and others social networks
- Draw logotype for telgine project
- Add choosing between requirements.txt and pyproject.toml files (poetry and pip options).
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 telgine-0.2.1.tar.gz
.
File metadata
- Download URL: telgine-0.2.1.tar.gz
- Upload date:
- Size: 26.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/17.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fcf351e8333567e75d26d6280b10a589b74257864651e93c0742e839e0bf4150 |
|
MD5 | 80a9d131325f4d040a71b6f183468d1c |
|
BLAKE2b-256 | 76d09cd08cbe7505a6fda3a784e604adb247b53ca5b634304b8a0f4a31f5ef2f |
File details
Details for the file telgine-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: telgine-0.2.1-py3-none-any.whl
- Upload date:
- Size: 35.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.10.4 Darwin/17.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa6756ff6cc713710209e7ea048485428850a60e45b8f79ddd023710114d2e7f |
|
MD5 | 9b3c5f35e2ca4c91c1b163183b647ea5 |
|
BLAKE2b-256 | e7dd0823381f013947db5f492c182654a18eb94a5bc0a8b7a45c315bd7db64c7 |