mirror of
https://github.com/xaionaro-go/streamctl.git
synced 2025-09-26 19:41:17 +08:00
Add MessageFormatType passing through
This commit is contained in:
@@ -9,14 +9,14 @@ type ChatUserID string
|
||||
type ChatMessageID string
|
||||
|
||||
type ChatMessage struct {
|
||||
CreatedAt time.Time
|
||||
EventType EventType
|
||||
UserID ChatUserID
|
||||
Username string
|
||||
MessageID ChatMessageID
|
||||
Message string
|
||||
FormatType TextFormatType
|
||||
Paid Money
|
||||
CreatedAt time.Time
|
||||
EventType EventType
|
||||
UserID ChatUserID
|
||||
Username string
|
||||
MessageID ChatMessageID
|
||||
Message string
|
||||
MessageFormatType TextFormatType
|
||||
Paid Money
|
||||
}
|
||||
|
||||
type EventType int
|
||||
|
@@ -155,13 +155,13 @@ func (h *ChatHandlerOBSOLETE) sendMessage(
|
||||
h.lastMessageID = msg.ID
|
||||
select {
|
||||
case h.messagesOutChan <- streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.CreatedAt,
|
||||
EventType: streamcontrol.EventTypeChatMessage,
|
||||
UserID: streamcontrol.ChatUserID(fmt.Sprintf("%d", msg.UserID)),
|
||||
Username: msg.Sender.Slug,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.ID),
|
||||
Message: msg.Content,
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.CreatedAt,
|
||||
EventType: streamcontrol.EventTypeChatMessage,
|
||||
UserID: streamcontrol.ChatUserID(fmt.Sprintf("%d", msg.UserID)),
|
||||
Username: msg.Sender.Slug,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.ID),
|
||||
Message: msg.Content,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
}:
|
||||
default:
|
||||
}
|
||||
|
@@ -92,13 +92,13 @@ func newChatHandlerIRC(
|
||||
}
|
||||
select {
|
||||
case h.messagesOutChan <- streamcontrol.ChatMessage{
|
||||
CreatedAt: ev.CreatedAt,
|
||||
EventType: streamcontrol.EventTypeChatMessage,
|
||||
UserID: streamcontrol.ChatUserID(ev.Sender.Username),
|
||||
Username: ev.Sender.Username,
|
||||
MessageID: streamcontrol.ChatMessageID(ev.ID),
|
||||
Message: ev.Text, // TODO: investigate if we need ev.IRCMessage.Text
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: ev.CreatedAt,
|
||||
EventType: streamcontrol.EventTypeChatMessage,
|
||||
UserID: streamcontrol.ChatUserID(ev.Sender.Username),
|
||||
Username: ev.Sender.Username,
|
||||
MessageID: streamcontrol.ChatMessageID(ev.ID),
|
||||
Message: ev.Text, // TODO: investigate if we need ev.IRCMessage.Text
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
}:
|
||||
default:
|
||||
logger.Warnf(ctx, "the queue is full, skipping the message")
|
||||
|
@@ -95,35 +95,35 @@ func NewChatHandlerSub(
|
||||
}
|
||||
eventSubClient.OnEventAutomodMessageHold(func(event twitcheventsub.EventAutomodMessageHold, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeAutoModHold,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: event.Message.Text,
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeAutoModHold,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: event.Message.Text,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelAdBreakBegin(func(event twitcheventsub.EventChannelAdBreakBegin, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeAdBreak,
|
||||
UserID: "twitch",
|
||||
Username: "Twitch",
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: fmt.Sprintf("%d seconds", event.DurationSeconds),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeAdBreak,
|
||||
UserID: "twitch",
|
||||
Username: "Twitch",
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: fmt.Sprintf("%d seconds", event.DurationSeconds),
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelBan(func(event twitcheventsub.EventChannelBan, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeBan,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: event.Reason,
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeBan,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: event.Reason,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelCheer(func(event twitcheventsub.EventChannelCheer, msg twitcheventsub.NotificationMessage) {
|
||||
@@ -138,40 +138,40 @@ func NewChatHandlerSub(
|
||||
Currency: streamcontrol.CurrencyBits,
|
||||
Amount: float64(event.Bits),
|
||||
},
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelFollow(func(event twitcheventsub.EventChannelFollow, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeFollow,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: "",
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeFollow,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: "",
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelRaid(func(event twitcheventsub.EventChannelRaid, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeRaid,
|
||||
UserID: streamcontrol.ChatUserID(event.FromBroadcasterUserId),
|
||||
Username: event.FromBroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: fmt.Sprintf("%d viewers", event.Viewers),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeRaid,
|
||||
UserID: streamcontrol.ChatUserID(event.FromBroadcasterUserId),
|
||||
Username: event.FromBroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: fmt.Sprintf("%d viewers", event.Viewers),
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelShoutoutReceive(func(event twitcheventsub.EventChannelShoutoutReceive, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeChannelShoutoutReceive,
|
||||
UserID: streamcontrol.ChatUserID(event.FromBroadcasterUserId),
|
||||
Username: event.FromBroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: fmt.Sprintf("%d viewers", event.ViewerCount),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeChannelShoutoutReceive,
|
||||
UserID: streamcontrol.ChatUserID(event.FromBroadcasterUserId),
|
||||
Username: event.FromBroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: fmt.Sprintf("%d viewers", event.ViewerCount),
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelSubscribe(func(event twitcheventsub.EventChannelSubscribe, msg twitcheventsub.NotificationMessage) {
|
||||
@@ -182,13 +182,13 @@ func NewChatHandlerSub(
|
||||
}
|
||||
description = append(description, fmt.Sprintf("tier '%s'", event.Tier))
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeSubscribe,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: strings.Join(description, " "),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeSubscribe,
|
||||
UserID: streamcontrol.ChatUserID(event.UserID),
|
||||
Username: event.UserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: strings.Join(description, " "),
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelSubscriptionMessage(func(event twitcheventsub.EventChannelSubscriptionMessage, msg twitcheventsub.NotificationMessage) {
|
||||
@@ -202,7 +202,7 @@ func NewChatHandlerSub(
|
||||
"%d months (%d in total), tier '%s', message: %s",
|
||||
event.DurationMonths, event.CumulativeMonths, event.Tier, event.Message.Text,
|
||||
),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelSubscriptionGift(func(event twitcheventsub.EventChannelSubscriptionGift, msg twitcheventsub.NotificationMessage) {
|
||||
@@ -216,29 +216,29 @@ func NewChatHandlerSub(
|
||||
"gift: %d subs, tier '%s'",
|
||||
event.Total, event.Tier,
|
||||
),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventStreamOnline(func(event twitcheventsub.EventStreamOnline, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeStreamOnline,
|
||||
UserID: streamcontrol.ChatUserID(event.BroadcasterUserId),
|
||||
Username: event.BroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: event.StartedAt.Format(time.DateTime),
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeStreamOnline,
|
||||
UserID: streamcontrol.ChatUserID(event.BroadcasterUserId),
|
||||
Username: event.BroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: event.StartedAt.Format(time.DateTime),
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventStreamOffline(func(event twitcheventsub.EventStreamOffline, msg twitcheventsub.NotificationMessage) {
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeStreamOffline,
|
||||
UserID: streamcontrol.ChatUserID(event.BroadcasterUserId),
|
||||
Username: event.BroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: "",
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: streamcontrol.EventTypeStreamOffline,
|
||||
UserID: streamcontrol.ChatUserID(event.BroadcasterUserId),
|
||||
Username: event.BroadcasterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(msg.Metadata.MessageID),
|
||||
Message: "",
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
eventSubClient.OnEventChannelChatMessage(func(chatEvent twitcheventsub.EventChannelChatMessage, msg twitcheventsub.NotificationMessage) {
|
||||
@@ -248,13 +248,13 @@ func NewChatHandlerSub(
|
||||
eventType = streamcontrol.EventTypeCheer
|
||||
}
|
||||
h.sendMessage(ctx, streamcontrol.ChatMessage{
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: eventType,
|
||||
UserID: streamcontrol.ChatUserID(chatEvent.ChatterUserId),
|
||||
Username: chatEvent.ChatterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(chatEvent.MessageId),
|
||||
Message: chatEvent.Message.Text,
|
||||
FormatType: streamcontrol.TextFormatTypePlain,
|
||||
CreatedAt: msg.Metadata.MessageTimestamp,
|
||||
EventType: eventType,
|
||||
UserID: streamcontrol.ChatUserID(chatEvent.ChatterUserId),
|
||||
Username: chatEvent.ChatterUserName,
|
||||
MessageID: streamcontrol.ChatMessageID(chatEvent.MessageId),
|
||||
Message: chatEvent.Message.Text,
|
||||
MessageFormatType: streamcontrol.TextFormatTypePlain,
|
||||
})
|
||||
})
|
||||
|
||||
|
@@ -150,9 +150,9 @@ func (l *ChatListenerOBSOLETE) listenLoop(ctx context.Context) (_err error) {
|
||||
Username: msg.AuthorName,
|
||||
// TODO: find a way to extract the message ID,
|
||||
// in the mean while we we use a soft key for that:
|
||||
MessageID: streamcontrol.ChatMessageID(fmt.Sprintf("%s/%s", msg.AuthorName, msg.Message)),
|
||||
Message: text,
|
||||
FormatType: format,
|
||||
MessageID: streamcontrol.ChatMessageID(fmt.Sprintf("%s/%s", msg.AuthorName, msg.Message)),
|
||||
Message: text,
|
||||
MessageFormatType: format,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,6 +22,22 @@ func ChatMessageGo2GRPC(
|
||||
UsernameReadable: xstring.ToReadable(event.Username),
|
||||
MessageID: string(event.MessageID),
|
||||
Message: event.Message,
|
||||
MessageFormatType: MessageFormatTypeGo2GRPC(event.MessageFormatType),
|
||||
}
|
||||
}
|
||||
|
||||
func MessageFormatTypeGo2GRPC(
|
||||
formatType streamcontrol.TextFormatType,
|
||||
) streamd_grpc.TextFormatType {
|
||||
switch formatType {
|
||||
case streamcontrol.TextFormatTypePlain:
|
||||
return streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_PLAIN
|
||||
case streamcontrol.TextFormatTypeMarkdown:
|
||||
return streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_MARKDOWN
|
||||
case streamcontrol.TextFormatTypeHTML:
|
||||
return streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_HTML
|
||||
default:
|
||||
return streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_UNDEFINED
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,12 +51,28 @@ func ChatMessageGRPC2Go(
|
||||
int64(createdAtUNIXNano)/int64(time.Second),
|
||||
(int64(createdAtUNIXNano)%int64(time.Second))/int64(time.Nanosecond),
|
||||
),
|
||||
EventType: PlatformEventTypeGRPC2Go(event.GetEventType()),
|
||||
UserID: streamcontrol.ChatUserID(event.GetUserID()),
|
||||
Username: event.GetUsername(),
|
||||
MessageID: streamcontrol.ChatMessageID(event.GetMessageID()),
|
||||
Message: event.GetMessage(),
|
||||
EventType: PlatformEventTypeGRPC2Go(event.GetEventType()),
|
||||
UserID: streamcontrol.ChatUserID(event.GetUserID()),
|
||||
Username: event.GetUsername(),
|
||||
MessageID: streamcontrol.ChatMessageID(event.GetMessageID()),
|
||||
Message: event.GetMessage(),
|
||||
MessageFormatType: MessageFormatTypeGRPC2Go(event.GetMessageFormatType()),
|
||||
},
|
||||
Platform: streamcontrol.PlatformName(event.GetPlatID()),
|
||||
}
|
||||
}
|
||||
|
||||
func MessageFormatTypeGRPC2Go(
|
||||
formatType streamd_grpc.TextFormatType,
|
||||
) streamcontrol.TextFormatType {
|
||||
switch formatType {
|
||||
case streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_PLAIN:
|
||||
return streamcontrol.TextFormatTypePlain
|
||||
case streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_MARKDOWN:
|
||||
return streamcontrol.TextFormatTypeMarkdown
|
||||
case streamd_grpc.TextFormatType_TEXT_FORMAT_TYPE_HTML:
|
||||
return streamcontrol.TextFormatTypeHTML
|
||||
default:
|
||||
return streamcontrol.TextFormatTypeUndefined
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user