Skip to content

Создание простого бота

Регистрация аккаунта

Для того, чтобы создавать ботов - мы будем пользоваться библиотекой mxbt. Установить её можно, вписав в терминал следующую команду:

pip install mxbt 
python -m pip install mxbt

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

bot.py

Переходим к Python. Для создания бота можно использовать любой понравившийся вам редактор. Создадим файл bot.py в котором будет храниться основная логика программы:

Импорт основных объектов

Для начала импортируем классы Bot, Context и Creds.

  • Bot - основной класс нашего бота, из которого наша программа будет подключаться к серверам Matrix.
  • Context - класс, хранящий в себе основную информацию о использованной команде.
  • Creds - класс, хранящий в себе данные для входа в учетную запись.
from mxbt import Bot, Context, Creds

Тело бота

Создаем экземпляр класса Bot. В него отправляем данные для входа, а также префикс бота.

Note

Префикс - подстрока, которая должна быть в начале каждой команды, чтобы она сработала.

bot = Bot(
    prefix='!',
    creds=Creds.from_json_file('credits.json')
)

Как видно, данные для входа мы подгружаем из отдельного файла - credits.json, вот его структура:

{
    "homeserver" : "https://matrix.org",
    "user_id" : "myusername",
    "password" : "mypassword"
}
bot = Bot(
    prefix='!',
    creds=Creds(
        homeserver="https://matrix.org",
        username="mybot",
        password="mypassword"
    )
)

Команда help

Warning

Все функции команд являются ассинхронными, как и большая часть функций в проектах на библиотеке mxbt. Имейте это ввиду.

При помощи бота создаем декоратор on_command, принимающий команду help, после чего создаем функцию, которая будет реагировать на эту команду. Для начала сделаем так, чтобы в ответ на эту команду, бот отправлял нам сообщение Привет!, используя метод reply у контекста.

  • ctx.reply - Пересылает отправленное сообщение и отвечает на него каким-либо текстом/файлом.
  • aliases - Список доступных имен для команды.
@bot.on_command(aliases=['help'])
async def help(ctx: Context):
    await ctx.reply("Привет!")

Запуск бота

Чтобы запустить бота, необходимо лишь воспользоваться встроенным у него методом run.

bot.run()

Теперь при запуске файла бот начнет свою работу и будет отвечать на команду !help.

Warning

При первом запуске придется подождать пару минут, поскольку происходит синхронизация со всеми комнатами, в которых состоит бот.

Итог

Таким образом мы реализовали простого бота, выполняющего созданные нами команды.

Полный код бота

from mxbt import Bot, Context, Creds

bot = Bot(
    prefix="!",                 # Standart command prefix, commands can setup it own prefix
    creds=Creds(
        homeserver="https://matrix.org",
        username="mybot",
        password="mypassword"
    )
)

@bot.on_command(prefix="?", aliases=["echo", "e"])  # Every command can setup it own prefix, it is optionaly
async def ctx_echo(ctx: Context) -> None:           # Context object contains main info about event
    await ctx.reply(ctx.body)                       # Reply message to event room

bot.run() # Run bot event loop