Установка модуля
Из файла
Отправьте .go-файл в любой чат, ответьте на него и напишите:
.loadmodGoroku соберёт его как нативный 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, в личном чате команда не сработает.