【发布时间】:2019-09-12 07:59:31
【问题描述】:
在这里新建 discord.py-rewrite 用户。
我正在编写一个具有不和谐界面的机器人:它连接到多个服务器(公会),我目前需要一个身份验证系统来限制它的使用。 我想我可以获取所有用户角色并在需要时解析它们。所以我做了:
@client.event
async def on_ready():
...
for guild in client.guilds:
for member in guild.members:
for role in member.roles:
if role.name == "Test":
print("USER_ID: %d - ROLE: %s" % (member.id, role.name))
但我不喜欢它。我必须存储这些并且效率不高。此外,我必须刷新后台协同程序以检查新成员是否加入/更改角色。 所以我的问题是:有没有一种简单的方法可以在收到消息时即时检查相互公会的用户角色? 滚动官方 API 获取用户共同公会的唯一方法是 profile() 但作为一个机器人,我得到了一个禁止错误,就像 API 说的那样。
@client.event
async def on_message(message):
...
profile = await message.author.profile()
discord.errors.Forbidden: FORBIDDEN (status code: 403): Bots cannot use this endpoint
(更新)附录:
即使在私信中我也需要检查用户的角色,所以需要获得mutual_guilds
【问题讨论】:
-
您必须创建自己的函数来查找给定用户的共同公会。该函数需要遍历机器人连接的所有公会,并检查用户是否存在于该公会中。也就是说,您在所有公会中寻找用户权限以在私人消息中执行操作似乎很奇怪。这个授权究竟是为了限制什么?让用户向机器人本身注册以获得授权而不是公会角色会更简单吗?如果用户在一个公会中拥有角色但在另一个公会中没有角色会发生什么?
-
如何“向 tbe bot 本身注册以获取授权”会比一些嵌套循环更简单?
-
需要某种外部存储(数据库或文件)。用户执行注册命令,登录到存储,机器人引用存储执行需要“授权”的操作
-
是的,我考虑过这一点,但我会保持用户体验更简单(也就是不需要用户操作)。
-
通过与机器人直接消息执行的命令对用户所在的公会有影响吗?我之前问过这个问题,但是,如果我在一个公会中担任角色,但在另一个公会中没有,会发生什么?
标签: python python-3.x discord discord.py discord.py-rewrite