[WIP] Send introduction text and help after the bot joins a room

This appears to work, except that the join event is triggered twice,
and we send the (introduction + help) twice.
This commit is contained in:
Slavi Pantaleev
2022-08-25 11:58:18 +03:00
parent 3495c60f24
commit 8e1aa5b11c
2 changed files with 65 additions and 0 deletions

View File

@@ -9,6 +9,16 @@ import (
)
func (b *Bot) initSync() {
b.lp.OnEventType(
event.StateMember,
func(_ mautrix.EventSource, evt *event.Event) {
// Trying to debug the membership=join event being handled twice here.
eventJSON, _ := evt.MarshalJSON()
b.log.Debug(string(eventJSON))
go b.onMembership(evt)
},
)
b.lp.OnEventType(
event.EventMessage,
func(_ mautrix.EventSource, evt *event.Event) {
@@ -21,6 +31,31 @@ func (b *Bot) initSync() {
})
}
func (b *Bot) onMembership(evt *event.Event) {
hub := sentry.CurrentHub().Clone()
hub.ConfigureScope(func(scope *sentry.Scope) {
scope.SetUser(sentry.User{ID: evt.Sender.String()})
scope.SetContext("event", map[string]string{
"id": evt.ID.String(),
"room": evt.RoomID.String(),
"sender": evt.Sender.String(),
})
})
if evt.Sender == b.lp.GetClient().UserID {
// Handle membership events related to our own (bot) user first
switch evt.Content.AsMember().Membership {
case event.MembershipJoin:
b.onBotJoin(evt, hub)
}
return
}
// Handle membership events related to other users
}
func (b *Bot) onMessage(evt *event.Event) {
// ignore own messages
if evt.Sender == b.lp.GetClient().UserID {
@@ -70,3 +105,13 @@ func (b *Bot) onEncryptedMessage(evt *event.Event) {
b.handle(span.Context(), decrypted)
}
// onBotJoin handles the "bot joined the room" event
func (b *Bot) onBotJoin(evt *event.Event, hub *sentry.Hub) {
ctx := sentry.SetHubOnContext(context.Background(), hub)
span := sentry.StartSpan(ctx, "http.server", sentry.TransactionName("onBotJoin"))
defer span.Finish()
b.sendIntroduction(ctx, evt.RoomID)
b.sendHelp(ctx, evt.RoomID)
}