summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucki <Lucki1@hotmail.de>2022-09-06 00:46:52 +0200
committerGitHub <noreply@github.com>2022-09-06 00:46:52 +0200
commit0c839469839314f432703b8294cf318d5d16d785 (patch)
treeb6f944a76881b87c0c3a8ba75f51ccdcfcf28fa2
parentfda05f22629156cc2eae130b501ebced2261ab42 (diff)
downloadmatterbridge-msglm-0c839469839314f432703b8294cf318d5d16d785.tar.gz
matterbridge-msglm-0c839469839314f432703b8294cf318d5d16d785.tar.bz2
matterbridge-msglm-0c839469839314f432703b8294cf318d5d16d785.zip
Add Matrix username spoofing (#1875)
* Matrix username spoofing * Add config sample
-rw-r--r--bridge/matrix/helpers.go2
-rw-r--r--bridge/matrix/matrix.go46
-rw-r--r--matterbridge.toml.sample5
3 files changed, 41 insertions, 12 deletions
diff --git a/bridge/matrix/helpers.go b/bridge/matrix/helpers.go
index b8e848a2..5a91f748 100644
--- a/bridge/matrix/helpers.go
+++ b/bridge/matrix/helpers.go
@@ -51,7 +51,7 @@ func interface2Struct(in interface{}, out interface{}) error {
return json.Unmarshal(jsonObj, out)
}
-// getDisplayName retrieves the displayName for mxid, querying the homserver if the mxid is not in the cache.
+// getDisplayName retrieves the displayName for mxid, querying the homeserver if the mxid is not in the cache.
func (b *Bmatrix) getDisplayName(mxid string) string {
if b.GetBool("UseUserName") {
return mxid[1:]
diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go
index 702f4c8d..49fc33b3 100644
--- a/bridge/matrix/matrix.go
+++ b/bridge/matrix/matrix.go
@@ -148,12 +148,37 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
username := newMatrixUsername(msg.Username)
+ body := username.plain + msg.Text
+ formattedBody := username.formatted + helper.ParseMarkdown(msg.Text)
+
+ if b.GetBool("SpoofUsername") {
+ // https://spec.matrix.org/v1.3/client-server-api/#mroommember
+ type stateMember struct {
+ AvatarURL string `json:"avatar_url,omitempty"`
+ DisplayName string `json:"displayname"`
+ Membership string `json:"membership"`
+ }
+
+ // TODO: reset username afterwards with DisplayName: null ?
+ m := stateMember{
+ AvatarURL: "",
+ DisplayName: username.plain,
+ Membership: "join",
+ }
+
+ _, err := b.mc.SendStateEvent(channel, "m.room.member", b.UserID, m)
+ if err == nil {
+ body = msg.Text
+ formattedBody = helper.ParseMarkdown(msg.Text)
+ }
+ }
+
// Make a action /me of the message
if msg.Event == config.EventUserAction {
m := matrix.TextMessage{
MsgType: "m.emote",
- Body: username.plain + msg.Text,
- FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text),
+ Body: body,
+ FormattedBody: formattedBody,
Format: "org.matrix.custom.html",
}
@@ -224,10 +249,10 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
if msg.ID != "" {
rmsg := EditedMessage{
TextMessage: matrix.TextMessage{
- Body: username.plain + msg.Text,
+ Body: body,
MsgType: "m.text",
Format: "org.matrix.custom.html",
- FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text),
+ FormattedBody: formattedBody,
},
}
@@ -266,8 +291,8 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
if msg.Event == config.EventJoinLeave {
m := matrix.TextMessage{
MsgType: "m.notice",
- Body: username.plain + msg.Text,
- FormattedBody: username.formatted + msg.Text,
+ Body: body,
+ FormattedBody: formattedBody,
Format: "org.matrix.custom.html",
}
@@ -297,8 +322,8 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
m := ReplyMessage{
TextMessage: matrix.TextMessage{
MsgType: "m.text",
- Body: username.plain + msg.Text,
- FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text),
+ Body: body,
+ FormattedBody: formattedBody,
Format: "org.matrix.custom.html",
},
}
@@ -338,7 +363,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
)
err = b.retry(func() error {
- resp, err = b.mc.SendText(channel, username.plain+msg.Text)
+ resp, err = b.mc.SendText(channel, body)
return err
})
@@ -356,8 +381,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
)
err = b.retry(func() error {
- resp, err = b.mc.SendFormattedText(channel, username.plain+msg.Text,
- username.formatted+helper.ParseMarkdown(msg.Text))
+ resp, err = b.mc.SendFormattedText(channel, body, formattedBody)
return err
})
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index 41ab44bf..97b27d73 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -1390,6 +1390,11 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
#OPTIONAL (default false)
ShowJoinPart=false
+#Rename the bot in the current room to the username of the message
+#This will make an additional API request per message and will probably count towards rate limits
+#OPTIONAL (default false)
+SpoofUsername=false
+
#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285
#It will strip other characters from the nick
#OPTIONAL (default false)