Pyrogram原生方法DeleteChatUser调用失败:AttributeError异常排查
解决Pyrogram调用DeleteChatUser时的AttributeError问题
问题情况
调用Pyrogram原生DeleteChatUser方法的代码:
usr = await app.resolve_peer(uid) udata = InputUser(user_id=usr.user_id, access_hash=usr.access_hash) r = await app.invoke(functions.messages.DeleteChatUser(chat_id=chan, user_id=udata)) print(r)
执行后抛出错误:
AttributeError: 'InputPeerChannel' object has no attribute 'to_bytes'
官方文档对该方法的定义:
class pyrogram.raw.functions.messages.DeleteChatUser
删除聊天中的用户并发送服务消息。
参数:
chat_id (int 64-bit) – 聊天ID。
user_id (InputUser) – 要删除的用户ID。
revoke_history (bool, 可选) – 删除该用户在此聊天中的全部历史消息。
问题原因及修复方案
1. chat_id参数类型错误
官方要求chat_id必须传入64位整数类型的聊天ID,但你传入的chan是InputPeerChannel对象,这是错误的。内部处理时会尝试对该对象调用to_bytes方法,而InputPeerChannel没有这个方法,因此触发报错。
2. 无需手动构造InputUser
app.resolve_peer(uid)如果传入的是合法用户ID,返回的本身就是InputUser类型的对象,直接将usr作为user_id参数传入即可,不需要手动实例化InputUser,手动构造反而容易出错。
修正后的代码
usr = await app.resolve_peer(uid) # 确保chan_id是数值型的聊天ID: # 如果chan是InputPeerChannel对象,取chan.id;如果是get_chat返回的对象,取chan.id chan_id = chan.id r = await app.invoke(functions.messages.DeleteChatUser(chat_id=chan_id, user_id=usr)) print(r)
内容的提问来源于stack exchange,提问作者user2956492
相关产品推荐
相关产品推荐

