Перший модуль
Модуль Goroku — це структура на Go. Вона оголошує своє ім'я та команди, які обробляє; усе інше — клієнт Telegram, сховище, переклади, життєвий цикл завантаження й вивантаження — приходить із goroku.Base.
Згенеруйте заготовку
Надішліть у «Збережене»:
.newmod WeatherGoroku надішле Weather.go: робочий модуль із заготовкою обробника та підказками щодо доступних хелперів прямо в коментарях. Починати з порожнього файлу не доведеться.
TIP
.newmod доступна лише власнику, а ім'я має бути коректним іменем типу Go — з великої літери (Weather, не weather).
Що ви отримаєте
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 є в заготовці тому, що він потрібен майже завжди, але його можна видалити.
Встановіть
Надішліть файл у будь-який чат, відповідайте на нього й напишіть:
.loadmodGoroku збере його як нативний Go-плагін і зареєструє команду. .weather hi уже відповідає.
Нативні плагіни працюють у вашому процесі
Модуль виконується як звичайний код на Go всередині юзербота, з вашою сесією Telegram. Встановлюйте лише ті модулі, чий вихідний код ви прочитали. Див. Встановлення модуля.
Змініть
Виправте обробник і знову .loadmod. Модуль із тим самим іменем структури замінить робочий.
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")
}Далі
- Будова модуля — навіщо потрібен кожен метод
- Команди — аліаси, обмеження, ліміти
- Сховище — пам'ятати дані між перезапусками