Skip to content

Base

go
type Base struct {
	Client     *CustomTelegramClient
	DB         *Database
	Translator *Translator
}

これを埋め込めば、モジュールに必要なのは NameCommands だけになります。

go
type Weather struct{ goroku.Base }

フィールド

フィールド用途
ClientTelegram API — ファイル送信、ピア解決、インラインマネージャ
DB永続ストレージ。ストレージ を参照
TranslatorT の土台。直接触ることはまれです

3つとも、ローダーが Init前に埋めます。したがって InitClientReady、 コマンド、ウォッチャーのいずれからも使えます。

メソッド

T(key, def string) string

key の訳、無ければ def を返します。以前は各モジュールにコピーされていた getTrans ヘルパーを置き換えます。

go
return msg.Answer(m.T("no_city", "❌ <b>どの都市ですか?</b>"))

解決は goroku.modules.<名前>.<key> を、モジュール名そのまま・小文字・snake_case の順で試し、続いて TranslationAliases を試します。

nil の Base でも、未登録のモジュールでも安全で、その場合は def を返します。

Init(client, db) error

フィールドを配線して nil を返します。自由に上書きしてください。

go
func (m *Weather) Init(client *goroku.CustomTelegramClient, db *goroku.Database) error {
	if err := m.Base.Init(client, db); err != nil {
		return err
	}
	m.cache = make(map[string]string)
	return nil
}

ローダーは Init より前にフィールドを埋めるので、通常運用では m.Base.Init の 呼び出しは冗長です。それでも残してください。テストで直接生成したときにも動くように なります。

ClientReady() / OnUnload() / OnDlmod() error

nil を返します。必要なものだけ上書きしてください。

Strings() map[string]string

nil を返します。文言を宣言するには上書きします。

Watchers() []WatcherHandler

nil を返します。すべてのメッセージを見るには上書きします。

NewBase

go
func NewBase(client *CustomTelegramClient, db *Database) Base

ローダー経由で登録されず、手で生成するモジュール向けです。内部ヘルパーやテストで 使います。

go
mod := &Weather{Base: goroku.NewBase(client, db)}

埋め込み側のモジュールがここでは分からないため、登録されるまで T は既定値を 返します。

名前の衝突

構造体に既に ClientDBTranslator という名前のフィールドがある場合、 Base を埋め込むと名前が曖昧になります。自分のフィールドを改名するか、 m.Base.Client のように埋め込み構造体を明示して参照してください。

Released under the GNU AGPL v3 License.