Start of the bot and it's matrix connection

This commit is contained in:
Gary Kramlich
2021-12-07 19:08:58 -06:00
parent 4be28617e0
commit be3982e585
5 changed files with 209 additions and 6 deletions

87
bridge/matrix.go Normal file
View File

@@ -0,0 +1,87 @@
package bridge
import (
"maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/appservice"
"maunium.net/go/mautrix/event"
)
type matrixHandler struct {
as *appservice.AppService
bridge *Bridge
log maulogger.Logger
}
func (b *Bridge) setupEvents() {
b.eventProcessor = appservice.NewEventProcessor(b.as)
b.matrixHandler = &matrixHandler{
as: b.as,
bridge: b,
log: b.log.Sub("Matrix"),
}
b.eventProcessor.On(event.EventMessage, b.matrixHandler.handleMessage)
b.eventProcessor.On(event.StateMember, b.matrixHandler.handleMembership)
}
func (mh *MatrixHandler) join(evt *event.Event, intent *appservice.IntentAPI) *mautrix.RespJoinedMembers {
resp, err := intent.JoinRoomByID(evt.RoomID)
if err != nil {
mh.log.Debugfln("Failed to join room %s as %s with invite from %s: %v", evt.RoomID, intent.UserID, evt.Sender, err)
return nil
}
members, err := intent.JoinedMembers(resp.RoomID)
if err != nil {
intent.LeaveRoom(resp.RoomID)
mh.log.Debugfln("Failed to get members in room %s after accepting invite from %s as %s: %v", resp.RoomID, evt.Sender, intent.UserID, err)
return nil
}
if len(members.Joined) < 2 {
intent.LeaveRoom(resp.RoomID)
mh.log.Debugln("Leaving empty room", resp.RoomID, "after accepting invite from", evt.Sender, "as", intent.UserID)
return nil
}
return members
}
func (mh *matrixHandler) ignoreEvent(evt *event.Event) bool {
return false
}
func (mh *matrixHandler) handleMessage(evt *event.Event) {
if mh.ignoreEvent(evt) {
return
}
mh.log.Debugfln("received message from %q: %q", evt.Sender, evt.Content.AsMessage())
}
func (mh *matrixHandler) handleMembership(evt *event.Event) {
mh.log.Debugfln("recevied invite %#v\n", evt)
// Return early if we're supposed to ignore the event.
if mh.ignoreEvent(evt) {
return
}
// Grab the content of the event.
content := evt.Content.AsMessage()
// TODO: handle invites from ourselfs?
isSelf := id.UserID(evt.GetStateKey()) == evt.Sender
// Handle matrix invites.
if content.Membership == event.MembershipInvite && !isSelf {
//
}
}