使用DiscordPy赋予其他用户角色

时间:2020-06-14 15:33:49

标签: python-3.x discord.py

我正在尝试使用命令使用DiscordPy赋予特定角色,但是我使用的每一个search都会带给我相同的答案,但无济于事:1,{{3} },2

很显然,我缺少一个基本部分,但我不知道该怎么做。 3涵盖了一个documentation命令,但这没有说明如何将其用于其他用户。实际上,尝试await add_roles("Team Captain")会产生错误NameError: name 'add_roles' is not defined

我在这里想念什么?为什么add_roles记录下来时不存在,以及如何对其他用户使用它。

这是我目前拥有的(部分),但显然不起作用:

import discord, discord.utils, random, os, re, json
from discord.ext import commands
from discord.utils import get
from dotenv import load_dotenv

client = discord.Client()

load_dotenv()
key = os.getenv('DISCORD_KEY')

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    print('Message from {0.author}: {0.content}'.format(message))

    #Want these commands in the right channel
    if str(message.channel).lower().startswith("bot"):
        if message.content.lower().startswith("$addcaptain"):
            if len(message.mentions) == 0:
                await message.channel.send("Needs a user to give Team Captain role.")
                return
            else:
                await add_roles("Team Captain") #Doesn't work, and I assume would be against the user who sent the message, not the mentioned one

client.run(key)
key = os.getenv('DISCORD_KEY')

1 个答案:

答案 0 :(得分:1)

add_roles是属于Member对象的方法。这意味着您将需要获取目标成员,在您的情况下,message.mentions[0]message.mentions返回成员列表,然后将.add_roles(..)粘贴在其末尾。

此外,在添加角色时,它接受Role对象,而不仅仅是名称或ID。这意味着您需要首先获取角色,这可以通过多种方式完成,但是我要使用的是utils.get()(也可以使用其他方法,例如Guild.get_role())< / p>

这将我们带到您的代码:

@client.event
async def on_message(message):
    # code
    if str(message.channel).lower().startswith("bot"):
        if message.content.lower().startswith("$addcaptain"):
            if len(message.mentions) == 0:
                await message.channel.send("Needs a user to give Team Captain role.")
                return
            else:
                role = discord.utils.get(message.guild.roles, name="Team Captain")
                await message.mentions[0].add_roles(role)

参考:

  • utils.get()
  • Message.mentions-message.mentions[0]获取列表的第一个元素,即所提到的discord.Member
  • Member.add_roles()
  • Guild.get_role()-如果要使用此功能,请执行以下操作:
    role = message.guild.get_role(112233445566778899)
    其中112233445566778899Team Captain的角色ID。