go-dette/handlers.go

137 lines
3.3 KiB
Go

package main
import (
"context"
"encoding/json"
"errors"
"fmt"
"log"
"time"
"git.nefrace.ru/nefrace/nechotron"
"git.nefrace.ru/nefrace/tongo"
)
// Docs
func handleMe(u *nechotron.Update, text string) error {
u.DeleteMessage()
_, err := u.AnswerMarkdown(fmt.Sprintf("_*%s* %s_", nechotron.EscapeMd2(u.From().FirstName), nechotron.EscapeMd2(text)))
if err != nil {
return errors.Join(fmt.Errorf("can't handle /me: %s", u.Text()), err)
}
return nil
}
var helpText = `
Вот мои команды:
%s
Время сборки бота: %s`
func handleHelp(u *nechotron.Update, text string) error {
commands := nechotron.MakeCommandList("`%s` \\- _%s_\n", commandHelp, commandMe)
_, err := u.AnswerMarkdown(fmt.Sprintf(helpText, commands, BuildTime))
if err != nil {
return errors.Join(fmt.Errorf("can't handle /help: %s", u.Text()), err)
}
return nil
}
func handleSay(u *nechotron.Update, text string) error {
u.DeleteMessage()
if text == "" {
return nil
}
_, err := u.AnswerMarkdown(fmt.Sprintf("*_%s_*", nechotron.EscapeMd2(text)))
if err != nil {
return errors.Join(fmt.Errorf("can't handle /say: %s", u.Text()), err)
}
return nil
}
func handleDeleteCallback(u *nechotron.Update) error {
u.DeleteMessage()
return nil
}
func handleUsersImport(u *nechotron.Update) error {
f, _ := u.Bot.GetFile(u.Message.Document.FileID)
file, _ := u.Bot.DownloadFile(f.Result.FilePath)
var users []oldUser
err := json.Unmarshal(file, &users)
if err != nil {
u.AnswerPlain(err.Error())
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()
store := tongo.NewStore[User](db)
for _, user := range users {
if user.MessagesCount == 0 {
continue
}
log.Printf("%+v", user)
newUser := User{
Item: tongo.NewID(),
Username: user.Username,
Name: user.Name,
ID: user.ID,
Karma: user.Karma,
}
_, err := store.InsertOne(ctx, &newUser)
if err != nil {
log.Println(err)
}
}
return nil
}
type oldUser struct {
ID int64 `json:"uid"`
Username string `json:"username"`
MessagesCount int `json:"messagesCount"`
Name string `json:"full_name"`
Karma int64 `json:"karma"`
}
func handleRegisterFeed(u *nechotron.Update, _ string) error {
feedChats := tongo.NewStore[FeedChat](db)
chat, err := feedChats.GetOne(u.Ctx, tongo.E("chatid", u.ChatID()))
if err != nil {
chat = &FeedChat{
Item: tongo.NewID(),
ChatID: u.ChatID(),
Title: u.Message.Chat.Title,
ThreadID: u.Message.ThreadID,
}
feedChats.InsertOne(u.Ctx, chat)
res, _ := u.AnswerPlain("Чат зарегистрирован для рассылки")
go func() {
time.Sleep(10 * time.Second)
u.Bot.DeleteMessage(u.ChatID(), res.Result.ID)
}()
}
return nil
}
func handleDeleteFeed(u *nechotron.Update, _ string) error {
feedChats := tongo.NewStore[FeedChat](db)
chat, err := feedChats.GetOne(u.Ctx, tongo.E("chatid", u.ChatID()))
if err != nil {
res, _ := u.AnswerPlain("Чат не подписан на рассылку")
go func() {
time.Sleep(10 * time.Second)
u.Bot.DeleteMessage(u.ChatID(), res.Result.ID)
}()
return nil
}
feedChats.DeleteByID(u.Ctx, chat.Id)
res, _ := u.AnswerPlain("Чат удалён из рассылки")
go func() {
time.Sleep(10 * time.Second)
u.Bot.DeleteMessage(u.ChatID(), res.Result.ID)
}()
return nil
}