autoroles = {}
@client.event
async def on_ready():
global autoroles
with open("autorole.json", "r") as f:
autoroles = json.load(f)
@client.event
async def on_member_join(member):
#my welcome command is also here
await member.add_roles(autoroles[member.guild])
@client.command()
@commands.has_permissions(administrator=True)
async def autorole(ctx, *, role : discord.Role=None):
embed=discord.Embed(color=0x7289da, description=f"**Set autorole to** {role.mention}**?**")
embed.set_footer(text="React with the wave reaction to confirm it!")
msg = await ctx.send(embed=embed)
def checkifnotbot(reaction, user):
return user != client.user
await msg.add_reaction('?')
reaction, user = await client.wait_for("reaction_add", timeout=60.0, check=checkifnotbot)
if str(reaction.emoji) == "?":
embedw=discord.Embed(description=f"?**Autorole set!**\n> Everytime someone joins the server they get the {role.mention} role!", color=0x7289da)
await msg.edit(embed=embedw)
await msg.clear_reactions()
global autoroles
autoroles[str(ctx.guild.id)] = role.id
with open("autorole.json", "w") as f:
json.dump(autoroles, f)
我想要发生的事情:如果有人使用 autorole 命令,一旦有人加入服务器,角色就会被添加(适用于多个 Discord 服务器) 问题:我没有收到任何错误,但只是没有添加角色。我认为这是因为 .add_roles 不需要一个 id 而是一个角色对象。但我不知道如何做到这一点 注意:设置有效,它被添加到 json 文件 https://imgur.com/SRRsJgT 我也试过这个: https://pastebin.com/eCp4HN7F
答案 0 :(得分:1)
我可以看到你的代码中有两个问题,一个是从json中获取角色的id,另一个是添加角色。要添加角色,您需要指定 discord.Role
以使其正常工作。
@client.event
async def on_member_join(member):
role = discord.utils.get(member.guild.roles,
id=autoroles[str(member.guild.id)])
await member.add_roles(role)
看到我使用 str(member.guild.id)
作为您的 json 键是一个字符串。这也将支持多个自动角色。