К содержимому

Расширение

Давайте вместе напишем ваш первый плагин на простом примере.

Посмотреть пример кода готового плагина вы можете тут.

Все расширения по умолчанию располагаются в директории extensions/. Давайте создадим в нём новый файл с именем hello.py. Именно в нём мы и будем писать код нашего будущего плагина.

Теперь, создадим экземпляр плагина:

from chioricord.plugin import ChioPlugin
plugin = ChioPlugin("Hello")

Для того, чтобы бот смог загрузить наш плагин, ему нужен загрузчик. В конец нашего файла добавим следующую функцию.

@arc.loader
def 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: Добавление настроек для расширения.