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 }