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

Uploaded Source

Built Distribution

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

Uploaded Python 3

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