khl.py khl.py
主页
文档
示例
  • khl.py (opens new window)
  • khl.py.docs (opens new window)
KOOK (opens new window)
主页
文档
示例
  • khl.py (opens new window)
  • khl.py.docs (opens new window)
KOOK (opens new window)
  • 机器人

    • 初始化
    • 命令
    • 定时任务
    • 在玩状态
  • 消息

    • 消息类型
    • 上传和发送文件或图片
    • 卡片消息
  • 频道

    • 获取频道对象
    • 主动发送消息
  • 用户

    • 获取机器人用户对象
    • 获取用户对象和发送私聊信息
    • 机器人下线
  • 服务器

    • 获取服务器对象
    • 服务器角色操作
      • 1.给用户上角色
      • 2.给用户下角色
      • 3.更新角色信息
      • 4.创建角色
    • 设置用户昵称
  • 事件

    • 事件基础处理
  • 其他

    • KOOK客户端获取各类ID
    • 多文件注册机器人命令
    • 配置python的venv虚拟环境
    • 获取图片链接
    • 尝试自己调用api
    • OpenSSL本地证书无法获取错误
  • docs
  • 服务器
musnows
2024-01-29
目录
1.给用户上角色
2.给用户下角色
3.更新角色信息
4.创建角色

服务器角色操作

# 1.给用户上角色

给用户上角色有多种方法,你可以直接传入用户id和角色id,也可以先获取用户对象后,再将其传入接口中

# 方法1,都使用ID
guild = await bot.client.fetch_guild("服务器ID")
await guild.grant_role("用户id",100) # 第二个参数是角色id

方法2,使用用户对象,传入grant_role方法中。

# 方法2,使用用户ID
guild = await bot.client.fetch_guild("服务器ID")
guild_user = await guild.fetch_user("用户ID")
await guild.grant_role(guild_user,role_id) # 第二个参数是角色id

在上角色之前,你可以先判断一下用户是否已经拥有了该角色,这样能减少一次无效调用

guild = await bot.client.fetch_guild("服务器ID")
guild_user = await guild.fetch_user("用户ID")
# 用户缺少该角色才给他上
if role_id not in guild_user.roles:
	await guild.grant_role(guild_user,role_id) # 第二个参数是角色id

方法3,user和role都使用对象来传参

# 方法3,使用用户对象和角色对象
role_id = 100 # 假设这是一个角色id
guild = await bot.client.fetch_guild("服务器ID")
guild_user = await guild.fetch_user("用户ID")
guild_roles = await guild.fetch_roles()
# 用户缺少该角色才给他上
if role_id not in guild_user.roles:
    for role in guild_roles:
        if role.id == role_id: # 是我们的目标role_id
            await guild.grant_role(guild_user,role)
            break

很明显,方法3非常复杂,这仅限于你已经获取了服务器角色列表的情况下,才使用这种方式调用。

绝大部分情况下,直接传入用户ID和角色ID是更好的选择。

# 2.给用户下角色

下角色和上角色的操作基本一致,参数也能接受ID或对象,这里就不做演示了。

await guild.revoke_role("用户ID",100) # 第二个参数是角色ID

该函数的返回值示例如下

{'user_id': '用户ID', 'guild_id': '服务器ID', 'roles': [被下掉的角色ID(int)]}

# 3.更新角色信息

khl.py中,更新角色信息的逻辑如下

  • 获取Guild对象
  • 获取Guild内Role列表,并从中取出你需要更新的Role对象
  • 直接对Role对象的成员进行操作
  • 调用update_role更新该角色信息
role_id = 100 # 假设这是一个角色id
guild = await bot.client.fetch_guild("服务器ID")
guild_roles = await guild.fetch_roles()
# 找到我们需要处理的角色对象
for role in guild_roles:
    if role.id == role_id: # 是我们的目标role_id
        # 对这个role的成员进行修改
        ...
        # 更新角色信息
        await guild.update_role(role)
        break

# 4.创建角色

创建角色的参数只有角色名字,并没有更详细的设置项目。

guild = await bot.client.fetch_guild("服务器ID")
role = await guild.create_role("角色名字")

guild.create_role函数的返回值是一个Role对象,你可以在获取这个对象之后,对成员进行操作,编辑你需要的角色信息,再使用guild.update_role函数更新角色信息。

上次更新: 2024/02/16, 02:13:48
获取服务器对象
设置用户昵称

← 获取服务器对象 设置用户昵称→

Artalk ErrorFailed to load comments
TypeError: Failed to fetch


Retry
Theme by Vdoing | Copyright © 2023-2025 khl.py | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式