Skip to content

Module

go
type Module interface {
	Name() string
	Strings() map[string]string
	Init(client *CustomTelegramClient, db *Database) error
	ClientReady() error
	OnUnload() error
	OnDlmod() error
	Commands() map[string]CommandHandler
	Watchers() []WatcherHandler
}

goroku.Base を埋め込むと、NameCommands 以外の すべてのメソッドが手に入ります。

メソッド

Name() string

モジュールの識別名。.help.unloadmod、設定画面で使われ、ストレージの オーナーキーにもなります。読み込み済みモジュール間で一意である必要があります。

Strings() map[string]string

翻訳可能な文言。特別なキー接頭辞は 翻訳 を参照。Basenil を返し、それも有効です。

Init(client, db) error

登録時に一度、どのハンドラも動きうる前に呼ばれます。Base は既に ClientDBTranslator を埋めています。

エラーを返すと登録は中断され、モジュールは読み込まれません。

ClientReady() error

Telegram クライアントが接続した時点で呼ばれます。API を必要とする処理向けです。 Init は接続が存在する前に走ることがあります。

OnUnload() error

モジュールが取り外されるときに呼ばれます。ゴルーチンとハンドルを解放してください。

ここでの panic は回復されログに残り、取り外しはそのまま続きます。

OnDlmod() error

.dlmod での導入直後に呼ばれます。

Commands() map[string]CommandHandler

コマンド語からハンドラへの対応。キーは利用者がプレフィックスの後に入力するもので、 大文字小文字は区別しません。ウォッチャーだけのモジュールなら nil でも有効です。

Watchers() []WatcherHandler

すべてのメッセージで呼ばれるハンドラ。Basenil を返します。

ハンドラの型

go
type CommandHandler func(msg *Message) error
type WatcherHandler func(msg *Message) error

ライフサイクルの順序

生成 → Base の紐付け → Init → [登録完了] → ClientReady

                          コマンド / ウォッチャー

                                OnUnload

最小のモジュール

go
package modules

import "goroku/goroku"

type Ping struct{ goroku.Base }

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

func (m *Ping) Commands() map[string]goroku.CommandHandler {
	return map[string]goroku.CommandHandler{
		"ping": func(msg *goroku.Message) error { return msg.Answer("🏓 pong") },
	}
}

Base を使わない実装

Base は任意です。8つのメソッドをすべて自分で実装したモジュールもまったく同じ ように動きますし、Base が存在する前に書かれたモジュールも変更なしで読み込まれ 続けます。

Released under the GNU AGPL v3 License.