You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过链接使用Python Telegram API将用户机器人加入群组?

解决Telethon无法通过链接加入群组/频道的问题

问题原因

你遇到的错误是因为JoinChannelRequest需要先获取目标群组/频道的实体信息,但对于私有群组/频道,未加入时无法直接通过链接获取实体;即使是公开群组,直接传完整链接也可能无法正确解析。

解决方案

根据群组类型(公开/私有),采用不同的处理方式:

1. 处理私有群组/频道(邀请链接格式:https://t.me/+xxxx)

私有群组需要用ImportChatInviteRequest处理邀请链接,步骤如下:

  • 从链接里提取+后面的邀请码
  • 调用ImportChatInviteRequest完成加入

示例代码:

link = 'https://t.me/+r....'
invite_code = link.split('+')[-1]  # 提取邀请码

client = TelegramClient(session='joiner', api_id=api_id, api_hash=api_hash)
await client.start()  # 确保完成登录流程

# 加入私有群组
result = await client(functions.messages.ImportChatInviteRequest(hash=invite_code))
print("加入成功:", result)

2. 处理公开群组/频道(链接格式:https://t.me/xxxx)

公开群组可以先解析链接对应的实体,再调用JoinChannelRequest:

  • 用get_entity方法解析链接对应的实体
  • 将实体传入JoinChannelRequest执行加入

示例代码:

link = 'https://t.me/public_group'

client = TelegramClient(session='joiner', api_id=api_id, api_hash=api_hash)
await client.start()

# 解析公开群组实体
entity = await client.get_entity(link)
# 加入群组
result = await client(functions.channels.JoinChannelRequest(channel=entity))
print("加入成功:", result)

3. 通用兼容方案(自动判断链接类型)

可以通过链接格式自动区分处理逻辑,适配两种场景:

link = 'https://t.me/+r....'  # 可替换为公开群组链接

client = TelegramClient(session='joiner', api_id=api_id, api_hash=api_hash)
await client.start()

try:
    if '+' in link:  # 判断是否为私有邀请链接
        invite_code = link.split('+')[-1]
        result = await client(functions.messages.ImportChatInviteRequest(hash=invite_code))
    else:
        entity = await client.get_entity(link)
        result = await client(functions.channels.JoinChannelRequest(channel=entity))
    print("加入成功:", result)
except Exception as e:
    print("加入失败:", str(e))

注意事项

  • 私有群组需要确保邀请链接有效且未过期,机器人账号未被群组限制加入
  • 公开群组需要确保机器人没有被目标群组封禁
  • 代码需在异步上下文执行(可使用asyncio.run()包裹整个逻辑)

内容的提问来源于stack exchange,提问作者Artik gnom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:25:22