这是我的代码不工作,记住我的bot是在多个服务器.
@bot.event
async def on_member_join(member: discord.Member):
role = member.guild.get_role(746380043344937081)
await member.add_roles(role, reason=None)
这段代码不工作,我已经启用了正确的意图。
您的设置没有问题,但错误在这里:
你不能通过ID定义所需的角色。在每个服务器上,角色的ID是不同的。
如果bot在多个服务器上,您必须进行名称搜索,并且具有该名称的角色必须存在于服务器上或您想要在加入角色后授予该角色的每个服务器上。
下面是一个例子:
from discord.utils import get
intents = discord.Intents.default()
intents.members = True
@bot.event
async def on_member_join(member):
role = discord.utils.get(member.guild.roles, name="Test")
await member.add_roles(role)
print(f"Assigned {role} to {member}!")
记住也要将intent导入到代码中,而不仅仅是激活它们。如果你这样做了,你会没事的。
我们做了什么:
- 通过名称获取角色,而不是ID。
- 导入
discord.utils.get
,可以通过名称获取角色。 - 打印结果看看是否有效