Telethon单客户端能否管控Bot与Userbot?多技术问题咨询
问题解答
一、核心疑问:是否必须用独立客户端操作Bot和个人账号?
不需要单独开两个客户端,但单客户端同一时间只能用一个身份操作——你可以切换身份,但没法同时并行使用Bot和个人账号。如果要同时操作两者,还是得创建两个独立的客户端实例(各自对应不同的会话文件)。
二、单客户端切换身份的注意事项
Telethon的客户端实例绑定一个会话文件,两次start()调用会覆盖当前客户端的授权身份:
- 如果会话文件已经保存了一个授权用户(比如个人账号),再调用
start(phone=...)就会触发你看到的UserWarning——这是正常提示,意思是会话已有授权,不会用传入的手机号重新登录,避免覆盖原有身份。 - 官方文档的示例是演示切换身份的流程,不是同时控制两个身份,不存在文档错误。
三、你遇到的错误解决方法
1. UserWarning: session already had an authorized user
- 若要切换到新的个人账号:先调用
client.log_out()登出旧身份,或者直接删除对应的会话文件,再重新调用start(phone=...) - 若要保留原有授权:直接跳过
start()调用,客户端会自动加载会话里已保存的身份
2. RuntimeError: You must use "async with" if the event loop is running
在异步函数里必须用async with替代同步的with语句,正确写法:
async def main(): async with client: await client.send_message("username", "hello")
3. IDE提示手机号字符串不符合typing.Callable[[], str]类型
start()的phone参数支持两种输入:
- 直接传字符串(部分旧版本Telethon或IDE类型检测可能误判)
- 传一个无参函数返回手机号(适配类型要求),示例:
def get_my_phone(): return "你的手机号" await client.start(phone=get_my_phone)
也可以升级Telethon到最新稳定版,新版本对参数类型的兼容性更好。
内容的提问来源于stack exchange,提问作者Flana Ban
相关产品推荐
相关产品推荐

