我正在尝试制作一个简单的机器人,它将为刚加入服务器的人分配一个角色。
代码:
import discord
import os
from discord.utils import get
bot_acces_token = os.environ['token']
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
@client.event
async def on_member_join(member):
role = discord.utils.get(member.server.roles, id="123456789")
await client.add_roles(member, role)
@client.event
async def on_ready():
print('Bot is ready')
client.run(bot_acces_token)
但不幸的是我收到此错误:
Ignoring exception in on_member_join
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 17, in on_member_join
role = discord.utils.get(member.server.roles, id="123456789")
AttributeError: 'Member' object has no attribute 'server'
答案 0 :(得分:2)
您尝试获得结果的方式已经过时并且已经改变。
您需要更改定义机器人的方式。您需要更改这段代码:
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
您必须使用 Command API
才能使用 event
。将这些行更改为:
client = commands.Bot(command_prefix='!', intents=discord.Intents.all())
在脚本顶部添加导入语句:
from discord.ext import commands
也将其删除:
from discord.utils import get
试试这个:
@client.event
async def on_member_join(member):
role = discord.utils.get(member.guild.roles, id="123456789")
await member.add_roles(role)
您需要使用 member.guild.roles
而不是您实际使用过的那个。您还需要使用 await member.add_roles(role)
而不是您使用的那个。这对你有用。如果仍有错误,请追问!
谢谢! :D
答案 1 :(得分:0)
这就是解决方案:
import discord
from discord.ext import commands
import os
client = commands.Bot(command_prefix='!', intents=discord.Intents.all())
@client.event
async def on_member_join(member):
channel = client.get_channel(1234567)
role = discord.utils.get(member.guild.roles, id=1234567)
await member.add_roles(role)