mirror of https://github.com/kha7iq/pingme
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.5 KiB
121 lines
3.5 KiB
3 years ago
|
package wechat
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"log"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/kha7iq/pingme/service/helpers"
|
||
|
"github.com/nikoksr/notify"
|
||
|
"github.com/nikoksr/notify/service/wechat"
|
||
|
"github.com/silenceper/wechat/v2/cache"
|
||
|
"github.com/urfave/cli/v2"
|
||
|
)
|
||
|
|
||
|
// Wechat struct holds data parsed via flags for the service.
|
||
|
type Wechat struct {
|
||
|
AppID string
|
||
|
AppSecret string
|
||
|
Token string
|
||
|
EncodingAESKey string
|
||
|
Title string
|
||
|
Message string
|
||
|
Receivers string
|
||
|
}
|
||
|
|
||
|
// Send parse values from *cli.context and return *cli.Command.
|
||
|
// Values include wechat official account id, secret, server token, encoding AES key,
|
||
|
// Message, Title, and Receivers.
|
||
|
// If multiple receivers are provided then the string is split with "," separator and
|
||
|
// each receiverID is added to receiver.
|
||
|
func Send() *cli.Command {
|
||
|
var wechatOpts Wechat
|
||
|
return &cli.Command{
|
||
|
Name: "wechat",
|
||
|
Usage: "Send message to wechat official account",
|
||
|
Description: `Wechat sends message to Wechat Official Account using appid, appsecrete
|
||
|
and server token to authenticate
|
||
|
AND then send messages to defined account.
|
||
|
Multiple receiverss can be used separated by comma.`,
|
||
|
UsageText: "pingme wechat --appid '123' --appsecret '123' --token '123' --aes '123' --msg 'some message' --receivers 'aaa,bbb,ccc'",
|
||
|
Flags: []cli.Flag{
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.AppID,
|
||
|
Name: "appid",
|
||
|
Required: true,
|
||
|
Usage: "AppID of wechat official account.",
|
||
|
EnvVars: []string{"WECHAT_APPID"},
|
||
|
},
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.AppSecret,
|
||
|
Name: "appsecret",
|
||
|
Required: true,
|
||
|
Usage: "AppSecret of wechat official account.",
|
||
|
EnvVars: []string{"WECHAT_APPSECRET"},
|
||
|
},
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.Token,
|
||
|
Name: "token",
|
||
|
Required: true,
|
||
|
Usage: "Token of server used for sending message.",
|
||
|
EnvVars: []string{"WECHAT_TOKEN"},
|
||
|
},
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.EncodingAESKey,
|
||
|
Name: "aes",
|
||
|
Required: true,
|
||
|
Usage: "Encoding AES Key of server used for sending message.",
|
||
|
EnvVars: []string{"WECHAT_ENCODING_AES_KEY"},
|
||
|
},
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.Receivers,
|
||
|
Name: "receivers",
|
||
|
Required: true,
|
||
|
Usage: "Comma-separated list of receiver IDs.",
|
||
|
EnvVars: []string{"WECHAT_RECEIVERS"},
|
||
|
},
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.Message,
|
||
|
Name: "msg",
|
||
|
Required: true,
|
||
|
Usage: "Message content.",
|
||
|
EnvVars: []string{"WECHAT_MESSAGE"},
|
||
|
},
|
||
|
&cli.StringFlag{
|
||
|
Destination: &wechatOpts.Title,
|
||
|
Name: "title",
|
||
|
Value: helpers.TimeValue,
|
||
|
Usage: "Title of the message.",
|
||
|
EnvVars: []string{"WECHAT_TITLE"},
|
||
|
},
|
||
|
},
|
||
|
Action: func(ctx *cli.Context) error {
|
||
|
wechatSvc := wechat.New(&wechat.Config{
|
||
|
AppID: wechatOpts.AppID,
|
||
|
AppSecret: wechatOpts.AppSecret,
|
||
|
Token: wechatOpts.Token,
|
||
|
EncodingAESKey: wechatOpts.EncodingAESKey,
|
||
|
Cache: cache.NewMemory(),
|
||
|
})
|
||
|
|
||
|
// Add receiver IDs
|
||
|
recv := strings.Split(wechatOpts.Receivers, ",")
|
||
|
for _, r := range recv {
|
||
|
wechatSvc.AddReceivers(r)
|
||
|
}
|
||
|
|
||
|
notifier := notify.New()
|
||
|
notifier.UseServices(wechatSvc)
|
||
|
|
||
|
err := notifier.Send(context.Background(), wechatOpts.Title, wechatOpts.Message)
|
||
|
if err != nil {
|
||
|
log.Fatalf("notifier.Send() failed: %s", err.Error())
|
||
|
}
|
||
|
|
||
|
log.Println("Successfully sent!")
|
||
|
|
||
|
return nil
|
||
|
},
|
||
|
}
|
||
|
}
|