Add support for kicking Telegram users from Matrix

This commit is contained in:
Tulir Asokan
2017-12-03 22:50:57 +02:00
parent 8a082a4598
commit debcf0dc29
3 changed files with 38 additions and 7 deletions
+1 -1
View File
@@ -62,7 +62,7 @@ does not do this automatically.
* [ ] Power level
* [ ] Membership actions
* [x] Inviting
* [ ] Kicking
* [x] Kicking
* [ ] Joining/leaving
* [ ] Room metadata changes
* [x] Room invites
+28 -3
View File
@@ -494,6 +494,26 @@ class MautrixTelegram {
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.
*
@@ -590,9 +610,14 @@ class MautrixTelegram {
}
const asBotID = this.bridge.getBot().getUserId()
if (evt.type === "m.room.member" && evt.content.membership === "invite") {
await this.handleInvite(user, evt)
return
if (evt.type === "m.room.member") {
if (evt.content.membership === "invite") {
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) {
+9 -3
View File
@@ -448,17 +448,23 @@ class Portal {
}
async kickTelegram(telegramPOV, user) {
let updates
if (this.peer.type === "chat") {
const updates = await telegramPOV.client("messages.deleteChatUser", {
updates = await telegramPOV.client("messages.deleteChatUser", {
chat_id: this.peer.id,
user_id: user.toPeer(telegramPOV).toInputObject(),
})
console.log("Chat kick result:", updates)
} 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 {
throw new Error(`Can't invite user to peer type ${this.peer.type}`)
}
await telegramPOV.handleUpdate(updates)
}
/**