ba0f3 / telebot.nim

Async Telegram Bot API Client implement in @Nim-Lang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[0.6.4] Permission handling bugs

rupansh opened this issue · comments

Ex-

            let user = await getChatMember(b, $response.chat.id.int, unmuteId)
            if not(user.canSendMessages.isNone or user.canSendMessages.get):
                let perms = ChatPermissions(canSendMessages: some(true), 
                canSendMediaMessages: some(true),
                canSendOtherMessages: some(true),
                canAddWebPagePreviews: some(true))
                discard await restrictChatMember(b, $response.chat.id, unmuteId, perms)

Doesn't work
Expected behaviour: Should unrestrict the group

While

        let perms = ChatPermissions(canSendMessages : some(false))
        discard await restrictChatMember(b, $response.chat.id, response.fromUser.get.id, perms)

works fine

does the first example throw any error?

does the first example throw any error?

nope. But it doesn't change permissions

your first snippet works fine for me

your first snippet works fine for me

Weird. I shall try running it on my server

No luck.
Here's are the procs which have the problem-

proc safeHandler*(b: TeleBot, c: Command) {.async.} =
    let response = c.message
    var failStr: string

    if await isUserAdm(b, response.chat.id.int, response.fromUser.get.id):
        if not (await canBotInfo(b, response)):
            var msg = newMessage(response.chat.id, "I can't change chat permissions!")
            msg.replyToMessageId = response.messageId
            discard await b.send(msg)
            return

        var perm: ChatPermissions
        var mode: string
        if ' ' in response.text.get:
            if response.text.get.split(" ").len > 1:
                mode = response.text.get.split(" ")[^1]
                if mode == "on":
                    perm = ChatPermissions(canSendMediaMessages: some(false))
                elif mode == "off":
                    perm = ChatPermissions(canSendMediaMessages: some(true))
                else:
                    var msg = newMessage(response.chat.id, "Invalid usage! please use on or off")
                    msg.replyToMessageId = response.messageId
                    discard await b.send(msg)
                    return
                    
        discard await setChatPermissions(b, $response.chat.id, perm)
        var msg = newMessage(response.chat.id, "Safe mode " & mode)
        msg.replyToMessageId = response.messageId
        discard await b.send(msg)

/safemode on - Disables all permissions instead of just disabling media
/safemode off - nothing happens, no error, i get safemode off message from bot as well

proc unmuteHandler*(b: TeleBot, c: Command) {.async.} =
    let response = c.message
    var unmuteId = 0
    var failStr = "Reply to a user to unmute them!"
    if not (await canBotRestrict(b, response)):
        var msg = newMessage(response.chat.id, "I can't unmute users!")
        msg.replyToMessageId = response.messageId
        discard await b.send(msg)
        return

    if await isUserAdm(b, response.chat.id.int, response.fromUser.get.id):
        if response.replyToMessage.isSome:
            unmuteId = response.replyToMessage.get.fromUser.get.id
        elif ' ' in response.text.get:
            if response.text.get.split(" ").len > 1:
                unmuteId = parseInt(response.text.get.split(" ")[^1])
                if not (await isUserInChat(b, response.chat.id.int, unmuteId)):
                    unmuteId = 0
                    failStr = "Invalid user id"
    
        if await isUserAdm(b, response.chat.id.int, unmuteId):
            unmuteId = 0
            failStr = "This guy can't be muted lol! so no need to unmute"

        if unmuteId == 0:
            var msg = newMessage(response.chat.id, failStr)
            msg.replyToMessageId = response.messageId
            discard await b.send(msg)
        else:
            let user = await getChatMember(b, $response.chat.id.int, unmuteId)
            if not(user.canSendMessages.isNone or user.canSendMessages.get):
                let perms = ChatPermissions(canSendMessages: some(true), 
                canSendMediaMessages: some(true),
                canSendOtherMessages: some(true),
                canAddWebPagePreviews: some(true))
                discard await restrictChatMember(b, $response.chat.id, unmuteId, perms)
                var msg = newMessage(response.chat.id, "User Un-Muted!")
                msg.replyToMessageId = response.messageId
                discard await b.send(msg)
            else:
                var msg = newMessage(response.chat.id, "User was never muted")
                msg.replyToMessageId = response.messageId
                discard await b.send(msg)
    else:
        var msg = newMessage(response.chat.id, "You aren't Adm :^(")
        msg.replyToMessageId = response.messageId
        discard await b.send(msg)

/unmute - does nothing, no error, I get positive response message though

maybe a bug on server side, I will check it again tonight

there was a typo fix after 0.6.7 but I forgot to make a new release, can you try again w/ new version 0.6.8?

there was a typo fix after 0.6.7 but I forgot to make a new release, can you try again w/ new version 0.6.8?

fixed!