Простой бот для синхронизации vk чата и discord сервера. Использует disnake, vkbottle и Tortoise ORM. Для хранения некоторых изображений используется freeimagehost.
Вам понадобится установленный Python 3.9 и git.
Склонируйте репозиторий:
$ git clone https://github.com/valeriy131100/Maremi
Создайте в этой папке виртуальное окружение:
$ cd Maremi
$ python3 -m venv venv
Активируйте виртуальное окружение и установите зависимости:
$ source venv/bin/activate
$ pip install -r requirements.txt
Заполните файл .env.example и переименуйте его в .env или иным образом передайте переменные среды:
- VK_TOKEN - токен для вк-бота.
- VK_PREFIX - префикс вк-бота, по умолчанию -
/
. - VK_ALIAS_PREFIX - префикс вк-бота для алиасов каналов, по умолчанию -
#
. - VK_GROUP_ID - id группы вконтакте в которой запущен бот.
- VK_CHECK_MESSAGES_INTERVAL - частота проверки сообщений вк для синхронного удаления в секундах. Не ставьте слишком маленькое значение, вк апи это не любит. По умолчанию - 1 минута.
- DISCORD_TOKEN - токен для дискорд-бота.
- DISCORD_PREFIX - префикс дискорд-бота, по умолчанию -
m.
. - DATABASE - путь до базы данных в формате строки подключения TortoiseORM, по умолчанию - sqlite://servers2.db. Из-за того, что aerich поддерживает только миграции в виде чистого SQL, гарантируется поддержка только SQLite.
- FREEIMAGEHOST_KEY - токен FreeImageHost.
После задания переменных среды примените миграции к базе данных:
$ source venv/bin/activate
$ aerich upgrade
На сервере и в чате у ботов должен быть полный доступ к сообщениям, дискорд-боту необходимы также права для управления сообщениями и вебхуками. В будущем возможно понадобится администрирование.
Находясь в директории Maremi исполните:
$ venv/bin/python main.py
Бот запустится.
Команды указаны с префиксами по умолчанию.
- Discord
- m.help - возвращает список команд.
- m.connect <chat_id> - подключает сервер к чату ВК. Устанавливает текущий канал как канал по умолчанию.
- m.nickname <nickname> - устанавливает никнейм, который будет использоваться при отправке сообщений в вк.
- m.nickname remove - удаляет никнейм.
- m.alias <alias> - устанавливает алиас для текущего канала. В алиасы можно отправлять сообщения через вк бота с помощью #<alias>.
- m.alias remove <alias> - удаляет алиас <alias>.
- m.default - устанавливает текущий канал как канал для команды /send.
- m.art - устанавливает текущий канал как канал для команды /art.
- m.duplex - устанавливает текущий канал как канал для дуплекса (режим когда сообщения автоматически отсылаются из ВК в Дискорд и обратно).
- m.split <ref_message> - разделяет сообщение с вложениями на отдельные. Необходимо переслать с командой оригинальное сообщение.
- m.gallery [ref_message|attachments] [n|noninvite] - превращает текущее или пересланное сообщение в интерактивную галерею. Если передан аргумент noninvite, то создает галерею без сообщения-приглашения.
- m.reload - перезагружает сообщение из вк (полностью заново генерирует его содержимое)
- VK
- /help - возвращает список команд.
- /nickname <nickname> - устанавливает никнейм, который будет использоваться при отправке сообщений в дискорд.
- /removenickname - удаляет никнейм.
- /makeonline - дает возможность подключить этот чат к серверу в дискорде. Возвращает команду для подключения.
- /makeoffline - убирает возможность подключить этот чат к серверу.
- /send - отсылает сообщение в канал default.
- /art - отсылает сообщение в канал art.
- #<alias> - отсылает сообщение в канал с указанным алиасом.
- Любое сообщение без префикса - отсылает в канал duplex, если таковой есть.
- Автор совершенно не знаком с асинхронным программированием и async и await везде понатыканы просто из-за библиотек ботов. Не пытайтесь запускать много серверов или использовать бота на крупных серверах, это может иметь непредсказуемые последствия. Также в боте сейчас нет абсолютно никакой проверки ролей, а соединение сервера и чата весьма небезопасно.
- Код лицензирован под MIT, делайте с ним что хотите, лишь бы он не обрел сознание :)
- Проект написан лишь для удобства общения с группой друзей и находится в глубокой альфе, так что фичи еще будут добавляться и перерабатываться.