Add support for kicking Telegram users from Matrix
This commit is contained in:
@@ -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
@@ -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
@@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user