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>")
}

必須は NameCommands だけです。Strings はほぼ必ず欲しくなるので入って いますが、削除しても構いません。

導入する

ファイルを任意のチャットに送り、それに返信して次を送ります。

.loadmod

Goroku がネイティブの Go プラグインとしてコンパイルし、コマンドを登録します。 .weather hi がもう応答します。

ネイティブプラグインはあなたのプロセスで動きます

モジュールはユーザーボット内で、あなたの Telegram セッションとともに通常の Go コードとして動きます。ソースを読んだモジュールだけを導入してください。 モジュールの導入 を参照。

書き換える

ハンドラを編集して、新しいファイルを .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.