102 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package telegram
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"strings"
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"github.com/micro/cli"
 | 
						|
	"github.com/micro/go-micro/agent/input"
 | 
						|
	"gopkg.in/telegram-bot-api.v4"
 | 
						|
)
 | 
						|
 | 
						|
type telegramInput struct {
 | 
						|
	sync.Mutex
 | 
						|
 | 
						|
	debug     bool
 | 
						|
	token     string
 | 
						|
	whitelist []string
 | 
						|
 | 
						|
	api *tgbotapi.BotAPI
 | 
						|
}
 | 
						|
 | 
						|
type ChatType string
 | 
						|
 | 
						|
const (
 | 
						|
	Private    ChatType = "private"
 | 
						|
	Group      ChatType = "group"
 | 
						|
	Supergroup ChatType = "supergroup"
 | 
						|
)
 | 
						|
 | 
						|
func init() {
 | 
						|
	input.Inputs["telegram"] = &telegramInput{}
 | 
						|
}
 | 
						|
 | 
						|
func (ti *telegramInput) Flags() []cli.Flag {
 | 
						|
	return []cli.Flag{
 | 
						|
		cli.BoolFlag{
 | 
						|
			Name:   "telegram_debug",
 | 
						|
			EnvVar: "MICRO_TELEGRAM_DEBUG",
 | 
						|
			Usage:  "Telegram debug output",
 | 
						|
		},
 | 
						|
		cli.StringFlag{
 | 
						|
			Name:   "telegram_token",
 | 
						|
			EnvVar: "MICRO_TELEGRAM_TOKEN",
 | 
						|
			Usage:  "Telegram token",
 | 
						|
		},
 | 
						|
		cli.StringFlag{
 | 
						|
			Name:   "telegram_whitelist",
 | 
						|
			EnvVar: "MICRO_TELEGRAM_WHITELIST",
 | 
						|
			Usage:  "Telegram bot's users (comma-separated values)",
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (ti *telegramInput) Init(ctx *cli.Context) error {
 | 
						|
	ti.debug = ctx.Bool("telegram_debug")
 | 
						|
	ti.token = ctx.String("telegram_token")
 | 
						|
 | 
						|
	whitelist := ctx.String("telegram_whitelist")
 | 
						|
 | 
						|
	if whitelist != "" {
 | 
						|
		ti.whitelist = strings.Split(whitelist, ",")
 | 
						|
	}
 | 
						|
 | 
						|
	if len(ti.token) == 0 {
 | 
						|
		return errors.New("missing telegram token")
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (ti *telegramInput) Stream() (input.Conn, error) {
 | 
						|
	ti.Lock()
 | 
						|
	defer ti.Unlock()
 | 
						|
 | 
						|
	return newConn(ti)
 | 
						|
}
 | 
						|
 | 
						|
func (ti *telegramInput) Start() error {
 | 
						|
	ti.Lock()
 | 
						|
	defer ti.Unlock()
 | 
						|
 | 
						|
	api, err := tgbotapi.NewBotAPI(ti.token)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	ti.api = api
 | 
						|
 | 
						|
	api.Debug = ti.debug
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (ti *telegramInput) Stop() error {
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (p *telegramInput) String() string {
 | 
						|
	return "telegram"
 | 
						|
}
 |