First!!!1

This commit is contained in:
Hamcha 2022-03-24 12:47:37 +01:00
commit 7e68c8d665
Signed by: hamcha
GPG key ID: 1669C533B8CF6D89
7 changed files with 217 additions and 0 deletions

24
Dockerfile Normal file
View file

@ -0,0 +1,24 @@
FROM golang:alpine as golang
WORKDIR /go/src/app
COPY . .
# Static build required so that we can safely copy the binary over.
RUN CGO_ENABLED=0 go build -o /go/bin/app -ldflags '-extldflags "-static"'
FROM alpine:latest as alpine
RUN apk --no-cache add tzdata zip ca-certificates
WORKDIR /usr/share/zoneinfo
# -0 means no compression. Needed because go's
# tz loader doesn't handle compressed data.
RUN zip -r -0 /zoneinfo.zip .
FROM scratch
# the test program:
COPY --from=golang /go/bin/app /app
# the timezone data:
ENV ZONEINFO /zoneinfo.zip
COPY --from=alpine /zoneinfo.zip /
# the tls certificates:
COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/app"]

11
go.mod Normal file
View file

@ -0,0 +1,11 @@
module git.fromouter.space/crunchy-rocks/clessy-ng
go 1.18
require git.fromouter.space/hamcha/tg v0.1.0
require (
github.com/json-iterator/go v1.1.12 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
)

17
go.sum Normal file
View file

@ -0,0 +1,17 @@
git.fromouter.space/hamcha/tg v0.1.0 h1:cJwL8pElkBtaDn7Bxa14zvlnBTTK8LdcCtcbBg7hEvk=
git.fromouter.space/hamcha/tg v0.1.0/go.mod h1:aIFj7n5FP+Zr/Zv6I6Kq4ZqhRxC12gXFQcC3iOakv9M=
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=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=

64
main.go Normal file
View file

@ -0,0 +1,64 @@
package main
import (
"flag"
"log"
"os"
"strings"
"git.fromouter.space/crunchy-rocks/clessy-ng/modules"
"git.fromouter.space/crunchy-rocks/clessy-ng/modules/metafora"
"git.fromouter.space/hamcha/tg"
)
var mods = map[string]modules.Module{
"metafora": &metafora.Module{},
}
func checkErr(err error, message string, args ...interface{}) {
if err != nil {
args = append(args, err)
log.Fatalf("FATAL: "+message+"\n\t%s", args)
}
}
func main() {
disable := flag.String("disable", "", "Blacklist mods (separated by comma)")
enable := flag.String("enable", "", "Whitelist mods (separated by comma)")
flag.Parse()
bind := os.Getenv("CLESSY_BIND")
if bind == "" {
bind = ":8080"
}
api := tg.MakeAPIClient(os.Getenv("CLESSY_TOKEN"))
name, err := api.GetMe()
checkErr(err, "could not retrieve bot info")
toActivate := make(map[string]modules.Module)
if *disable != "" {
for _, modname := range strings.Split(*disable, ",") {
modname = strings.TrimSpace(modname)
delete(mods, modname)
}
toActivate = mods
} else if *enable != "" {
for _, modname := range strings.Split(*enable, ",") {
toActivate[modname] = mods[modname]
}
}
for modname, mod := range toActivate {
log.Printf("Initializing %s", modname)
err := mod.Initialize(api, name.Username)
checkErr(err, "Starting module %s failed with error", modname)
}
api.SetWebhook(os.Getenv("CLESSY_WEBHOOK"))
log.Fatal(api.HandleWebhook(bind, os.Getenv("CLESSY_PATH"), webhook))
}
func webhook(update tg.APIUpdate) {
}

63
modules/metafora/mod.go Normal file
View file

@ -0,0 +1,63 @@
package metafora
import (
"math/rand"
"git.fromouter.space/crunchy-rocks/clessy-ng/utils"
"git.fromouter.space/hamcha/tg"
)
var metaactions = []string{
"Puppami", "Degustami", "Lucidami", "Manipolami", "Disidratami", "Irritami", "Martorizzami",
"Lustrami", "Osannami", "Sorseggiami", "Assaporami", "Apostrofami", "Spremimi", "Dimenami",
"Agitami", "Stimolami", "Suonami", "Strimpellami", "Stuzzicami", "Spintonami", "Sguinzagliami",
"Modellami", "Sgrullami", "Cavalcami", "Perquotimi", "Misurami", "Sventolami", "Induriscimi",
"Accordami", "Debuggami", "Accarezzami", "Revisionami", "Imbottigliami", "Badami", "Scuotimi",
"Terremotami", "Incentivami", "Sollecitami", "Allenami", "Censiscimi", "Decollami", "Smagnetizzami",
"Nobilitami", "Elevami", "Accrescimi", "Impostami", "Ereggimi", "Fischiettami", "Scaldami", "Gonfiami",
"Lubrificami",
}
var metaobjects = []string{
"il birillo", "il bastone", "l'ombrello", "il malloppo", "il manico", "il manganello",
"il ferro", "la mazza", "l'archibugio", "il timone", "l'arpione", "il flauto", "la reliquia",
"il fioretto", "lo scettro", "il campanile", "la proboscide", "il pino", "il maritozzo", "il perno",
"il tubo da 100", "la verga", "l'idrante", "il pendolo", "la torre di Pisa", "la lancia",
"il cilindro", "il lampione", "il joystick", "il Wiimote", "il PSMove", "l'albero maestro",
"il trenino", "la sciabola", "il weedle", "il serpente", "il missile", "la limousine",
"il selfie-stick", "il candelotto", "la falce", "la biscia", "la banana", "la pannocchia",
"il papavero", "la carota", "la fava", "la salsiccia", "il cono", "l'hard drive", "la manopola",
"la manovella", "il pennello", "l'asta", "il cacciavite", "lo spazzolino",
}
type Module struct {
client *tg.Telegram
name string
}
func (m *Module) Initialize(api *tg.Telegram, name string) error {
m.client = api
m.name = name
return nil
}
func (m *Module) OnUpdate(update tg.APIUpdate) {
// Not a message? Ignore
if update.Message == nil {
return
}
if utils.IsCommand(*update.Message, m.name, "metafora") {
m.client.SendTextMessage(tg.ClientTextMessageData{
ChatID: update.Message.Chat.ChatID,
Text: metaforaAPI(),
})
return
}
}
func metaforaAPI() string {
n := rand.Intn(len(metaactions))
m := rand.Intn(len(metaobjects))
return metaactions[n] + " " + metaobjects[m]
}

8
modules/module.go Normal file
View file

@ -0,0 +1,8 @@
package modules
import "git.fromouter.space/hamcha/tg"
type Module interface {
Initialize(*tg.Telegram, string) error
OnUpdate(tg.APIUpdate)
}

30
utils/command.go Normal file
View file

@ -0,0 +1,30 @@
package utils
import (
"strings"
"git.fromouter.space/hamcha/tg"
)
func IsCommand(update tg.APIMessage, botname string, cmdname string) bool {
if update.Text == nil {
return false
}
text := strings.TrimSpace(*(update.Text))
shortcmd := "/" + cmdname
fullcmd := shortcmd + "@" + botname
// Check short form
if text == shortcmd || strings.HasPrefix(text, shortcmd+" ") {
return true
}
// Check long form
if text == shortcmd || strings.HasPrefix(text, fullcmd+" ") {
return true
}
return false
}