调用Roblox API设置群组成员职位时遭遇SSL.SSLError错误求助
Roblox API 调整群组成员职位SSL错误修复
问题重现
用户代码用于调整Roblox群组成员职位,但抛出SSL错误:
import robloxapi async def grouprank(userId, rankName): # 省略rank-name到role id的映射字典 rankId = dic[rankName] client = robloxapi.Client(cookie=NOT_STUPID_ENOUGH_TO_DISCLOSE) grp = await client.get_group(32409863) await robloxapi.client.Group.set_rank_by_id(grp, userId, rankId) import asyncio lp = asyncio.new_event_loop() lp.run_until_complete(grouprank(2315210162, "Recruit"))
错误信息:
ssl.SSLError: Cannot create a client socket with a PROTOCOL_TLS_SERVER context (_ssl.c:795)
错误原因
直接调用robloxapi.client.Group.set_rank_by_id类方法并传入Group实例,会导致内部SSL上下文配置错误——类方法使用服务端TLS上下文,而客户端请求需要客户端TLS上下文,从而触发SSL创建失败。
修复方案
- 调用实例方法而非类方法:使用
grp实例的set_rank_by_id方法,而非直接调用Group类的同名方法,这是触发SSL错误的核心原因 - 简化事件循环使用:用Python 3.7+支持的
asyncio.run()替代手动创建事件循环,代码更简洁规范 - 确保权限与Cookie有效性:确认传入的Cookie拥有目标群组的"设置成员职位"权限,且未过期
修复后完整代码
import robloxapi import asyncio # 补充rank-name到role id的映射字典 dic = { "Recruit": 123456, # 替换为实际的Recruit对应的rankId # 其他职位映射... } async def grouprank(userId, rankName): rankId = dic[rankName] # 初始化客户端 client = robloxapi.Client(cookie="你的Roblox Cookie") # 替换为有效Cookie # 获取群组实例 grp = await client.get_group(32409863) # 调用实例的set_rank_by_id方法 await grp.set_rank_by_id(userId, rankId) # 执行异步函数 asyncio.run(grouprank(2315210162, "Recruit"))
额外注意事项
- 不要在公开代码中泄露Roblox Cookie,避免账号被盗
- 确保机器人账号拥有目标群组的职位调整权限
- 如果使用Python 3.6及以下版本,需保留手动创建事件循环的写法,但仍需修改为调用实例方法
内容的提问来源于stack exchange,提问作者openwld
相关产品推荐
相关产品推荐

