handlematrix: implement RoomNameHandlingNetworkAPI
This commit is contained in:
@@ -60,7 +60,7 @@ func (tg *TelegramConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (tg *TelegramConnector) GetBridgeInfoVersion() (info, capabilities int) {
|
func (tg *TelegramConnector) GetBridgeInfoVersion() (info, capabilities int) {
|
||||||
return 1, 7
|
return 1, 8
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO get these from getConfig instead of hardcoding?
|
// TODO get these from getConfig instead of hardcoding?
|
||||||
@@ -210,7 +210,7 @@ func makeTimerList() []jsontime.Milliseconds {
|
|||||||
var telegramTimers = makeTimerList()
|
var telegramTimers = makeTimerList()
|
||||||
|
|
||||||
func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.Portal) *event.RoomFeatures {
|
func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.Portal) *event.RoomFeatures {
|
||||||
baseID := "fi.mau.telegram.capabilities.2025_11_12"
|
baseID := "fi.mau.telegram.capabilities.2025_11_24"
|
||||||
feat := &event.RoomFeatures{
|
feat := &event.RoomFeatures{
|
||||||
Formatting: formattingCaps,
|
Formatting: formattingCaps,
|
||||||
File: fileCaps,
|
File: fileCaps,
|
||||||
@@ -228,6 +228,9 @@ func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.P
|
|||||||
Types: []event.DisappearingType{event.DisappearingTypeAfterSend},
|
Types: []event.DisappearingType{event.DisappearingTypeAfterSend},
|
||||||
Timers: telegramTimers,
|
Timers: telegramTimers,
|
||||||
},
|
},
|
||||||
|
State: event.StateFeatureMap{
|
||||||
|
event.StateRoomName.Type: {Level: event.CapLevelFullySupported},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
// TODO non-admins can only edit messages within 48 hours
|
// TODO non-admins can only edit messages within 48 hours
|
||||||
|
|
||||||
@@ -261,6 +264,7 @@ func (t *TelegramClient) GetCapabilities(ctx context.Context, portal *bridgev2.P
|
|||||||
baseID += "+dm"
|
baseID += "+dm"
|
||||||
feat.DeleteChat = true
|
feat.DeleteChat = true
|
||||||
feat.DeleteChatForEveryone = true
|
feat.DeleteChatForEveryone = true
|
||||||
|
feat.State = nil
|
||||||
default:
|
default:
|
||||||
// Group creators can delete the chat for everyone, unless it's a large channel
|
// Group creators can delete the chat for everyone, unless it's a large channel
|
||||||
if peerType == ids.PeerTypeChat || portalMetadata.ParticipantsCount < 1000 {
|
if peerType == ids.PeerTypeChat || portalMetadata.ParticipantsCount < 1000 {
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ var (
|
|||||||
_ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil)
|
_ bridgev2.TagHandlingNetworkAPI = (*TelegramClient)(nil)
|
||||||
_ bridgev2.ChatViewingNetworkAPI = (*TelegramClient)(nil)
|
_ bridgev2.ChatViewingNetworkAPI = (*TelegramClient)(nil)
|
||||||
_ bridgev2.DeleteChatHandlingNetworkAPI = (*TelegramClient)(nil)
|
_ bridgev2.DeleteChatHandlingNetworkAPI = (*TelegramClient)(nil)
|
||||||
|
_ bridgev2.RoomNameHandlingNetworkAPI = (*TelegramClient)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
func getMediaFilename(content *event.MessageEventContent) (filename string) {
|
func getMediaFilename(content *event.MessageEventContent) (filename string) {
|
||||||
@@ -856,3 +857,40 @@ func (t *TelegramClient) HandleMatrixDeleteChat(ctx context.Context, chat *bridg
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *TelegramClient) HandleMatrixRoomName(ctx context.Context, msg *bridgev2.MatrixRoomName) (bool, error) {
|
||||||
|
peerType, id, err := ids.ParsePortalID(msg.Portal.ID)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch peerType {
|
||||||
|
case ids.PeerTypeChat:
|
||||||
|
_, err = t.client.API().MessagesEditChatTitle(ctx, &tg.MessagesEditChatTitleRequest{
|
||||||
|
ChatID: id,
|
||||||
|
Title: msg.Content.Name,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
case ids.PeerTypeChannel:
|
||||||
|
accessHash, err := t.ScopedStore.GetAccessHash(ctx, peerType, id)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
_, err = t.client.API().ChannelsEditTitle(ctx, &tg.ChannelsEditTitleRequest{
|
||||||
|
Channel: &tg.InputChannel{
|
||||||
|
ChannelID: id,
|
||||||
|
AccessHash: accessHash,
|
||||||
|
},
|
||||||
|
Title: msg.Content.Name,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
default:
|
||||||
|
return false, fmt.Errorf("unsupported peer type %s for changing room name", peerType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user