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.