Changed command handlers, added middlewares, fixed user struct

This commit is contained in:
nefrace 2023-01-24 02:24:45 +03:00
parent 036e4dcbad
commit 393f3813a8
8 changed files with 78 additions and 12 deletions

View File

@ -8,22 +8,24 @@ import (
var commandMe = neco.NewCommand("me", "Пишу ваш текст о вас в третьем лице", false)
func handleMe(u *neco.UpdateCommand) error {
_, err := u.AnswerMarkdown(fmt.Sprintf("_*%s* %s_", neco.EscapeMd2(u.From().FirstName), neco.EscapeMd2(u.Param)))
func handleMe(u *neco.Update) error {
param := commandMe.Param(u.Text())
_, err := u.AnswerMarkdown(fmt.Sprintf("_*%s* %s_", neco.EscapeMd2(u.From().FirstName), neco.EscapeMd2(param)))
return err
}
var commandHelp = neco.NewCommand("help", "Показываю данный текст", false)
func handleHelp(u *neco.UpdateCommand) error {
func handleHelp(u *neco.Update) error {
_, err := u.AnswerPlain("Тут текст помощи")
return err
}
var commandSay = neco.NewCommand("say", "Пишу ваш текст от своего имени.", true)
func handleSay(u *neco.UpdateCommand) error {
_, err := u.AnswerMarkdown(fmt.Sprintf("*_%s_*", neco.EscapeMd2(u.Param)))
func handleSay(u *neco.Update) error {
param := commandMe.Param(u.Text())
_, err := u.AnswerMarkdown(fmt.Sprintf("*_%s_*", neco.EscapeMd2(param)))
return err
}

1
go.mod
View File

@ -6,4 +6,5 @@ require (
git.nefrace.ru/nefrace/nechotron v0.0.0-20230119201747-5842815c958c
github.com/NicoNex/echotron/v3 v3.22.0
github.com/google/uuid v1.3.0
github.com/joho/godotenv v1.4.0
)

2
go.sum
View File

@ -4,3 +4,5 @@ github.com/NicoNex/echotron/v3 v3.22.0 h1:2ymJcjKqtZ/rfD5CveR2VKqQob7JmRgJmoLOJ3
github.com/NicoNex/echotron/v3 v3.22.0/go.mod h1:LpP5IyHw0y+DZUZMBgXEDAF9O8feXrQu7w7nlJzzoZI=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=

8
handlers.go Normal file
View File

@ -0,0 +1,8 @@
package main
import "git.nefrace.ru/nefrace/nechotron"
func handleAdmin(u *nechotron.Update) error {
u.AnswerPlain("Вы админ!")
return nil
}

14
main.go
View File

@ -2,15 +2,25 @@ package main
import (
"log"
"os"
"git.nefrace.ru/nefrace/nechotron"
"git.nefrace.ru/nefrace/tongo"
"github.com/joho/godotenv"
)
var BuildTime string
func main() {
neco := nechotron.NewTron("1698825178:AAHy4Er7z768CmYy9M5drJOMQO2S-QnwdTI", &MainState)
neco.Use(UserLogger)
godotenv.Load()
db, err := tongo.NewConnection(os.Getenv("MONGO_URI"), "godette")
if err != nil {
log.Fatalf("Can't connect to database: %v", err)
}
neco := nechotron.NewTron(os.Getenv("TELEGRAM_TOKEN"), &MainState)
neco.
Use(UserDBUpdater(db)).
Use(UserLogger)
// neko.ApiServer = "http://192.168.100.15:7373"
log.Fatal(neco.DispatchPoll())
}

View File

@ -1,15 +1,54 @@
package main
import (
"context"
"log"
"time"
"git.nefrace.ru/nefrace/nechotron"
"git.nefrace.ru/nefrace/tongo"
)
func UserLogger(next nechotron.UpdateHandler) nechotron.UpdateHandler {
return func(u *nechotron.Update) error {
log.Println(u.From().FirstName)
next(u)
return nil
err := next(u)
return err
}
}
func UserDBUpdater(db *tongo.Database) nechotron.Middleware {
return func(next nechotron.UpdateHandler) nechotron.UpdateHandler {
return func(u *nechotron.Update) error {
store := tongo.NewStore[User](db)
from := u.From()
user, err := store.GetOne(u.Ctx, tongo.E("id", from.ID))
if err != nil {
user = &User{
Item: tongo.NewID(),
ID: from.ID,
}
}
user.FirstName = from.FirstName
user.LastName = from.LastName
user.Username = from.Username
user.LastMessage = time.Now()
err = store.ReplaceItem(u.Ctx, *user, true)
if err != nil {
log.Println("Cant replace user: ", err)
}
u.Ctx = context.WithValue(u.Ctx, "dbuser", user)
return next(u)
}
}
}
func ErrorLogger(next nechotron.UpdateHandler) nechotron.UpdateHandler {
return func(u *nechotron.Update) error {
err := next(u)
if err != nil {
u.LogError("", err, true)
}
return err
}
}

View File

@ -6,10 +6,12 @@ import (
var MainState = neco.State{
Fn: func(u *neco.Update) error {
disp := neco.NewDispatcher().
privateDisp := neco.NewDispatcher().
HandleCommand(commandMe, handleMe).
HandleCommand(commandHelp, handleHelp).
HandleCommand(commandSay, handleSay)
disp := neco.NewDispatcher().
HandleFilter(neco.IsPrivate, privateDisp.Run)
return disp.Run(u)
},

View File

@ -9,11 +9,13 @@ import (
var _ tongo.Collectable = &User{}
type User struct {
tongo.Item
tongo.Item `bson:",inline"`
Username string
FirstName string
LastName string
ID int64
KarmaOffser int
KarmaOffset int
LastMessage time.Time
}
func (User) Coll() string { return "users" }