python - 使用命令为多个用户分配角色 - discord.py
问题描述
我正在制作一个不和谐的机器人,我希望机器人在特定频道中运行命令。例如,y
角色被赋予了许多人。我该怎么做呢?
解决方案
条件:
我希望机器人在特定频道中运行命令
- 您需要一个条件来检查命令是否在正确的通道中。
“y”角色分配给 x 个人
- 您需要遍历成员列表。
另一个标准是机器人的最高角色高于它试图分配的任何角色。
代码:
综上所述,让我们编写一个命令来执行此操作,假设这不会在其单独的 cog 中:
import asyncio
from discord.ext import commands
def is_correct_channel(ctx):
return ctx.channel.id == 112233445566778899
@commands.check(is_correct_channel)
@bot.command()
async def giverole(ctx, role: discord.Role, members: commands.Greedy[discord.Member]):
for m in members:
await m.add_roles(role)
await asyncio.sleep(1) # You don't want to get ratelimited!
await ctx.send("Done!")
句法:
!giverole rolename @user#1234 998877665544332211 username
它将角色作为第一个参数(可以是名称、提及或 ID)。将尝试将以下参数转换为成员。
随意添加您希望添加的任何错误处理。例如,可能没有找到角色,或者没有给定成员等。
参考:
commands.check()
TextChannel.id
discord.Role
discord.Member
commands.Greedy
- 这将查看每个参数,尝试将其转换为成员,直到它不再可用。Member.add_roles()
- 是协程,因此需要等待。asyncio.sleep()
- 也是一个协程。Context.send()
- Cog 示例- 将您的机器人分成单独的模块,用于组织和更好地控制功能。
推荐阅读
- http - HTTP 1.1 是否允许在请求仍然流式传输块时发送响应?
- amazon-web-services - AWS CodeBuild Docker 镜像作为基础镜像
- cordova - 冲突 cordova-plugin-googleplus 和 phonegap-plugin-push
- reactjs - 无法读取未定义的属性“XYZ” – 绑定问题
- node.js - Firebase Admin SDK - 错误:“提供给 initializeApp() 的凭据实现”
- r - 使用 ggplot 的 R 条形图
- selenium-webdriver - 是否可以将 selenium 与任何 AI 工具集成,使其能够拥有更好的或 AI(人工智能)方法来定位元素
- vb.net - DataGridView,列作为字符串,列作为整数
- c# - 不同大小写的同名字符串参数被解析为一个以逗号分隔的字符串参数
- javascript - bot框架网络聊天v4中的字体自定义