Skip to content

Установка модуля

Из файла

Отправьте .go-файл в любой чат, ответьте на него и напишите:

.loadmod

Goroku соберёт его как нативный Go-плагин, зарегистрирует команды и запомнит, чтобы загрузить при следующем старте.

Алиасы: .lm

По ссылке

.dlmod https://example.com/Weather.go

Или по имени, из настроенного репозитория:

.dlmod Weather

Алиасы: .dlm

Скачивание только по HTTPS. Приватные, loopback, link-local и CGNAT-адреса отклоняются, причём проверяется разрешённый IP, а не только имя хоста.

Удаление

.unloadmod Weather

Алиасы: .ulm

Выгрузка не выгружает код

Go не умеет выгружать загруженный плагин из памяти. .unloadmod снимает регистрацию обработчиков, и модуль перестаёт что-либо получать, но его код остаётся в процессе до перезапуска. Для чистого состояния после удаления перезапуститесь через .restart.

Репозитории

.addrepo https://raw.githubusercontent.com/user/modules/main
.delrepo https://raw.githubusercontent.com/user/modules/main

После этого .dlmod <имя> ищет по настроенным репозиториям.

Перед установкой чужого модуля

Нативный модуль — это обычный код на Go внутри вашего процесса юзербота, с вашей сессией Telegram и правами вашего сервера. Он может читать все сообщения, доступные аккаунту, писать от вашего имени, читать файлы и открывать сетевые соединения. Песочницы нет.

Сначала прочитайте исходник. Конкретно:

  • Отправляет ли он данные туда, куда вы не ожидали? Ищите http., net..
  • Запускает ли внешние программы? Ищите exec..
  • Трогает ли файлы за пределами своего хранилища? Ищите os..
  • Регистрирует ли вотчер? Тот видит каждое доступное вам сообщение.

.eval не безопаснее: он выполняется внутри процесса бота через Yaegi с живыми клиентом, базой и загрузчиком, а прервать Yaegi нельзя — зависший код жжёт горутину до рестарта. Поэтому команда доступна только владельцу.

Что делать, если не работает

«module X is already registered» — модуль с таким именем уже загружен. Сначала .unloadmod X.

«command collision: y» — команда или алиас уже заняты другим модулем. Переименуйте свою; Goroku откажет, а не перекроет чужую молча.

Ошибки компиляции — номера строк относятся к вашему файлу. Исправьте и снова .loadmod.

Модуль загрузился, но ничего не делает — проверьте через .help, что команда действительно зарегистрирована. Если в CommandMetas стоит ограничение вроде OnlyGroups, в личном чате команда не сработает.

Released under the GNU AGPL v3 License.