Skip to main content

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).

Release files for mewni 0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mewni 0.2
File Size Uploaded
mewni-0.2.tar.gz 23.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mewni 0.2
File Interpreter ABI Platform
mewni-0.2-py3-none-any.whl Python 3 none any Details

Total release size: 54.6 kB

Release files / mewni-0.2.tar.gz

Download URL mewni-0.2.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ed3a113b769c02fa5ea6783e98118b4a8f13aeb7740b891f8eb85b70ab2ab728
BLAKE2b-256 checksum
How to use checksums
dddda7bac0500540c63c5a250ccec2aae1acc2401bbb39686760ba27be824ff2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.4 Darwin/17.7.0

Release files / mewni-0.2-py3-none-any.whl

Download URL mewni-0.2-py3-none-any.whl
Size 31.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9f7a6f9d0b6522dea1c5edc5a2ad398317451fafe02c7456990d5ea3e38a6a63
BLAKE2b-256 checksum
How to use checksums
f324d41378d26aafa3802839fed6808c51bdba1839f36dd96e394db8d9684a03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.4 Darwin/17.7.0

Release history Release notifications | RSS feed

This release

0.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page