Python Discord bot 在加入时提供角色

时间:2021-05-26 16:45:35

标签: python discord bots

我正在尝试制作一个简单的机器人,它将为刚加入服务器的人分配一个角色。

代码:

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'

2 个答案:

答案 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)