forked from jshiffer/matterbridge
Add Matrix username spoofing (#1875)
* Matrix username spoofing * Add config sample
This commit is contained in:
parent
fda05f2262
commit
0c83946983
@ -51,7 +51,7 @@ func interface2Struct(in interface{}, out interface{}) error {
|
|||||||
return json.Unmarshal(jsonObj, out)
|
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 {
|
func (b *Bmatrix) getDisplayName(mxid string) string {
|
||||||
if b.GetBool("UseUserName") {
|
if b.GetBool("UseUserName") {
|
||||||
return mxid[1:]
|
return mxid[1:]
|
||||||
|
@ -148,12 +148,37 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
|
|||||||
|
|
||||||
username := newMatrixUsername(msg.Username)
|
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
|
// Make a action /me of the message
|
||||||
if msg.Event == config.EventUserAction {
|
if msg.Event == config.EventUserAction {
|
||||||
m := matrix.TextMessage{
|
m := matrix.TextMessage{
|
||||||
MsgType: "m.emote",
|
MsgType: "m.emote",
|
||||||
Body: username.plain + msg.Text,
|
Body: body,
|
||||||
FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text),
|
FormattedBody: formattedBody,
|
||||||
Format: "org.matrix.custom.html",
|
Format: "org.matrix.custom.html",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,10 +249,10 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
|
|||||||
if msg.ID != "" {
|
if msg.ID != "" {
|
||||||
rmsg := EditedMessage{
|
rmsg := EditedMessage{
|
||||||
TextMessage: matrix.TextMessage{
|
TextMessage: matrix.TextMessage{
|
||||||
Body: username.plain + msg.Text,
|
Body: body,
|
||||||
MsgType: "m.text",
|
MsgType: "m.text",
|
||||||
Format: "org.matrix.custom.html",
|
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 {
|
if msg.Event == config.EventJoinLeave {
|
||||||
m := matrix.TextMessage{
|
m := matrix.TextMessage{
|
||||||
MsgType: "m.notice",
|
MsgType: "m.notice",
|
||||||
Body: username.plain + msg.Text,
|
Body: body,
|
||||||
FormattedBody: username.formatted + msg.Text,
|
FormattedBody: formattedBody,
|
||||||
Format: "org.matrix.custom.html",
|
Format: "org.matrix.custom.html",
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,8 +322,8 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
|
|||||||
m := ReplyMessage{
|
m := ReplyMessage{
|
||||||
TextMessage: matrix.TextMessage{
|
TextMessage: matrix.TextMessage{
|
||||||
MsgType: "m.text",
|
MsgType: "m.text",
|
||||||
Body: username.plain + msg.Text,
|
Body: body,
|
||||||
FormattedBody: username.formatted + helper.ParseMarkdown(msg.Text),
|
FormattedBody: formattedBody,
|
||||||
Format: "org.matrix.custom.html",
|
Format: "org.matrix.custom.html",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -338,7 +363,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
err = b.retry(func() 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
|
return err
|
||||||
})
|
})
|
||||||
@ -356,8 +381,7 @@ func (b *Bmatrix) Send(msg config.Message) (string, error) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
err = b.retry(func() error {
|
err = b.retry(func() error {
|
||||||
resp, err = b.mc.SendFormattedText(channel, username.plain+msg.Text,
|
resp, err = b.mc.SendFormattedText(channel, body, formattedBody)
|
||||||
username.formatted+helper.ParseMarkdown(msg.Text))
|
|
||||||
|
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
@ -1390,6 +1390,11 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
|||||||
#OPTIONAL (default false)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=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
|
#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285
|
||||||
#It will strip other characters from the nick
|
#It will strip other characters from the nick
|
||||||
#OPTIONAL (default false)
|
#OPTIONAL (default false)
|
||||||
|
Loading…
Reference in New Issue
Block a user