craft-bot/fragMessages.go
smsteel 36055c61a8
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
fix drone CI, fix markdown in kill message
2021-06-24 18:56:43 +03:00

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
}