在Telegram机器人开发中,创建群组是高频需求,但很多开发者对“超级群组”的概念和权限设置仍存在盲区。普通群组升级为超级群组后,才能获得成员权限精细控制、话题模式、慢速模式等高级能力。本文将从零开始,教你如何让机器人创建一个超级群组,并通过API设置各类权限,打造一个功能完整、秩序井然的社群。
一、认识超级群组:为什么需要它?
Telegram的群组分为普通群组和超级群组。普通群组只适合小规模聊天,功能受限;超级群组支持最多20万成员、可设置管理员、权限分级别、支持话题、置顶消息等。绝大多数需要机器人管理的群组,都应使用超级群组。
机器人可以通过API将普通群组升级为超级群组,也可以直接创建超级群组。但注意:Telegram Bot API没有“直接创建超级群组”的接口,只有createNewGroup(创建普通群组),之后调用upgradeToSupergroup升级。不过,更聪明的方式是让机器人先创建一个普通群组,然后自动升级,或者利用supergroup的迁移逻辑。我们将在下面演示标准流程。
二、准备工作:获取Bot Token
要操作机器人,必须先申请一个Bot Token。在Telegram中与@BotFather对话,发送/newbot,按提示设置名称和用户名,即可获得类似123456789:AAF...xxx的Token。记住:Token是机器人的唯一凭证,千万不能泄露。
三、创建超级群组的完整步骤
由于Bot API没有直接创建超级群组的端点,我们推荐以下两段式流程:
3.1 先创建普通群组
调用createNewGroup,需要传入群组成员(至少一个用户的chat_id),可选群组标题。
curl -X POST "https://api.telegram.org/bot<TOKEN>/createNewGroup" -d "title=我的新群组" -d "user_ids=[123456789]"
返回结果会包含一个chat对象,其中的id是普通群组的标识。
3.2 升级为超级群组
拿到普通群组的chat_id后,调用upgradeToSupergroup方法升级。升级后,群组ID会变为负数(例如从-123456789变为-100123456789),且原群组中的消息会保留。
curl -X POST "https://api.telegram.org/bot<TOKEN>/upgradeToSupergroup" -d "chat_id=-123456789"
返回的chat对象的type将变为supergroup,此时超级群组创建成功。
四、设置群组权限:最核心的设置
超级群组的权限设置分为两类:一是对所有用户的默认权限(通过setChatPermissions设置),二是针对单一成员的管理员权限(通过setChatAdministratorCustomTitle等设置)。
4.1 设置默认权限(ChatPermissions)
ChatPermissions是一个对象,包含以下布尔字段:
can_send_messages- 能否发送消息can_send_media_messages- 能否发送媒体(图片、视频等)can_send_polls- 能否发起投票can_send_other_messages- 能否发送贴纸、动图等can_add_web_page_previews- 能否显示链接预览can_change_info- 能否修改群组信息can_invite_users- 能否邀请新成员can_pin_messages- 能否置顶消息can_manage_topics- 能否管理话题(需要群组开启主题模式)
示例:禁止所有群成员发送媒体消息,只允许发文字:
curl -X POST "https://api.telegram.org/bot<TOKEN>/setChatPermissions" \
-d "chat_id=-100123456789" \
-d "permissions={can_send_messages:true, can_send_media_messages:false, can_send_polls:true, can_send_other_messages:false, can_add_web_page_previews:false}"
注意:permissions参数必须以JSON格式传递,推荐在代码中使用对象序列化。
4.2 设置成员权限(restrictChatMember)
当你只针对某个违规用户限制操作,而不是全局限制,使用restrictChatMember方法。例如,让某位成员只能发送文字,不能发图片或链接:
curl -X POST "https://api.telegram.org/bot<TOKEN>/restrictChatMember" \
-d "chat_id=-100123456789" \
-d "user_id=987654321" \
-d "permissions={can_send_messages:true, can_send_media_messages:false, can_add_web_page_previews:false}"
这里的user_id是Telegram用户ID,通过update中的from获得。
4.3 设置管理员权限(promoteChatMember)
要提升某人为管理员,并赋予细粒度的管理能力(如删除消息、封禁等),用promoteChatMember:
curl -X POST "https://api.telegram.org/bot<TOKEN>/promoteChatMember" \
-d "chat_id=-100123456789" \
-d "user_id=987654321" \
-d "is_anonymous=false" \
-d "can_manage_chat=true" \
-d "can_delete_messages=true" \
-d "can_invite_users=true" \
-d "can_restrict_members=true" \
-d "can_pin_messages=true"
管理员可选参数包括:can_manage_chat、can_post_messages(频道才有)、can_edit_messages、can_delete_messages、can_manage_video_chats、can_restrict_members、can_promote_members、can_change_info、can_invite_users、can_pin_messages、can_manage_topics。
五、完整Python示例:创建并设置权限
下面使用python-telegram-bot库实现完整流程。首先安装库:
pip install python-telegram-bot
代码示例(基于v20.x版本):
import asyncio
from telegram import Bot, ChatPermissions
from telegram.error import TelegramError
TOKEN = "YOUR_BOT_TOKEN"
USER_ID = 123456789 # 预先找到一个用户的ID,用于创建群组
async def main():
bot = Bot(token=TOKEN)
# 1. 创建普通群组
try:
chat = await bot.create_new_group(title="我的超级群组", user_ids=[USER_ID])
print(f"普通群组创建成功,ID: {chat.id}")
except TelegramError as e:
print(f"创建失败: {e.message}")
return
# 2. 升级为超级群组
try:
upgraded = await bot.upgrade_to_supergroup(chat.id)
print(f"升级成功,新ID: {upgraded.id}, 类型: {upgraded.type}")
supergroup_id = upgraded.id
except TelegramError as e:
print(f"升级失败: {e.message}")
return
# 3. 设置默认权限:只允许发送文字和投票,禁止媒体与链接预览
permissions = ChatPermissions(
can_send_messages=True,
can_send_media_messages=False,
can_send_polls=True,
can_send_other_messages=False,
can_add_web_page_previews=False
)
try:
await bot.set_chat_permissions(chat_id=supergroup_id, permissions=permissions)
print("默认权限设置成功")
except TelegramError as e:
print(f"设置权限失败: {e.message}")
# 4. 将特定用户提升为管理员(拥有部分管理权限)
try:
await bot.promote_chat_member(
chat_id=supergroup_id,
user_id=USER_ID,
can_manage_chat=True,
can_delete_messages=True,
can_invite_users=True,
can_restrict_members=True
)
print("管理员权限设置成功")
except TelegramError as e:
print(f"提升管理员失败: {e.message}")
if __name__ == "__main__":
asyncio.run(main())
运行前请将TOKEN和USER_ID替换为实际值。
六、常见问题与错误排查
6.1 创建群组时提示“chat not found”
原因通常是目标用户从未与机器人互动。机器人无法主动向陌生人创建群组,必须确保该用户已主动与机器人会话(或先通过邀请链接)。
6.2 升级后群组ID变化
升级前是普通群组的正ID(例如-123),升级后变为-100 + 原ID的绝对值(例如-100123)。后续所有操作必须使用新ID。
6.3 权限设置无效
注意setChatPermissions设置的是群内所有成员的默认权限,但不影响管理员。如果要限制普通成员,确保群组不是“仅管理员可发言”模式。另外,Bot自身的权限(如果它是管理员)也需满足。
6.4 无法设置话题权限
要使用can_manage_topics权限,必须先通过setMyDefaultAdministratorRights或在群组设置中开启“话题”(Topics)功能。
七、进阶建议:更智能的权限管理
- 结合限制封禁:当用户多次违规时,使用
banChatMember临时封禁,到期后自动解除。 - 欢迎语与新成员验证:监听
new_chat_members更新,发送自定义欢迎语并设置初始权限。 - 动态调整权限:在机器人中监听特定命令(如
/mute)来快速对用户进行静音操作。
总结
创建超级群组并精细设置权限是Telegram机器人开发的基石能力。通过本文的步骤,你已经学会调用createNewGroup、upgradeToSupergroup、setChatPermissions和promoteChatMember等核心API。记住:权限分两层——全局默认权限和个别成员权限,灵活搭配即可应对绝大多数场景。在开发中多结合getChat查询当前权限状态,可以避免许多隐蔽的Bug。希望你的机器人能打造出活跃又有序的社群!