Add support for auxiliary message file (#81)
* Add support for external message loaded from the file specified in Config.MessageFile * Enable the message file option in command line/env vars * Update docs * Add a testcase * Fix YAML tag in DOCS.md from 'messageFile' to 'message_file', as is commonly used in Drone * Remove unintended blank line * Move .test.message file to tests/ folder
This commit is contained in:
parent
75ffa6ef7b
commit
f8f311ba1f
13
DOCS.md
13
DOCS.md
@ -149,6 +149,16 @@ Example configuration with a custom message template:
|
|||||||
+ {{/success}}
|
+ {{/success}}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Example configuration with a custom message template loaded from file:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
image: appleboy/drone-telegram
|
||||||
|
settings:
|
||||||
|
token: xxxxxxxxxx
|
||||||
|
to: telegram_user_id
|
||||||
|
+ message_file: message_file.tpl
|
||||||
|
```
|
||||||
|
|
||||||
## Parameter Reference
|
## Parameter Reference
|
||||||
|
|
||||||
token
|
token
|
||||||
@ -160,6 +170,9 @@ to
|
|||||||
message
|
message
|
||||||
: overwrite the default message template
|
: overwrite the default message template
|
||||||
|
|
||||||
|
message_file
|
||||||
|
: overwrite the default message template with the contents of the specified file
|
||||||
|
|
||||||
photo
|
photo
|
||||||
: local file path
|
: local file path
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ docker run --rm \
|
|||||||
-e PLUGIN_TOKEN=xxxxxxx \
|
-e PLUGIN_TOKEN=xxxxxxx \
|
||||||
-e PLUGIN_TO=xxxxxxx \
|
-e PLUGIN_TO=xxxxxxx \
|
||||||
-e PLUGIN_MESSAGE=test \
|
-e PLUGIN_MESSAGE=test \
|
||||||
|
-e PLUGIN_MESSAGE_FILE=testmessage.md \
|
||||||
-e PLUGIN_PHOTO=tests/github.png \
|
-e PLUGIN_PHOTO=tests/github.png \
|
||||||
-e PLUGIN_DOCUMENT=tests/gophercolor.png \
|
-e PLUGIN_DOCUMENT=tests/gophercolor.png \
|
||||||
-e PLUGIN_STICKER=tests/github-logo.png \
|
-e PLUGIN_STICKER=tests/github-logo.png \
|
||||||
|
38
main.go
38
main.go
@ -36,6 +36,11 @@ func main() {
|
|||||||
Usage: "send telegram message",
|
Usage: "send telegram message",
|
||||||
EnvVar: "PLUGIN_MESSAGE,TELEGRAM_MESSAGE,INPUT_MESSAGE",
|
EnvVar: "PLUGIN_MESSAGE,TELEGRAM_MESSAGE,INPUT_MESSAGE",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "message.file",
|
||||||
|
Usage: "send telegram message from file",
|
||||||
|
EnvVar: "PLUGIN_MESSAGE_FILE,TELEGRAM_MESSAGE_FILE,INPUT_MESSAGE_FILE",
|
||||||
|
},
|
||||||
cli.StringSliceFlag{
|
cli.StringSliceFlag{
|
||||||
Name: "photo",
|
Name: "photo",
|
||||||
Usage: "send photo message",
|
Usage: "send photo message",
|
||||||
@ -282,22 +287,23 @@ func run(c *cli.Context) error {
|
|||||||
DeployTo: c.String("deploy.to"),
|
DeployTo: c.String("deploy.to"),
|
||||||
},
|
},
|
||||||
Config: Config{
|
Config: Config{
|
||||||
Token: c.String("token"),
|
Token: c.String("token"),
|
||||||
Debug: c.Bool("debug"),
|
Debug: c.Bool("debug"),
|
||||||
MatchEmail: c.Bool("match.email"),
|
MatchEmail: c.Bool("match.email"),
|
||||||
WebPreview: c.Bool("webpage.preview"),
|
WebPreview: c.Bool("webpage.preview"),
|
||||||
To: c.StringSlice("to"),
|
To: c.StringSlice("to"),
|
||||||
Message: c.StringSlice("message"),
|
Message: c.StringSlice("message"),
|
||||||
Photo: c.StringSlice("photo"),
|
MessageFile: c.String("message.file"),
|
||||||
Document: c.StringSlice("document"),
|
Photo: c.StringSlice("photo"),
|
||||||
Sticker: c.StringSlice("sticker"),
|
Document: c.StringSlice("document"),
|
||||||
Audio: c.StringSlice("audio"),
|
Sticker: c.StringSlice("sticker"),
|
||||||
Voice: c.StringSlice("voice"),
|
Audio: c.StringSlice("audio"),
|
||||||
Location: c.StringSlice("location"),
|
Voice: c.StringSlice("voice"),
|
||||||
Video: c.StringSlice("video"),
|
Location: c.StringSlice("location"),
|
||||||
Venue: c.StringSlice("venue"),
|
Video: c.StringSlice("video"),
|
||||||
Format: c.String("format"),
|
Venue: c.StringSlice("venue"),
|
||||||
GitHub: c.Bool("github"),
|
Format: c.String("format"),
|
||||||
|
GitHub: c.Bool("github"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
68
plugin.go
68
plugin.go
@ -1,9 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -56,22 +59,23 @@ type (
|
|||||||
|
|
||||||
// Config for the plugin.
|
// Config for the plugin.
|
||||||
Config struct {
|
Config struct {
|
||||||
Token string
|
Token string
|
||||||
Debug bool
|
Debug bool
|
||||||
MatchEmail bool
|
MatchEmail bool
|
||||||
WebPreview bool
|
WebPreview bool
|
||||||
To []string
|
To []string
|
||||||
Message []string
|
Message []string
|
||||||
Photo []string
|
MessageFile string
|
||||||
Document []string
|
Photo []string
|
||||||
Sticker []string
|
Document []string
|
||||||
Audio []string
|
Sticker []string
|
||||||
Voice []string
|
Audio []string
|
||||||
Location []string
|
Voice []string
|
||||||
Video []string
|
Location []string
|
||||||
Venue []string
|
Video []string
|
||||||
Format string
|
Venue []string
|
||||||
GitHub bool
|
Format string
|
||||||
|
GitHub bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plugin values.
|
// Plugin values.
|
||||||
@ -184,6 +188,20 @@ func convertLocation(value string) (Location, bool) {
|
|||||||
}, false
|
}, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadTextFromFile(filename string) ([]string, error) {
|
||||||
|
f, err := os.Open(filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
r := bufio.NewReader(f)
|
||||||
|
content, err := ioutil.ReadAll(r)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return []string{string(content)}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func parseTo(to []string, authorEmail string, matchEmail bool) []int64 {
|
func parseTo(to []string, authorEmail string, matchEmail bool) []int64 {
|
||||||
var emails []int64
|
var emails []int64
|
||||||
var ids []int64
|
var ids []int64
|
||||||
@ -222,22 +240,26 @@ func parseTo(to []string, authorEmail string, matchEmail bool) []int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Exec executes the plugin.
|
// Exec executes the plugin.
|
||||||
func (p Plugin) Exec() error {
|
func (p Plugin) Exec() (err error) {
|
||||||
|
|
||||||
if len(p.Config.Token) == 0 || len(p.Config.To) == 0 {
|
if len(p.Config.Token) == 0 || len(p.Config.To) == 0 {
|
||||||
return errors.New("missing telegram token or user list")
|
return errors.New("missing telegram token or user list")
|
||||||
}
|
}
|
||||||
|
|
||||||
var message []string
|
var message []string
|
||||||
if len(p.Config.Message) > 0 {
|
switch {
|
||||||
|
case len(p.Config.MessageFile) > 0:
|
||||||
|
message, err = loadTextFromFile(p.Config.MessageFile)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error loading message file '%s': %v", p.Config.MessageFile, err)
|
||||||
|
}
|
||||||
|
case len(p.Config.Message) > 0:
|
||||||
message = p.Config.Message
|
message = p.Config.Message
|
||||||
} else {
|
default:
|
||||||
message = p.Message()
|
message = p.Message()
|
||||||
}
|
}
|
||||||
|
|
||||||
bot, err := tgbotapi.NewBotAPI(p.Config.Token)
|
var bot *tgbotapi.BotAPI
|
||||||
|
if bot, err = tgbotapi.NewBotAPI(p.Config.Token); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,3 +325,32 @@ func TestHTMLMessage(t *testing.T) {
|
|||||||
err := plugin.Exec()
|
err := plugin.Exec()
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMessageFile(t *testing.T) {
|
||||||
|
plugin := Plugin{
|
||||||
|
Repo: Repo{
|
||||||
|
Name: "go-hello",
|
||||||
|
Namespace: "appleboy",
|
||||||
|
},
|
||||||
|
Commit: Commit{
|
||||||
|
Sha: "e7c4f0a63ceeb42a39ac7806f7b51f3f0d204fd2",
|
||||||
|
Author: "Bo-Yi Wu",
|
||||||
|
Branch: "master",
|
||||||
|
Message: "Freakin' macOS isn't fully case-sensitive..",
|
||||||
|
},
|
||||||
|
Build: Build{
|
||||||
|
Number: 101,
|
||||||
|
Status: "success",
|
||||||
|
Link: "https://github.com/appleboy/go-hello",
|
||||||
|
},
|
||||||
|
|
||||||
|
Config: Config{
|
||||||
|
Token: os.Getenv("TELEGRAM_TOKEN"),
|
||||||
|
To: []string{os.Getenv("TELEGRAM_TO")},
|
||||||
|
MessageFile: "tests/.test.message",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
err := plugin.Exec()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
4
tests/.test.message
Normal file
4
tests/.test.message
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Sample message loaded from file.
|
||||||
|
|
||||||
|
Commit msg: {{commit.message}}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user