matrix: send the display name (the nickname in matrix parlance) instead of the user name
There is also the option UseUserName (already in use by the discord bridge) to turn back to the old behavior.
This commit is contained in:
@@ -154,7 +154,7 @@ type Protocol struct {
|
||||
UseTLS bool // IRC
|
||||
UseDiscriminator bool // discord
|
||||
UseFirstName bool // telegram
|
||||
UseUserName bool // discord
|
||||
UseUserName bool // discord, matrix
|
||||
UseInsecureURL bool // telegram
|
||||
VerboseJoinPart bool // IRC
|
||||
WebhookBindAddress string // mattermost, slack
|
||||
|
||||
@@ -22,10 +22,16 @@ var (
|
||||
htmlReplacementTag = regexp.MustCompile("<[^>]*>")
|
||||
)
|
||||
|
||||
type NicknameCacheEntry struct {
|
||||
nickname string
|
||||
lastUpdated time.Time
|
||||
}
|
||||
|
||||
type Bmatrix struct {
|
||||
mc *matrix.Client
|
||||
UserID string
|
||||
RoomMap map[string]string
|
||||
mc *matrix.Client
|
||||
UserID string
|
||||
NicknameMap map[string]NicknameCacheEntry
|
||||
RoomMap map[string]string
|
||||
sync.RWMutex
|
||||
*bridge.Config
|
||||
}
|
||||
@@ -60,6 +66,7 @@ func newMatrixUsername(username string) *matrixUsername {
|
||||
func New(cfg *bridge.Config) bridge.Bridger {
|
||||
b := &Bmatrix{Config: cfg}
|
||||
b.RoomMap = make(map[string]string)
|
||||
b.NicknameMap = make(map[string]NicknameCacheEntry)
|
||||
return b
|
||||
}
|
||||
|
||||
@@ -296,6 +303,43 @@ func (b *Bmatrix) handleEdit(ev *matrix.Event, rmsg config.Message) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (b *Bmatrix) getUserName(mxid string) string {
|
||||
if b.GetBool("UseUserName") {
|
||||
return mxid[1:]
|
||||
}
|
||||
|
||||
b.RLock()
|
||||
if val, present := b.NicknameMap[mxid]; present {
|
||||
if time.Since(val.lastUpdated) < 10*time.Minute {
|
||||
b.RUnlock()
|
||||
return val.nickname
|
||||
}
|
||||
}
|
||||
b.RUnlock()
|
||||
|
||||
nickname, err := b.mc.GetDisplayName(mxid)
|
||||
if err != nil && err.(matrix.HTTPError).Code != 404 {
|
||||
b.Log.Warnf("Couldn't retrieve the display name for %s", mxid)
|
||||
}
|
||||
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
|
||||
if err != nil {
|
||||
b.NicknameMap[mxid] = NicknameCacheEntry{
|
||||
nickname: mxid[1:],
|
||||
lastUpdated: time.Now(),
|
||||
}
|
||||
} else {
|
||||
b.NicknameMap[mxid] = NicknameCacheEntry{
|
||||
nickname: nickname.DisplayName,
|
||||
lastUpdated: time.Now(),
|
||||
}
|
||||
}
|
||||
|
||||
return b.NicknameMap[mxid].nickname
|
||||
}
|
||||
|
||||
func (b *Bmatrix) handleEvent(ev *matrix.Event) {
|
||||
b.Log.Debugf("== Receiving event: %#v", ev)
|
||||
if ev.Sender != b.UserID {
|
||||
@@ -309,7 +353,7 @@ func (b *Bmatrix) handleEvent(ev *matrix.Event) {
|
||||
|
||||
// Create our message
|
||||
rmsg := config.Message{
|
||||
Username: ev.Sender[1:],
|
||||
Username: b.getUserName(ev.Sender),
|
||||
Channel: channel,
|
||||
Account: b.Account,
|
||||
UserID: ev.Sender,
|
||||
|
||||
@@ -1231,6 +1231,9 @@ HTMLDisable=false
|
||||
## RELOADABLE SETTINGS
|
||||
## Settings below can be reloaded by editing the file
|
||||
|
||||
# UseUserName shows the username instead of the server nickname
|
||||
UseUserName=false
|
||||
|
||||
#Whether to prefix messages from other bridges to matrix with the sender's nick.
|
||||
#Useful if username overrides for incoming webhooks isn't enabled on the
|
||||
#matrix server. If you set PrefixMessagesWithNick to true, each message
|
||||
|
||||
Reference in New Issue
Block a user