mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-20 11:51:17 +00:00
Expose user_id in events
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
40b2e9b21c
commit
4818a3105f
3 changed files with 79 additions and 38 deletions
7
fields.go
Normal file
7
fields.go
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
const (
|
||||||
|
eventFieldChannel = "channel"
|
||||||
|
eventFieldUserID = "user_id"
|
||||||
|
eventFieldUserName = "user"
|
||||||
|
)
|
71
irc.go
71
irc.go
|
@ -219,7 +219,7 @@ func (i ircHandler) handleClearChat(m *irc.Message) {
|
||||||
fields = plugins.NewFieldCollection()
|
fields = plugins.NewFieldCollection()
|
||||||
)
|
)
|
||||||
|
|
||||||
fields.Set("channel", i.getChannel(m)) // Compatibility to plugins.DeriveChannel
|
fields.Set(eventFieldChannel, i.getChannel(m)) // Compatibility to plugins.DeriveChannel
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case secondsErr == nil && hasTargetUserID:
|
case secondsErr == nil && hasTargetUserID:
|
||||||
|
@ -249,9 +249,9 @@ func (i ircHandler) handleClearChat(m *irc.Message) {
|
||||||
|
|
||||||
func (i ircHandler) handleClearMessage(m *irc.Message) {
|
func (i ircHandler) handleClearMessage(m *irc.Message) {
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"message_id": m.Tags["target-msg-id"],
|
"message_id": m.Tags["target-msg-id"],
|
||||||
"target_name": m.Tags["login"],
|
"target_name": m.Tags["login"],
|
||||||
})
|
})
|
||||||
log.WithFields(log.Fields(fields.Data())).
|
log.WithFields(log.Fields(fields.Data())).
|
||||||
WithField("message", m.Trailing()).
|
WithField("message", m.Trailing()).
|
||||||
|
@ -261,16 +261,16 @@ func (i ircHandler) handleClearMessage(m *irc.Message) {
|
||||||
|
|
||||||
func (i ircHandler) handleJoin(m *irc.Message) {
|
func (i ircHandler) handleJoin(m *irc.Message) {
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"user": m.User, // Compatibility to plugins.DeriveUser
|
eventFieldUserName: m.User, // Compatibility to plugins.DeriveUser
|
||||||
})
|
})
|
||||||
go handleMessage(i.c, m, eventTypeJoin, fields)
|
go handleMessage(i.c, m, eventTypeJoin, fields)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i ircHandler) handlePart(m *irc.Message) {
|
func (i ircHandler) handlePart(m *irc.Message) {
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"user": m.User, // Compatibility to plugins.DeriveUser
|
eventFieldUserName: m.User, // Compatibility to plugins.DeriveUser
|
||||||
})
|
})
|
||||||
go handleMessage(i.c, m, eventTypePart, fields)
|
go handleMessage(i.c, m, eventTypePart, fields)
|
||||||
}
|
}
|
||||||
|
@ -290,10 +290,10 @@ func (i ircHandler) handlePermit(m *irc.Message) {
|
||||||
username := msgParts[1]
|
username := msgParts[1]
|
||||||
|
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"user": m.User, // Compatibility to plugins.DeriveUser
|
eventFieldUserName: m.User, // Compatibility to plugins.DeriveUser
|
||||||
"username": username, // DEPRECATED but kept for comapatibility
|
eventFieldUserID: m.Tags["user-id"],
|
||||||
"to": username,
|
"to": username,
|
||||||
})
|
})
|
||||||
|
|
||||||
log.WithFields(fields.Data()).Debug("Added permit")
|
log.WithFields(fields.Data()).Debug("Added permit")
|
||||||
|
@ -304,9 +304,9 @@ func (i ircHandler) handlePermit(m *irc.Message) {
|
||||||
|
|
||||||
func (i ircHandler) handleTwitchNotice(m *irc.Message) {
|
func (i ircHandler) handleTwitchNotice(m *irc.Message) {
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"channel": i.getChannel(m),
|
eventFieldChannel: i.getChannel(m),
|
||||||
"tags": m.Tags,
|
"tags": m.Tags,
|
||||||
"trailing": m.Trailing(),
|
"trailing": m.Trailing(),
|
||||||
}).Trace("IRC NOTICE event")
|
}).Trace("IRC NOTICE event")
|
||||||
|
|
||||||
switch m.Tags["msg-id"] {
|
switch m.Tags["msg-id"] {
|
||||||
|
@ -318,8 +318,8 @@ func (i ircHandler) handleTwitchNotice(m *irc.Message) {
|
||||||
log.WithField("trailing", m.Trailing()).Warn("Incoming host")
|
log.WithField("trailing", m.Trailing()).Warn("Incoming host")
|
||||||
|
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"user": m.User, // Compatibility to plugins.DeriveUser
|
eventFieldUserName: m.User, // Compatibility to plugins.DeriveUser
|
||||||
})
|
})
|
||||||
go handleMessage(i.c, m, eventTypeHost, fields)
|
go handleMessage(i.c, m, eventTypeHost, fields)
|
||||||
|
|
||||||
|
@ -328,11 +328,12 @@ func (i ircHandler) handleTwitchNotice(m *irc.Message) {
|
||||||
|
|
||||||
func (i ircHandler) handleTwitchPrivmsg(m *irc.Message) {
|
func (i ircHandler) handleTwitchPrivmsg(m *irc.Message) {
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"channel": i.getChannel(m),
|
eventFieldChannel: i.getChannel(m),
|
||||||
"name": m.Name,
|
"name": m.Name,
|
||||||
"user": m.User,
|
eventFieldUserName: m.User,
|
||||||
"tags": m.Tags,
|
eventFieldUserID: m.Tags["user-id"],
|
||||||
"trailing": m.Trailing(),
|
"tags": m.Tags,
|
||||||
|
"trailing": m.Trailing(),
|
||||||
}).Trace("Received privmsg")
|
}).Trace("Received privmsg")
|
||||||
|
|
||||||
if m.User != i.user {
|
if m.User != i.user {
|
||||||
|
@ -352,9 +353,9 @@ func (i ircHandler) handleTwitchPrivmsg(m *irc.Message) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"channel": fmt.Sprintf("#%s", i.user),
|
eventFieldChannel: fmt.Sprintf("#%s", i.user),
|
||||||
"from": matches[1],
|
"from": matches[1],
|
||||||
"viewerCount": 0,
|
"viewerCount": 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
if v, err := strconv.Atoi(matches[2]); err == nil {
|
if v, err := strconv.Atoi(matches[2]); err == nil {
|
||||||
|
@ -374,10 +375,11 @@ func (i ircHandler) handleTwitchPrivmsg(m *irc.Message) {
|
||||||
|
|
||||||
if bits := i.tagToNumeric(m, "bits", 0); bits > 0 {
|
if bits := i.tagToNumeric(m, "bits", 0); bits > 0 {
|
||||||
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
fields := plugins.FieldCollectionFromData(map[string]interface{}{
|
||||||
"bits": bits,
|
"bits": bits,
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"message": m.Trailing(),
|
"message": m.Trailing(),
|
||||||
"user": m.User, // Compatibility to plugins.DeriveUser
|
eventFieldUserName: m.User, // Compatibility to plugins.DeriveUser
|
||||||
|
eventFieldUserID: m.Tags["user-id"],
|
||||||
})
|
})
|
||||||
|
|
||||||
log.WithFields(log.Fields(fields.Data())).Info("User spent bits in chat message")
|
log.WithFields(log.Fields(fields.Data())).Info("User spent bits in chat message")
|
||||||
|
@ -390,14 +392,15 @@ func (i ircHandler) handleTwitchPrivmsg(m *irc.Message) {
|
||||||
|
|
||||||
func (i ircHandler) handleTwitchUsernotice(m *irc.Message) {
|
func (i ircHandler) handleTwitchUsernotice(m *irc.Message) {
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"channel": i.getChannel(m),
|
eventFieldChannel: i.getChannel(m),
|
||||||
"tags": m.Tags,
|
"tags": m.Tags,
|
||||||
"trailing": m.Trailing(),
|
"trailing": m.Trailing(),
|
||||||
}).Trace("IRC USERNOTICE event")
|
}).Trace("IRC USERNOTICE event")
|
||||||
|
|
||||||
evtData := plugins.FieldCollectionFromData(map[string]any{
|
evtData := plugins.FieldCollectionFromData(map[string]any{
|
||||||
"channel": i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
eventFieldChannel: i.getChannel(m), // Compatibility to plugins.DeriveChannel
|
||||||
"user": m.Tags["login"], // Compatibility to plugins.DeriveUser
|
eventFieldUserName: m.Tags["login"], // Compatibility to plugins.DeriveUser
|
||||||
|
eventFieldUserID: m.Tags["user-id"],
|
||||||
})
|
})
|
||||||
|
|
||||||
switch m.Tags["msg-id"] {
|
switch m.Tags["msg-id"] {
|
||||||
|
|
|
@ -17,6 +17,13 @@ var (
|
||||||
_ plugins.MsgFormatter = formatMessage
|
_ plugins.MsgFormatter = formatMessage
|
||||||
|
|
||||||
stripNewline = regexp.MustCompile(`(?m)\s*\n\s*`)
|
stripNewline = regexp.MustCompile(`(?m)\s*\n\s*`)
|
||||||
|
|
||||||
|
formatMessageFieldSetters = []func(compiledFields *plugins.FieldCollection, m *irc.Message, fields *plugins.FieldCollection){
|
||||||
|
formatMessageFieldChannel,
|
||||||
|
formatMessageFieldMessage,
|
||||||
|
formatMessageFieldUserID,
|
||||||
|
formatMessageFieldUsername,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func formatMessage(tplString string, m *irc.Message, r *plugins.Rule, fields *plugins.FieldCollection) (string, error) {
|
func formatMessage(tplString string, m *irc.Message, r *plugins.Rule, fields *plugins.FieldCollection) (string, error) {
|
||||||
|
@ -31,11 +38,9 @@ func formatMessage(tplString string, m *irc.Message, r *plugins.Rule, fields *pl
|
||||||
|
|
||||||
compiledFields.SetFromData(fields.Data())
|
compiledFields.SetFromData(fields.Data())
|
||||||
|
|
||||||
if m != nil {
|
for _, fn := range formatMessageFieldSetters {
|
||||||
compiledFields.Set("msg", m)
|
fn(compiledFields, m, fields)
|
||||||
}
|
}
|
||||||
compiledFields.Set("username", plugins.DeriveUser(m, fields))
|
|
||||||
compiledFields.Set("channel", plugins.DeriveChannel(m, fields))
|
|
||||||
|
|
||||||
// Template in frontend supports newlines, messages do not
|
// Template in frontend supports newlines, messages do not
|
||||||
tplString = stripNewline.ReplaceAllString(tplString, " ")
|
tplString = stripNewline.ReplaceAllString(tplString, " ")
|
||||||
|
@ -54,3 +59,29 @@ func formatMessage(tplString string, m *irc.Message, r *plugins.Rule, fields *pl
|
||||||
|
|
||||||
return buf.String(), errors.Wrap(err, "execute template")
|
return buf.String(), errors.Wrap(err, "execute template")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatMessageFieldChannel(compiledFields *plugins.FieldCollection, m *irc.Message, fields *plugins.FieldCollection) {
|
||||||
|
compiledFields.Set(eventFieldChannel, plugins.DeriveChannel(m, fields))
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatMessageFieldMessage(compiledFields *plugins.FieldCollection, m *irc.Message, fields *plugins.FieldCollection) {
|
||||||
|
if m == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
compiledFields.Set("msg", m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatMessageFieldUserID(compiledFields *plugins.FieldCollection, m *irc.Message, fields *plugins.FieldCollection) {
|
||||||
|
if m == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if uid := m.Tags["user-id"]; uid != "" {
|
||||||
|
compiledFields.Set(eventFieldUserID, uid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatMessageFieldUsername(compiledFields *plugins.FieldCollection, m *irc.Message, fields *plugins.FieldCollection) {
|
||||||
|
compiledFields.Set("username", plugins.DeriveUser(m, fields))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue