Procházet zdrojové kódy

Remove unnecessary user parameter in parseMatrixHTML

Tulir Asokan před 2 roky
rodič
revize
6365db46cc
3 změnil soubory, kde provedl 12 přidání a 17 odebrání
  1. 7 14
      formatter.go
  2. 2 0
      main.go
  3. 3 3
      portal.go

+ 7 - 14
formatter.go

@@ -90,23 +90,21 @@ func (portal *Portal) renderDiscordMarkdownOnlyHTML(text string, allowInlineLink
 	return format.UnwrapSingleParagraph(buf.String())
 }
 
-const formatterContextUserKey = "fi.mau.discord.user"
 const formatterContextPortalKey = "fi.mau.discord.portal"
 
-func pillConverter(displayname, mxid, eventID string, ctx format.Context) string {
+func (br *DiscordBridge) pillConverter(displayname, mxid, eventID string, ctx format.Context) string {
 	if len(mxid) == 0 {
 		return displayname
 	}
-	user := ctx.ReturnData[formatterContextUserKey].(*User)
 	if mxid[0] == '#' {
-		alias, err := user.bridge.Bot.ResolveAlias(id.RoomAlias(mxid))
+		alias, err := br.Bot.ResolveAlias(id.RoomAlias(mxid))
 		if err != nil {
 			return displayname
 		}
 		mxid = alias.RoomID.String()
 	}
 	if mxid[0] == '!' {
-		portal := user.bridge.GetPortalByMXID(id.RoomID(mxid))
+		portal := br.GetPortalByMXID(id.RoomID(mxid))
 		if portal != nil {
 			if eventID == "" {
 				//currentPortal := ctx[formatterContextPortalKey].(*Portal)
@@ -117,7 +115,7 @@ func pillConverter(displayname, mxid, eventID string, ctx format.Context) string
 				//} else {
 				//	// TODO is mentioning private channels possible at all?
 				//}
-			} else if msg := user.bridge.DB.Message.GetByMXID(portal.Key, id.EventID(eventID)); msg != nil {
+			} else if msg := br.DB.Message.GetByMXID(portal.Key, id.EventID(eventID)); msg != nil {
 				guildID := portal.GuildID
 				if guildID == "" {
 					guildID = "@me"
@@ -126,11 +124,11 @@ func pillConverter(displayname, mxid, eventID string, ctx format.Context) string
 			}
 		}
 	} else if mxid[0] == '@' {
-		parsedID, ok := user.bridge.ParsePuppetMXID(id.UserID(mxid))
+		parsedID, ok := br.ParsePuppetMXID(id.UserID(mxid))
 		if ok {
 			return fmt.Sprintf("<@%s>", parsedID)
 		}
-		mentionedUser := user.bridge.GetUserByMXID(id.UserID(mxid))
+		mentionedUser := br.GetUserByMXID(id.UserID(mxid))
 		if mentionedUser != nil && mentionedUser.DiscordID != "" {
 			return fmt.Sprintf("<@%s>", mentionedUser.DiscordID)
 		}
@@ -197,14 +195,9 @@ var matrixHTMLParser = &format.HTMLParser{
 	},
 }
 
-func init() {
-	matrixHTMLParser.PillConverter = pillConverter
-}
-
-func (portal *Portal) parseMatrixHTML(user *User, content *event.MessageEventContent) string {
+func (portal *Portal) parseMatrixHTML(content *event.MessageEventContent) string {
 	if content.Format == event.FormatHTML && len(content.FormattedBody) > 0 {
 		ctx := format.NewContext()
-		ctx.ReturnData[formatterContextUserKey] = user
 		ctx.ReturnData[formatterContextPortalKey] = portal
 		return variationselector.FullyQualify(matrixHTMLParser.Parse(content.FormattedBody, ctx))
 	} else {

+ 2 - 0
main.go

@@ -97,6 +97,8 @@ func (br *DiscordBridge) Init() {
 	br.CommandProcessor = commands.NewProcessor(&br.Bridge)
 	br.RegisterCommands()
 
+	matrixHTMLParser.PillConverter = br.pillConverter
+
 	br.DB = database.New(br.Bridge.DB, br.Log.Sub("Database"))
 	discordLog = br.ZLog.With().Str("component", "discordgo").Logger()
 

+ 3 - 3
portal.go

@@ -1083,7 +1083,7 @@ func (portal *Portal) handleMatrixMessage(sender *User, evt *event.Event) {
 	if editMXID := content.GetRelatesTo().GetReplaceID(); editMXID != "" && content.NewContent != nil {
 		edits := portal.bridge.DB.Message.GetByMXID(portal.Key, editMXID)
 		if edits != nil {
-			discordContent := portal.parseMatrixHTML(sender, content.NewContent)
+			discordContent := portal.parseMatrixHTML(content.NewContent)
 			// TODO save edit in message table
 			_, err := sender.Session.ChannelMessageEdit(edits.DiscordProtoChannelID(), edits.DiscordID, discordContent)
 			go portal.sendMessageMetrics(evt, err, "Failed to edit")
@@ -1129,7 +1129,7 @@ func (portal *Portal) handleMatrixMessage(sender *User, evt *event.Event) {
 				}
 			}
 		}
-		sendReq.Content = portal.parseMatrixHTML(sender, content)
+		sendReq.Content = portal.parseMatrixHTML(content)
 	case event.MsgAudio, event.MsgFile, event.MsgImage, event.MsgVideo:
 		data, err := downloadMatrixAttachment(portal.MainIntent(), content)
 		if err != nil {
@@ -1145,7 +1145,7 @@ func (portal *Portal) handleMatrixMessage(sender *User, evt *event.Event) {
 		sendReq.Attachments = []*discordgo.MessageAttachment{att}
 		if content.FileName != "" && content.FileName != content.Body {
 			att.Filename = content.FileName
-			sendReq.Content = portal.parseMatrixHTML(sender, content)
+			sendReq.Content = portal.parseMatrixHTML(content)
 		}
 		prep, err := sender.Session.ChannelAttachmentCreate(channelID, &discordgo.ReqPrepareAttachments{
 			Files: []*discordgo.FilePrepare{{