Расширение
Давайте вместе напишем ваш первый плагин на простом примере.
Посмотреть пример кода готового плагина вы можете тут.
Все расширения по умолчанию располагаются в директории extensions/.
Давайте создадим в нём новый файл с именем hello.py.
Именно в нём мы и будем писать код нашего будущего плагина.
Теперь, создадим экземпляр плагина:
from chioricord.plugin import ChioPlugin
plugin = ChioPlugin("Hello")Для того, чтобы бот смог загрузить наш плагин, ему нужен загрузчик. В конец нашего файла добавим следующую функцию.
@arc.loaderdef load_plugin(client: ChioClient) -> None: """Действия при загрузке плагина""" client.add_plugin(plugin)Данная функция будет запускаться на этапе загрузки всех плагинов. В будущем здесь вы сможете подключать настройки, базы данных, зависимости и много всего интересного.
Команды
Заголовок раздела «Команды»Конечно же самое главное для плагина, это команды. Так что давайте добавим первую команду для плагина:
@plugin.include@arc.slash_command("hello", description="Поприветствовать пользователя")async def hello_handler(ctx: ChioContext) -> None: """приветствует пользователя.""" await ctx.respond(f"Приветик, {ctx.author.mention}!")Если вы видите подобное впервые и раньше не работали с ботами, для вас может быть много всего непонятного. Давайте тогда разберёмся по порядку что тут происходит.
Для начала запомните простую вещь. Команда = функция. Когда вы хотите чтобы бот для вас что-то сделал, он запускает специальную функцию-обработчик.
async def hello_handler(ctx: ChioContext) -> None: await ctx.respond(f"Приветик, {ctx.author.mention}!")Как вы знаете, функции могут принимать аргументы, так и обработчик принимает контекст.
Контекст - объект, содержащий информацию об окружении, в котором был вызван обработчик.
К примеру он содержит:
- Автор команд.
- Время отправки.
- Чат и сервер, где была вызвана команда.
- И многое другое…
Но как вы понимаете, одной функции-обработчика мало. Как минимум у каждой команды есть имя, описание и прочие дополнительные параметры, которые нам стоит описать. Для этого используется декоратор.
@arc.slash_command("hello", description="Поприветствовать пользователя")ну и в конце, нам стоит оповестить плагин, что у него вообще есть такая команда. Вот для этого мы и используем последние декоратор, чтобы подключить команду к плагину:
@plugin.includeтеперь вы немного лучше разбираетесь в командах.
События
Заголовок раздела «События»События похожи на команды, с тем лишь отличием, что вместо контекста в них передаётся экземпляр события:
@plugin.listen(hikari.MessageCreateEvent)async def on_message(event: hikari.MessageCreateEvent) -> None: """Срабатывает на каждое сообщение"""Следующие шаги
Заголовок раздела «Следующие шаги»Поздравляю вас, вы изучили основы, конечно на этом всё не заканчивается:
- config: Добавление настроек для расширения.