Skip to content

Первый модуль

Модуль Goroku — это структура на Go. Она объявляет своё имя и команды, которые обрабатывает; всё остальное — клиент Telegram, хранилище, переводы, жизненный цикл загрузки и выгрузки — приходит из goroku.Base.

Сгенерируйте заготовку

Отправьте в «Избранное»:

.newmod Weather

Goroku пришлёт Weather.go: рабочий модуль с заготовкой обработчика и подсказками по доступным хелперам прямо в комментариях. Начинать с пустого файла не придётся.

TIP

.newmod доступна только владельцу, а имя должно быть корректным именем типа Go — с заглавной буквы (Weather, не weather).

Что вы получите

go
package modules

import "goroku/goroku"

type Weather struct {
	goroku.Base
}

func (m *Weather) Name() string { return "Weather" }

func (m *Weather) Strings() map[string]string {
	return map[string]string{
		"name":             "Weather",
		"_cls_doc":         "What Weather does",
		"_cmd_doc_weather": "What .weather does",
		"no_args":          "❌ <b>Send some text or reply to a message</b>",
	}
}

func (m *Weather) Commands() map[string]goroku.CommandHandler {
	return map[string]goroku.CommandHandler{
		"weather": m.WeatherCmd,
	}
}

func (m *Weather) WeatherCmd(msg *goroku.Message) error {
	input := msg.ArgsOrReply()
	if input == "" {
		return msg.Answer(m.T("no_args", "❌ <b>Send some text or reply to a message</b>"))
	}
	return msg.Answer("<b>Weather got:</b> <code>" + input + "</code>")
}

Обязательны только Name и Commands. Strings есть в заготовке потому, что он нужен почти всегда, но его можно удалить.

Установите

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

.loadmod

Goroku соберёт его как нативный Go-плагин и зарегистрирует команду. .weather hi уже отвечает.

Нативные плагины работают в вашем процессе

Модуль выполняется как обычный код на Go внутри юзербота, с вашей сессией Telegram. Ставьте только те модули, чей исходник вы прочитали. См. Установка модуля.

Измените

Поправьте обработчик и снова .loadmod. Модуль с тем же именем структуры заменит работающий.

go
func (m *Weather) WeatherCmd(msg *goroku.Message) error {
	city := msg.Args()
	if city == "" {
		return msg.Answer(m.T("no_city", "❌ <b>Какой город?</b>"))
	}
	return msg.Answer("🌤 <b>" + city + "</b>: ясно, 22°C")
}

Дальше

Released under the GNU AGPL v3 License.