Package: mewni
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Файл для описния переменных среды.classEnvConfig:BOT_NAME:strBOT_TOKEN:strADMINS:list[int]APP_HOST:str='localhost'APP_PORT:int=8443DB_HOST:strDB_PORT:intDB_NAME:strDB_USER:strDB_PASSWORD:strВзгляните на этот кусок кода:APPHOST:str='localhost'APP_HOSTэто поле класса в которое будет подргужено значение из файла.envпо ключуAPP_HOST.strозначает, что при подргрузке переменной, ее значение будет приведено к этому типу.'localhost'- это значение по умолчанию, которое будет использовано в случае отсутствия ключа или его значения в файле.envКонтроллерыbot/controllers- папака для контроллеров
Все контроллеры подгружаются и регистрируются автоматически при инициализации приложения.frommewniimportcommand,sendfrombot.configimportconfig@commandasyncdefstart():awaitsend(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')defrename_me():passsend()- функция, которая отсылает текст пользователю бота, который вызвал обработку этого коллбека.Получение данных от пользователяДля получения данных и текста введеного пользователем, вызовите функциюmessage()frommewniimportcommand,message@commandasyncdefstart():msg=message()print(msg)Запрос данных у пользователяask()Отсылает сообщение с просьбой ввести информацию и возвращает обьект сообщения с этой информацией.frommewniimportcommand,ask,send@commandasyncdefstart():name_msg=awaitask('Введите ваше имя')age_msg=awaitask('Теперь введите ваш возраст')print(name_msg)print(age_msg)send(f'Привет{name_msg.text}, которому{age_msg.text}лет')Другие декораторы для создания контроллеров@startup- Запускает обработчик при запуске приложения@halt- Запускает обработчик при остановке приложения@hear- Запускает обработчик при получение сообщения с обычным текстом текстаХранение данных вне обработчиковДля сохранения данных введенных пользователем между вызовами разных обработчиков, нужно использоватьUserStore# bot/stores/user.pyfrommewniimportUserStoreclassUser(UserStore):# 'Петр' и 10 - это значение по умолчаниюname:str='Рома'age:int=16# bot/controllers/start.pyfrommewniimportask,commandfrombot.stores.UserimportUser@commandasyncdefstart():name=awaitask('Введите ваше имя')age=awaitask('Введите ваш возраст')user=User()user.name=name.text,user.age=int(age.text)@commandasyncdefinfo():user=User()awaitsend(f'Привет{user.name}, которому{user.age}лет')Здесь классUser- сохраняет данные не глобально для всех пользователей, а локально именно для этого пользователя в хранилеще поidего чата вStorage. По умолчанию используетсяMemoryStorage, но потом мы добавимRedistStorage,MongoStorageиFileStorageUserStore.clear()- востанавливает значение хранилища к значениям по умолчанию, если их нет, то удаляет все данные для этого пользователя.UserStore.delete()- полностью удаляет данные этого хранилища для этого пользователя.TasksImplement modules autoimportImplement methodselect(message: str, enum: Enum)which send a message with selection and return option of enum and map selected option to valueImplementLocalStorage()with the same syntaxname, email, age = LocalStore()which create storage for each user. For implementation need to use python AST.Make architecture for this projectRefactor all projectMake documentation betterMake errors betterMake using Config class from project for type auto completeAdd code formatter - blackSet name to "bot" folder the same as projectMake plugin systemAdd Template rendererAdd@startup,@stopdecoratorsAdd@heardecoratorAdd the ability to work with inline queryAdd checking for existence value in .env file. If value is not defined then raise errorColorize outputMake beautiful serve messageAdd the ability to adding other threads to appAdd@middlewaredecoratorAdd@filterdecoratorAdd questions to init project commandAdd auto db injection to peewee modelsChange every event syntaxImplement overwrite default/helpcommand text and reaction for itImplement/myuseridcommand for improve user experienceImplementsetcommand()function for showing commands at listSchedulling with localizationAdd logging with structuring for years, month and daysBuy website for mewni projectMake additional cli commands:generate- generate something project itemsstart- start serverdev- start server with auto reloadingbuild- compile all project to one .pyc filedeploy- deploy bot to mewni serverauth- authorize for mewni server for deployImplement plugins:Role pluginAdmin pluginAnalytic pluginPayment pluginAdd notification about startup and stopping for bot adminsDetach Mewni from specific service (Telegram) and make it universe:TelegramWhatsAppDiscordGithubTwitter and others social networksDraw logotype for Mewni projectAdd choosing between requirements.txt and pyproject.toml files (poetry and pip options).