所以我试图编写一个机器人,在某个时间内给某人一个暂停的角色,这个角色是由主持人在命令中指定的(我知道这个变量被称为小时,即使它是“小时”)它将在几秒钟内完成。我将在稍后修复它。)基本上,它由主持人在消息中说“暂停@personmention numberofhours'它暂停了那段时间内提到的那个人。我遇到的问题是,由于某种原因,机器人不断告诉我在我定义罪犯变量的行上找到的用户对象没有属性角色。据我所知,discord服务器的每个成员都有一个属性角色。我做错了什么导致了以下错误,在这个错误中,它不会认识到罪犯有角色?
以下是我得到的错误反馈:
line 2943, in remove_roles
new_roles = [x.id for x in member.roles]
AttributeError: 'User' object has no attribute 'roles'
然后是我写的脚本的实际代码。
async def suspend(ctx, mention, hours):
offenderid = mention.replace('<','').replace('>','').replace('!','').replace('@','')
person = ctx.message.author
offender = await bot.get_user_info(offenderid)
if "437778896440524800" in [role.id for role in ctx.message.author.roles] or "437778867940229121" in [role.id for role in ctx.message.author.roles] or "437778794879647755" in [role.id for role in ctx.message.author.roles]:
role = discord.utils.get(ctx.message.server.roles, name="Raider")
await bot.remove_roles(offender, role)
role = discord.utils.get(ctx.message.server.roles, name="Suspended Raider")
await bot.add_roles(offender, role)
time.sleep(int(hours))
role = discord.utils.get(ctx.message.server.roles, name="Suspended Raider")
await bot.remove_roles(offender, role)
role = discord.utils.get(ctx.message.server.roles, name="Raider")
await bot.add_roles(offender, role)
答案 0 :(得分:0)
错误告诉您收到的对象是User
而不是Member
。 Member
通常有一个角色(至少everyone
个角色),但User
不会。
您发布的代码并不包含引发错误的实际示例代码,因此我无法重现。但似乎您尝试在User
对象而不是Member
上执行某些代码。
答案 1 :(得分:0)
基本上,如果您尝试在discord机器人上执行操作,则可能会出现此错误。由于漫游器是User
类,而不是Member
类。因此,如果您不想再收到此错误,则可以添加以下行:
if (ctx.)message.author == bot.user: return