diff --git a/cmd/bot/application.go b/cmd/bot/application.go index e94cf570..67d990ca 100644 --- a/cmd/bot/application.go +++ b/cmd/bot/application.go @@ -407,6 +407,33 @@ func (a *Application) StartBots() error { go func(bot *pb2twitch.Bot) { bot.OnWhisperMessage(bot.HandleWhisper) + bot.OnUserNoticeMessage(func(message twitch.UserNoticeMessage) { + channelID := message.Tags["room-id"] + if channelID == "" { + fmt.Printf("Missing room-id tag in message: %+v\n", message) + return + } + + if message.User.ID == bot.TwitchAccount().ID() { + // Ignore messages from self + return + } + + formattedMessage := fmt.Sprintf("[%s] %s: %s", time.Now().Format("15:04:05"), message.User.Name, message.Message) + + // Store message in our twitch message context class + a.twitchUserContext.AddContext(channelID, message.User.ID, formattedMessage) + + message.Message = strings.TrimPrefix(message.Message, "@"+bot.TwitchAccount().Name()+" ") + message.Message = strings.TrimPrefix(message.Message, bot.TwitchAccount().Name()+" ") + + // Trim message off any potential Chatterino suffix + message.Message = strings.TrimSuffix(message.Message, " \U000e0000") + + // Forward to bot to let its modules work + bot.HandleUserNoticeMessage(message.Channel, message.User, &message) + }) + bot.OnPrivateMessage(func(message twitch.PrivateMessage) { channelID := message.Tags["room-id"] if channelID == "" { diff --git a/pkg/twitch/bot.go b/pkg/twitch/bot.go index 9314cc38..4cefb146 100644 --- a/pkg/twitch/bot.go +++ b/pkg/twitch/bot.go @@ -489,6 +489,8 @@ func (m TwitchMessage) GetText() string { return msg.Message case *twitch.WhisperMessage: return msg.Message + case *twitch.UserNoticeMessage: + return msg.Message } return "" } @@ -499,6 +501,8 @@ func (m *TwitchMessage) SetText(newText string) { msg.Message = newText case *twitch.WhisperMessage: msg.Message = newText + case *twitch.UserNoticeMessage: + msg.Message = newText } } @@ -709,6 +713,38 @@ func (b *Bot) HandleMessage(channelName string, user twitch.User, rawMessage *tw } } +func (b *Bot) HandleUserNoticeMessage(channelName string, user twitch.User, rawMessage *twitch.UserNoticeMessage) { + message := NewTwitchMessage(rawMessage) + + twitchUser := users.NewTwitchUser(user, rawMessage.Tags["user-id"]) + + channel := &channels.TwitchChannel{ + Channel: channelName, + ID: rawMessage.Tags["room-id"], + } + + for _, emote := range rawMessage.Emotes { + parsedEmote := &common.Emote{ + Name: emote.Name, + ID: emote.ID, + Count: emote.Count, + Type: "twitch", + } + message.twitchEmotes = append(message.twitchEmotes, parsedEmote) + } + + _, botChannel := b.getBotChannel(channel.GetID()) + if botChannel == nil { + fmt.Println("Message received in channel with id", channel.GetID(), "without having a BotChannel there") + return + } + + err := botChannel.HandleMessage(twitchUser, message) + if err != nil { + fmt.Println("Error occurred while forwarding message to bot channel:", err) + } +} + func (b *Bot) HandleRoomstateMessage(message twitch.RoomStateMessage) { subMode := ModeUnset