Changed command handlers, added middlewares, fixed user struct
This commit is contained in:
parent
036e4dcbad
commit
393f3813a8
12
commands.go
12
commands.go
|
@ -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
1
go.mod
|
@ -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
2
go.sum
|
@ -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=
|
||||
|
|
|
@ -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
14
main.go
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue