85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
|
|
)
|
|
|
|
type fragMessage struct {
|
|
playerName string
|
|
entityName string
|
|
chatID int64
|
|
messageID int
|
|
fragCount int
|
|
latestFragTime time.Time
|
|
}
|
|
|
|
type fragMessages struct {
|
|
mx sync.Mutex
|
|
messages []*fragMessage
|
|
}
|
|
|
|
func (f *fragMessage) increaseFrag() *fragMessage {
|
|
f.fragCount += 1
|
|
f.latestFragTime = time.Now()
|
|
return f
|
|
}
|
|
|
|
func newFragMessages() *fragMessages {
|
|
return &fragMessages{
|
|
messages: make([]*fragMessage, 0),
|
|
}
|
|
}
|
|
|
|
func (fms *fragMessages) addFrag(ctx context.Context, playerName string, entityName string) error {
|
|
botApi := getBotApi(ctx)
|
|
cfg := getConfig(ctx)
|
|
mc := getMessageCleaner(ctx)
|
|
|
|
fms.mx.Lock()
|
|
defer fms.mx.Unlock()
|
|
|
|
for _, fm := range fms.messages {
|
|
if fm.playerName == playerName && fm.entityName == entityName {
|
|
mc.resetTimer(fm.messageID, fm.chatID, time.Second*30)
|
|
fm.increaseFrag()
|
|
mess := tgbotapi.NewEditMessageText(
|
|
fm.chatID,
|
|
fm.messageID,
|
|
fmt.Sprintf("%s убил %s ✗ *%d*", fm.playerName, fm.entityName, fm.fragCount),
|
|
)
|
|
mess.ParseMode = tgbotapi.ModeMarkdown
|
|
_, err := botApi.Send(mess)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
mess := tgbotapi.NewMessage(cfg.ChatID, fmt.Sprintf("%s убил %s", playerName, entityName))
|
|
m, err := botApi.Send(mess)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
mc.add(ctx, m.MessageID, cfg.ChatID, time.Second*30)
|
|
|
|
fm := &fragMessage{
|
|
playerName: playerName,
|
|
entityName: entityName,
|
|
chatID: cfg.ChatID,
|
|
messageID: m.MessageID,
|
|
fragCount: 0,
|
|
latestFragTime: time.Now(),
|
|
}
|
|
|
|
fms.messages = append(fms.messages, fm)
|
|
|
|
return nil
|
|
}
|