我正在尝试使用命令使用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')
答案 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)
112233445566778899
是Team Captain
的角色ID。