Skip to main content

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 syntax name, 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
    • WhatsApp
    • 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

telgine-0.2.1.tar.gz (26.2 kB view details)

Uploaded Source

Built Distribution

telgine-0.2.1-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

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

Hashes for telgine-0.2.1.tar.gz
Algorithm Hash digest
SHA256 fcf351e8333567e75d26d6280b10a589b74257864651e93c0742e839e0bf4150
MD5 80a9d131325f4d040a71b6f183468d1c
BLAKE2b-256 76d09cd08cbe7505a6fda3a784e604adb247b53ca5b634304b8a0f4a31f5ef2f

See more details on using hashes here.

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

Hashes for telgine-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fa6756ff6cc713710209e7ea048485428850a60e45b8f79ddd023710114d2e7f
MD5 9b3c5f35e2ca4c91c1b163183b647ea5
BLAKE2b-256 e7dd0823381f013947db5f492c182654a18eb94a5bc0a8b7a45c315bd7db64c7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page