Skip to main content

Telegram bot framework

Project description

Mewni is the python telegram bot framework

Установка

Поддерживаемая версия - Python 3.10 и выше

Важно! Если вы на Windows, то запускаете скрипт ниже из консоли запущенной с правами админимтратора, иначе скрипт не добавится в переменную PATH и команды ni и mewni работать не будут.

Напишите pip install mewni для установки пакета из 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 mewni 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 mewni import command, message

@command
async def start():
    msg = message()
    print(msg)

Запрос данных у пользователя

ask() Отсылает сообщение с просьбой ввести информацию и возвращает обьект сообщения с этой информацией.

from mewni 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 mewni import UserStore

class User(UserStore):
    # 'Петр' и 10 - это значение по умолчанию 
    name: str = 'Рома'
    age: int = 16
# bot/controllers/start.py
from mewni 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 mewni 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 mewni server
    • auth - authorize for mewni server for deploy
  • Implement plugins:
    • Role plugin
    • Admin plugin
    • Analytic plugin
    • Payment plugin
  • Add notification about startup and stopping for bot admins
  • Detach Mewni from specific service (Telegram) and make it universe:
    • Telegram
    • WhatsApp
    • Discord
    • Github
    • Twitter and others social networks
  • Draw logotype for Mewni project
  • Add choosing between requirements.txt and pyproject.toml files (poetry and pip options).

Project details


Release history Release notifications | RSS feed

This version

0.2

Download files

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

Source Distribution

mewni-0.2.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mewni-0.2-py3-none-any.whl (31.2 kB view details)

Uploaded Python 3

File details

Details for the file mewni-0.2.tar.gz.

File metadata

  • Download URL: mewni-0.2.tar.gz
  • Upload date:
  • Size: 23.4 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 mewni-0.2.tar.gz
Algorithm Hash digest
SHA256 ed3a113b769c02fa5ea6783e98118b4a8f13aeb7740b891f8eb85b70ab2ab728
MD5 1637de42e6af2537580338cd41f4e3d0
BLAKE2b-256 dddda7bac0500540c63c5a250ccec2aae1acc2401bbb39686760ba27be824ff2

See more details on using hashes here.

File details

Details for the file mewni-0.2-py3-none-any.whl.

File metadata

  • Download URL: mewni-0.2-py3-none-any.whl
  • Upload date:
  • Size: 31.2 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 mewni-0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9f7a6f9d0b6522dea1c5edc5a2ad398317451fafe02c7456990d5ea3e38a6a63
MD5 10b0228d19b67a5304cf529a22b7ec68
BLAKE2b-256 f324d41378d26aafa3802839fed6808c51bdba1839f36dd96e394db8d9684a03

See more details on using hashes here.

Supported by

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