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 }