Feat(messenger): Initial commit
This commit is contained in:
74
.gitignore
vendored
Normal file
74
.gitignore
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
# Output
|
||||
/messenger
|
||||
|
||||
# dotenv
|
||||
.env
|
||||
|
||||
# VSCode
|
||||
.vscode
|
||||
|
||||
|
||||
# ---> Go
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
||||
# ---> Vim
|
||||
# Swap
|
||||
[._]*.s[a-v][a-z]
|
||||
!*.svg # comment out if you don't need vector files
|
||||
[._]*.sw[a-p]
|
||||
[._]s[a-rt-v][a-z]
|
||||
[._]ss[a-gi-z]
|
||||
[._]sw[a-p]
|
||||
|
||||
# Session
|
||||
Session.vim
|
||||
Sessionx.vim
|
||||
|
||||
# Temporary
|
||||
.netrwhist
|
||||
*~
|
||||
# Auto-generated tag files
|
||||
tags
|
||||
# Persistent undo
|
||||
[._]*.un~
|
||||
|
||||
# ---> VisualStudioCode
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# ---> Linux
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# KDE directory preferences
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
23
README.md
Normal file
23
README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Messenger
|
||||
|
||||
## About
|
||||
The project's goal is build a generic messenger that notifies through multiple channels
|
||||
|
||||
## Usage
|
||||
```
|
||||
usage: print [-h|--help] [--webhook] [--url "<value>"]
|
||||
|
||||
Prints provided string to stdout
|
||||
|
||||
Arguments:
|
||||
|
||||
-h --help Print help information
|
||||
--webhook Use this flag to enable webhook sending
|
||||
--url URL to be used for webhook
|
||||
```
|
||||
|
||||
## Build
|
||||
Use the following command to build the application:
|
||||
```
|
||||
go build git.samuelpua.com/telboon/messenger/cmd/messenger
|
||||
```
|
||||
66
cmd/messenger/main.go
Normal file
66
cmd/messenger/main.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/akamensky/argparse"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create new parser object
|
||||
parser := argparse.NewParser("print", "Prints provided string to stdout")
|
||||
|
||||
// Create webhook flag
|
||||
webhookFlag := parser.Flag("", "webhook", &argparse.Options{Help: "Use this flag to enable webhook sending"})
|
||||
webhookURL := parser.String("", "url", &argparse.Options{Help: "URL to be used for webhook"})
|
||||
|
||||
// Parse input
|
||||
err := parser.Parse(os.Args)
|
||||
if err != nil {
|
||||
fmt.Print(parser.Usage(err))
|
||||
return
|
||||
}
|
||||
|
||||
// Check inputs are set
|
||||
if *webhookFlag {
|
||||
if webhookURL == nil || *webhookURL == "" {
|
||||
fmt.Println("Webhook URL needs to be set if webhook is enabled.")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Checks if at least one flag is enabled
|
||||
if *webhookFlag || false {
|
||||
handleStdIn(webhookFlag, webhookURL)
|
||||
} else {
|
||||
fmt.Print(parser.Usage(err))
|
||||
}
|
||||
}
|
||||
|
||||
func handleStdIn(webhookFlag *bool, webhookURL *string) {
|
||||
for {
|
||||
var currStr string
|
||||
_, err := fmt.Scanf("%s", &currStr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Handle string
|
||||
if *webhookFlag {
|
||||
err = sendWebhook(&currStr, webhookURL)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func sendWebhook(currStr *string, webhookURL *string) error {
|
||||
bodyReader := strings.NewReader(*currStr)
|
||||
_, err := http.Post(*webhookURL, "text/plain", bodyReader)
|
||||
return err
|
||||
}
|
||||
5
go.mod
Normal file
5
go.mod
Normal file
@@ -0,0 +1,5 @@
|
||||
module git.samuelpua.com/telboon/messenger
|
||||
|
||||
go 1.17
|
||||
|
||||
require github.com/akamensky/argparse v1.4.0
|
||||
Reference in New Issue
Block a user