Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .default_env

This file was deleted.

Binary file added geralt
Binary file not shown.
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ require (
)

require (
github.com/PuerkitoBio/goquery v1.8.0 // indirect
github.com/andybalholm/cascadia v1.3.1 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
Expand All @@ -21,6 +23,7 @@ require (
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8 // indirect
golang.org/x/sys v0.0.0-20210423082822-04245dca01da // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
)
9 changes: 9 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -47,13 +51,18 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8 h1:/6y1LfuqNuQdHAm0jjtPtgRcxIxjVZgm5OTu8/QhZvk=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package main

import (
"os"

"github.com/gin-gonic/gin"
"github.com/hackerspace-silesia/geralt/views"
"github.com/slack-go/slack"
Expand All @@ -15,5 +14,6 @@ func main() {
r := gin.Default()
r.GET("/healthcheck", views.HealtcheckHandler)
r.POST("/commands", views.NewQuoteHandler(slackClient, signingSecret).QuoteServe)
r.POST("/finances", views.NewFinancesHandler(slackClient, signingSecret).FinancesServe)
r.Run()
}
90 changes: 90 additions & 0 deletions views/finances.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package views

import (
"strconv"
"fmt"
"github.com/PuerkitoBio/goquery"
"net/http"
"github.com/gin-gonic/gin"
"github.com/slack-go/slack"
)

type Table struct {
caption string
values []TableEntry
}

type TableEntry struct {
name string
value float64
}

type FinancesHandler struct {
apiClient *slack.Client
signingSecret string
}

func NewFinancesHandler(slackClient *slack.Client, secret string) *FinancesHandler {
fmt.Println("creating NewFinancesHandler")

return &FinancesHandler{
apiClient: slackClient,
signingSecret: secret,
}
}

func (handler *FinancesHandler) FinancesServe(c *gin.Context) {
if err := VerifySecret(c, handler.signingSecret); err != nil {
return
}
command, err := slack.SlashCommandParse(c.Copy().Request)
if err != nil {
fmt.Println(err)
c.AbortWithStatus(http.StatusBadRequest)
return
}
if command.Command != "/finances" {
c.AbortWithStatus(http.StatusBadRequest)
return
}
_, _, _, e := handler.apiClient.SendMessage(
command.ChannelName,
slack.MsgOptionText("1000 zł", false),
)
if e != nil {
fmt.Println(e)
}
}

func ParseFinancialTable(url string) []Table {
document, err := goquery.NewDocument(url)
if err != nil {
panic(err)
}
raw_tables := document.Find("div.month table")
all_tables := []Table{}
raw_tables.Each(func(i int, s *goquery.Selection) {
caption := s.Find("caption").Text()
table := Table{caption: caption, values: []TableEntry{}}
s.Find("tbody tr").Each(func(i int, s *goquery.Selection) {
name := s.Find("td .name").Text()
value := StringToFloat(s.Find("td .value"))
table.values = append(table.values, TableEntry{name: name, value: value})
})
all_tables = append(all_tables, table)
})

return all_tables
}

func StringToFloat(s *goquery.Selection) float64 {
value_string := s.Text()
if value_string == "" {
return 0
}
value_float, err := strconv.ParseFloat(value_string, 64)
if err != nil {
panic(err)
}
return value_float
}