Package: mable
mableДокументация в разработке оповещение будет в дсСамоуверенный, статически типизированный микро-фреймворк Discord для Python3 и asyncio, который поддерживает REST версии Discord v10 и
API-интерфейсы шлюза.Построенный на благих намерениях и надежде, что он будет расширяемым и многоразовым, а не препятствием для будущего
развития.В настоящее время поддерживаются Python 3.8, 3.9, 3.10 и 3.11.InstallationУстановите marble из PyPI с помощью следующей команды:python-mpipinstall-Umable# Windows users may need to run this instead...py-3-mpipinstall-UmableBotsmarble предоставляет две различные реализации бота по умолчанию в соответствии с вашими потребностями:GatewayBotRESTBotGatewayBotШлюзовой бот - это тот, который будет подключаться к Discord через шлюз и получать
события через него. Простым примером запуска может быть следующий:importmablebot=mable.GatewayBot(token="...")@bot.listen()asyncdefping(event:mable.GuildMessageCreateEvent)->None:#If a non-bot user mentions your bot, respond with 'Pong!'.# Do not respond to bots nor webhooks pinging us, only user accountsifnotevent.is_human:returnme=bot.get_me()ifme.idinevent.message.user_mentions_ids:awaitevent.message.respond("Pong!")bot.run()Это будет отвечать только на сообщения, созданные в гильдиях. Вместо этого вы можете использоватьDM Message Create Event, чтобы прослушивать только
Dm илиMessage Create Eventдля прослушивания как DMS, так и сообщений от гильдии.Если вы хотите настроить используемые намерения, чтобы изменить, о каких событиях уведомляется ваш бот, то вы
можете передать kwargintentsконструкторуGateway Bot:importmable# the default is to enable all unprivileged intents (all events that do not target the# presence, activity of a specific member nor message content).bot=mable.GatewayBot(intents=mable.Intents.ALL,token="...")Приведенный выше пример включил бы все намерения, тем самым позволяя получать события, связанные с присутствием участников
(сначала вам нужно будет внести свое приложение в белый список, чтобы иметь возможность запустить бота, если вы это сделаете).События определяются аннотацией типа в параметре event или, альтернативно, как тип, передаваемый
декоратору@bot.listen(), если вы не хотите использовать подсказки типа.importmablebot=mable.GatewayBot("...")@bot.listen()asyncdefping(event:mable.MessageCreateEvent):...# or@bot.listen(mable.MessageCreateEvent)asyncdefping(event):...RESTBotТестовый
бот создает сервер взаимодействия, на который Discord будет ** отправлять только ** события взаимодействия,
которые можно обрабатывать и на которые можно реагировать.Примером простого "REST Both" может быть следующее:importasyncioimportmable# This function will handle the interactions receivedasyncdefhandle_command(interaction:mable.CommandInteraction):# Create an initial response to be able to take longer to respondyieldinteraction.build_deferred_response()awaitasyncio.sleep(5)# Edit the initial responseawaitinteraction.edit_initial_response("Edit after 5 seconds!")# Register the commands on startup.## Note that this is not a nice way to manage this, as it is quite spammy# to do it every time the bot is started. You can either use a command handler# or only run this code in a script using `RESTApp` or add checks to not update# the commands if there were no changesasyncdefcreate_commands(bot:mable.RESTBot):application=awaitbot.rest.fetch_application()awaitbot.rest.set_application_commands(application=application.id,commands=[bot.rest.slash_command_builder("test","My first test command!"),],)bot=mable.RESTBot(token="...",token_type="...",public_key="...",)bot.add_startup_callback(create_commands)bot.set_listener(mable.CommandInteraction,handle_command)bot.run()В отличие отGatewayBot, регистрация слушателей выполняется через.set_listener, и она принимает тип взаимодействия
, который будет принимать обработчик.Обратите внимание, что для того, чтобы приведенный выше код заработал, требуется небольшая настройка. Вам нужно будет разместить проект во
Всемирной паутине (страшно!), а затем зарегистрировать URL-адрес напортале приложений Discordдля вашего приложения в разделе "URL конечной точки взаимодействия".Быстрый способ загрузить своего бота в Интернет и сделать его доступным через Discord (** только для среды разработки **) -это
с помощью такого инструмента, какngrokилиlocalhost.run. Более подробную информацию о том, как их использовать, можно найти на их соответствующих веб-сайтах.Common helpful featuresОбе реализации используют полезные аргументы, такие как настройка тайм-аутов для запросов
и включение прокси-сервера,
которые передаются непосредственно боту во время инициализации.Также обратите внимание, что вы могли бы передать дополнительные параметрыbot.runво время разработки, например:importmablebot=mable.GatewayBot("...")# orbot=mable.RESTBot("...","...")bot.run(asyncio_debug=True,# enable asyncio debug to detect blocking and slow code.coroutine_tracking_depth=20,# enable tracking of coroutines, makes some asyncio# errors clearer.propagate_interrupts=True,# Any OS interrupts get rethrown as errors.)Существует множество других полезных опций, которыми вы можете воспользоваться, если пожелаете. Ссылки на соответствующие документы можно увидеть
ниже:GatewayBot.run - ранее было сказано документация в разработке как только будет готово будет оповещениеRESTBot.run - ранее было сказано документация в разработке как только будет готово будет оповещениеREST-only applicationsВозможно, вы захотите интегрироваться только с REST API, например, при написании веб-панели мониторинга.Это относительно просто сделать:importmableimportasynciorest=mable.RESTApp()asyncdefprint_my_user(token):awaitrest.start()# We acquire a client with a given token. This allows one REST app instance# with one internal connection pool to be reused.asyncwithrest.acquire(token)asclient:my_user=awaitclient.fetch_my_user()print(my_user)awaitrest.close()asyncio.run(print_my_user("user token acquired through OAuth here"))Optional FeaturesДополнительные функции могут быть указаны при установке mable:server- Установите зависимости, необходимые для включения стандартной функциональности сервера взаимодействия mable (REST Both).speedups- подробно описано вmable[speedups].Пример:# To install mable with the speedups feature:python-mpipinstall-Umable[speedups]# To install mable with both the speedups and server features:python-mpipinstall-Umable[speedups,server]Additional resourcesВозможно, вы захотите использовать командный фреймворк поверх marble, чтобы вы могли быстро начать писать бота, не
внедряя свой собственный обработчик команд.mable по умолчанию не включает в себя командную платформу, поэтому для этого вам потребуется выбрать стороннюю библиотеку:Повышение эффективности вашего приложенияПо мере масштабирования вашего приложения вам, возможно, потребуется скорректировать некоторые параметры, чтобы оно работало нормально.Флаги оптимизации на PythonCPython предоставляет два флага оптимизации, которые удаляют внутренние проверки безопасности, полезные для разработки, и изменяют
другие внутренние настройки в интерпретаторе.питон bot.py- без оптимизации - это значение по умолчанию.python -O bot.py- оптимизация первого уровня - такие функции, как внутренние утверждения, будут отключены.питон -ОО bot.py- оптимизация второго уровня - дополнительные функции (** включая все строки документации **) будут удалены из
загруженный код во время выполнения.При запуске ботов в производственной среде рекомендуется минимум первый уровень оптимизации.Не стесняйтесь также присоединяться к нашемуDiscord, чтобы напрямую задавать вопросы сопровождающим! Они будут
будем рады помочь вам и направить в правильном направлении.