Top users

This commit is contained in:
Nefrace 2023-06-20 02:05:39 +03:00
parent 45049a0c84
commit 95e0b1952f
3 changed files with 33 additions and 1 deletions

View File

@ -1,6 +1,7 @@
package main
import (
"errors"
"fmt"
"time"
@ -87,3 +88,24 @@ func handleKarma(u *nechotron.Update) error {
fmt.Sprintf("*%s \\(%d\\)* только что %s карму *%s \\(%d\\)*", mentionFrom, totalFromKarma, changeText, mentionTo, totalToKarma))
return err
}
var topText = `
*Наш ТОП\-10 пользователей:*
%s
`
func handleTop(u *nechotron.Update, _ string) error {
store := tongo.NewStore[RatedUser](db)
users, err := store.GetMany(u.Ctx)
if err != nil {
return errors.Join(errors.New("can't get top10 users"), err)
}
text := ""
for n, u := range users {
text += fmt.Sprintf("%d \\- %s \\(%d\\)\n", n, nechotron.EscapeMd2(u.Name), u.TotalKarma)
}
text = fmt.Sprintf(topText, text)
u.AnswerMarkdown(text)
return nil
}

View File

@ -17,7 +17,8 @@ var MainState = neco.State{
mainCommands := neco.NewDispatcher().
HandleCommand(commandMe, handleMe).
HandleCommand(commandHelp, handleHelp)
HandleCommand(commandHelp, handleHelp).
HandleCommand(commandTop, handleTop)
replyDispatcher := neco.NewDispatcher().
HandleFilter(karmaTriggers, handleKarma)

View File

@ -52,6 +52,15 @@ var userIndex = mongo.IndexModel{
func (User) Coll() string { return "users" }
type RatedUser struct {
tongo.Item `bson:",inline"`
Name string
ID int64
TotalKarma int64 `bson:"totalKarma"`
}
func (RatedUser) Coll() string { return "top10" }
type Chat struct {
tongo.Item `bson:",inline"`
ID int64