diff --git a/bot/command.go b/bot/command.go index de96e60..87341ca 100644 --- a/bot/command.go +++ b/bot/command.go @@ -268,19 +268,22 @@ func (b *Bot) runSend(ctx context.Context, commandSlice []string) { if !b.allowSend(evt.Sender, evt.RoomID) { return } - - if len(commandSlice) < 3 { - b.SendNotice(ctx, evt.RoomID, fmt.Sprintf("Usage:\n```\n%s send EMAIL\nSubject\nBody\n```", b.prefix)) + to, subject, body, err := utils.ParseSend(commandSlice) + if err == utils.ErrInvalidArgs { + b.SendNotice(ctx, evt.RoomID, fmt.Sprintf( + "Usage:\n"+ + "```\n"+ + "%s send someone@example.com\n"+ + "Subject goes here on a line of its own\n"+ + "Email content goes here\n"+ + "on as many lines\n"+ + "as you want.\n"+ + "```", + b.prefix)) return } - message := strings.Join(commandSlice, " ") - lines := strings.Split(message, "\n") - commandSlice = strings.Split(lines[0], " ") - to := commandSlice[1] - subject := lines[1] - body := strings.Join(lines[2:], "\n") - err := b.Send2Email(ctx, to, subject, body) + err = b.Send2Email(ctx, to, subject, body) if err != nil { b.Error(ctx, evt.RoomID, "cannot send email: %v", err) return diff --git a/utils/command.go b/utils/command.go new file mode 100644 index 0000000..91e7a04 --- /dev/null +++ b/utils/command.go @@ -0,0 +1,25 @@ +package utils + +import ( + "fmt" + "strings" +) + +// ErrInvalidArgs returned when a command's arguments are invalid +var ErrInvalidArgs = fmt.Errorf("invalid arguments") + +// ParseSend parses "!pm send" command, returns to, subject, body, err +func ParseSend(commandSlice []string) (string, string, string, error) { + if len(commandSlice) < 3 { + return "", "", "", ErrInvalidArgs + } + + message := strings.Join(commandSlice, " ") + lines := strings.Split(message, "\n") + commandSlice = strings.Split(lines[0], " ") + to := commandSlice[1] + subject := lines[1] + body := strings.Join(lines[2:], "\n") + + return to, subject, body, nil +}