EditBannedRequest不适用于私人频道中的漫游器

时间:2020-09-01 12:23:36

标签: telegram telegram-bot telethon

  1. 我尝试将 EditBannedRequest 方法用于私人频道, 当与客户端一起使用时,它工作正常,但是,当我使用机器人时 在通道的管理员权限下,我收到此错误 Main.telethon.errors.rpcerrorlist.BotMethodInvalidError:API 机器人用户的访问受到限制。您尝试调用的方法 无法作为漫游器执行(由CheckChatInviteRequest引起)
  2. 我处理了EditBannedRequest方法以直接接收有效 没有执行get_input_channel和get_input_entity的实体 方法...然后,我打印了为机器人生成的值并 与为客户生成的值进行比较,并且相等。

例如:

在Telegram方法中,我修改了 resolve 函数,以便:

.*
客户端生成的

个值: InputChannel(channel_id = XXXXXXX,access_hash = XXXXXX)

机器人发送的

值: INVITE_ACCESS = [InputChannel(channel_id = XXXXXXX,access_hash = XXXXXXX)] USER = [InputUser(user_id = XXXXXXX,access_hash = -XXXXXXX)]

函数是这样的:

\n

最终错误是这样:

async def resolve(self, client, utils):
        if isinstance(self.channel, InputChannel) and isinstance(self.user_id, InputUser):
            self.channel = self.channel
            self.user_id = self.user_id
        else:
            self.channel = utils.get_input_channel(await client.get_input_entity(self.channel))
            self.user_id = utils.get_input_user(await client.get_input_entity(self.user_id))

有什么方法可以让漫游器在私有渠道中运行EditBannedRequest方法而不会出现问题?

1 个答案:

答案 0 :(得分:2)

机器人可以很好地使用

EditBannedRequest,但是机器人(如错误指示)不能使用CheckChatInviteRequest

access_hash对于每个帐户都是唯一的(帐户A将看到具有哈希123的人C,帐户B将看到具有456的人C)。

您应该使用频道对等(或标记为ID),让Telethon知道您所指的是频道。此外,您应该使用client.edit_permissions,它比原始API更好用:

chat = types.PeerChannel(123)
# chat = -100123  # equivalent, bot-API style channel ID

# Banning `user` from `chat` forever
await client.edit_permissions(chat, user, view_messages=False)