Add support for kicking Telegram users from Matrix
This commit is contained in:
@@ -62,7 +62,7 @@ does not do this automatically.
|
|||||||
* [ ] Power level
|
* [ ] Power level
|
||||||
* [ ] Membership actions
|
* [ ] Membership actions
|
||||||
* [x] Inviting
|
* [x] Inviting
|
||||||
* [ ] Kicking
|
* [x] Kicking
|
||||||
* [ ] Joining/leaving
|
* [ ] Joining/leaving
|
||||||
* [ ] Room metadata changes
|
* [ ] Room metadata changes
|
||||||
* [x] Room invites
|
* [x] Room invites
|
||||||
|
|||||||
+28
-3
@@ -494,6 +494,26 @@ class MautrixTelegram {
|
|||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async handlePart(sender, evt) {
|
||||||
|
const capture = this.usernameRegex.exec(evt.state_key)
|
||||||
|
if (!capture) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const telegramID = +capture[1]
|
||||||
|
if (!telegramID || isNaN(telegramID)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const user = await this.getTelegramUser(telegramID)
|
||||||
|
|
||||||
|
const portal = await this.getPortalByRoomID(evt.room_id)
|
||||||
|
if (!portal) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await portal.kickTelegram(sender.telegramPuppet, user)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle an invite to a Matrix room.
|
* Handle an invite to a Matrix room.
|
||||||
*
|
*
|
||||||
@@ -590,9 +610,14 @@ class MautrixTelegram {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const asBotID = this.bridge.getBot().getUserId()
|
const asBotID = this.bridge.getBot().getUserId()
|
||||||
if (evt.type === "m.room.member" && evt.content.membership === "invite") {
|
if (evt.type === "m.room.member") {
|
||||||
await this.handleInvite(user, evt)
|
if (evt.content.membership === "invite") {
|
||||||
return
|
await this.handleInvite(user, evt)
|
||||||
|
return
|
||||||
|
} else if (evt.content.membership === "leave") {
|
||||||
|
await this.handlePart(user, evt)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (evt.sender === asBotID || evt.type !== "m.room.message" || !evt.content) {
|
if (evt.sender === asBotID || evt.type !== "m.room.message" || !evt.content) {
|
||||||
|
|||||||
+9
-3
@@ -448,17 +448,23 @@ class Portal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async kickTelegram(telegramPOV, user) {
|
async kickTelegram(telegramPOV, user) {
|
||||||
|
let updates
|
||||||
if (this.peer.type === "chat") {
|
if (this.peer.type === "chat") {
|
||||||
const updates = await telegramPOV.client("messages.deleteChatUser", {
|
updates = await telegramPOV.client("messages.deleteChatUser", {
|
||||||
chat_id: this.peer.id,
|
chat_id: this.peer.id,
|
||||||
user_id: user.toPeer(telegramPOV).toInputObject(),
|
user_id: user.toPeer(telegramPOV).toInputObject(),
|
||||||
})
|
})
|
||||||
console.log("Chat kick result:", updates)
|
|
||||||
} else if (this.peer.type === "channel") {
|
} else if (this.peer.type === "channel") {
|
||||||
throw new Error("I don't know how to kick users from channels :(")
|
this.loadAccessHash(telegramPOV)
|
||||||
|
updates = await telegramPOV.client("channels.kickFromChannel", {
|
||||||
|
channel: this.peer.toInputObject(),
|
||||||
|
user_id: user.toPeer(telegramPOV).toInputObject(),
|
||||||
|
kicked: true,
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Can't invite user to peer type ${this.peer.type}`)
|
throw new Error(`Can't invite user to peer type ${this.peer.type}`)
|
||||||
}
|
}
|
||||||
|
await telegramPOV.handleUpdate(updates)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user