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)
|
var commandMe = neco.NewCommand("me", "Пишу ваш текст о вас в третьем лице", false)
|
||||||
|
|
||||||
func handleMe(u *neco.UpdateCommand) error {
|
func handleMe(u *neco.Update) error {
|
||||||
_, err := u.AnswerMarkdown(fmt.Sprintf("_*%s* %s_", neco.EscapeMd2(u.From().FirstName), neco.EscapeMd2(u.Param)))
|
param := commandMe.Param(u.Text())
|
||||||
|
_, err := u.AnswerMarkdown(fmt.Sprintf("_*%s* %s_", neco.EscapeMd2(u.From().FirstName), neco.EscapeMd2(param)))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var commandHelp = neco.NewCommand("help", "Показываю данный текст", false)
|
var commandHelp = neco.NewCommand("help", "Показываю данный текст", false)
|
||||||
|
|
||||||
func handleHelp(u *neco.UpdateCommand) error {
|
func handleHelp(u *neco.Update) error {
|
||||||
_, err := u.AnswerPlain("Тут текст помощи")
|
_, err := u.AnswerPlain("Тут текст помощи")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var commandSay = neco.NewCommand("say", "Пишу ваш текст от своего имени.", true)
|
var commandSay = neco.NewCommand("say", "Пишу ваш текст от своего имени.", true)
|
||||||
|
|
||||||
func handleSay(u *neco.UpdateCommand) error {
|
func handleSay(u *neco.Update) error {
|
||||||
_, err := u.AnswerMarkdown(fmt.Sprintf("*_%s_*", neco.EscapeMd2(u.Param)))
|
param := commandMe.Param(u.Text())
|
||||||
|
_, err := u.AnswerMarkdown(fmt.Sprintf("*_%s_*", neco.EscapeMd2(param)))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -6,4 +6,5 @@ require (
|
||||||
git.nefrace.ru/nefrace/nechotron v0.0.0-20230119201747-5842815c958c
|
git.nefrace.ru/nefrace/nechotron v0.0.0-20230119201747-5842815c958c
|
||||||
github.com/NicoNex/echotron/v3 v3.22.0
|
github.com/NicoNex/echotron/v3 v3.22.0
|
||||||
github.com/google/uuid v1.3.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/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 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
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 (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
"git.nefrace.ru/nefrace/nechotron"
|
"git.nefrace.ru/nefrace/nechotron"
|
||||||
|
"git.nefrace.ru/nefrace/tongo"
|
||||||
|
"github.com/joho/godotenv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var BuildTime string
|
var BuildTime string
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
neco := nechotron.NewTron("1698825178:AAHy4Er7z768CmYy9M5drJOMQO2S-QnwdTI", &MainState)
|
godotenv.Load()
|
||||||
neco.Use(UserLogger)
|
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"
|
// neko.ApiServer = "http://192.168.100.15:7373"
|
||||||
log.Fatal(neco.DispatchPoll())
|
log.Fatal(neco.DispatchPoll())
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,54 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"log"
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.nefrace.ru/nefrace/nechotron"
|
"git.nefrace.ru/nefrace/nechotron"
|
||||||
|
"git.nefrace.ru/nefrace/tongo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func UserLogger(next nechotron.UpdateHandler) nechotron.UpdateHandler {
|
func UserLogger(next nechotron.UpdateHandler) nechotron.UpdateHandler {
|
||||||
return func(u *nechotron.Update) error {
|
return func(u *nechotron.Update) error {
|
||||||
log.Println(u.From().FirstName)
|
log.Println(u.From().FirstName)
|
||||||
next(u)
|
err := next(u)
|
||||||
return nil
|
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{
|
var MainState = neco.State{
|
||||||
Fn: func(u *neco.Update) error {
|
Fn: func(u *neco.Update) error {
|
||||||
disp := neco.NewDispatcher().
|
privateDisp := neco.NewDispatcher().
|
||||||
HandleCommand(commandMe, handleMe).
|
HandleCommand(commandMe, handleMe).
|
||||||
HandleCommand(commandHelp, handleHelp).
|
HandleCommand(commandHelp, handleHelp).
|
||||||
HandleCommand(commandSay, handleSay)
|
HandleCommand(commandSay, handleSay)
|
||||||
|
disp := neco.NewDispatcher().
|
||||||
|
HandleFilter(neco.IsPrivate, privateDisp.Run)
|
||||||
|
|
||||||
return disp.Run(u)
|
return disp.Run(u)
|
||||||
},
|
},
|
||||||
|
|
6
types.go
6
types.go
|
@ -9,11 +9,13 @@ import (
|
||||||
var _ tongo.Collectable = &User{}
|
var _ tongo.Collectable = &User{}
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
tongo.Item
|
tongo.Item `bson:",inline"`
|
||||||
Username string
|
Username string
|
||||||
FirstName string
|
FirstName string
|
||||||
|
LastName string
|
||||||
ID int64
|
ID int64
|
||||||
KarmaOffser int
|
KarmaOffset int
|
||||||
|
LastMessage time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func (User) Coll() string { return "users" }
|
func (User) Coll() string { return "users" }
|
||||||
|
|
Loading…
Reference in New Issue