Discord.py如果成员customstatus包含hi,则指定角色

Discord.py如果成员customstatus包含hi,则指定角色,discord,discord.py,discord.py-rewrite,Discord,Discord.py,Discord.py Rewrite,我正在做一个循环,每5秒检查一次用户状态是否包含“hi”,如果是,则应该给用户一个角色。 我真的不知道怎么做,但也许有人能帮上忙。 我的代码: #以下是我请求的命令的一个小基础。。。 #我希望它能帮助你 @tasks.loop(秒=15) 异步定义状态_角色(): 如果???.lower()中的“hi” #代码来了 #(Idk代码是什么,所以我问你们:D) 成员=ctx.message.author role=get(member.server.roles,name=“Friendly dude

我正在做一个循环,每5秒检查一次用户状态是否包含“hi”,如果是,则应该给用户一个角色。
我真的不知道怎么做,但也许有人能帮上忙。

我的代码:

#以下是我请求的命令的一个小基础。。。
#我希望它能帮助你
@tasks.loop(秒=15)
异步定义状态_角色():
如果???.lower()中的“hi”
#代码来了
#(Idk代码是什么,所以我问你们:D)
成员=ctx.message.author
role=get(member.server.roles,name=“Friendly dude”)
等待bot.add_角色(成员,角色)

您可以使用
成员活动。这将返回成员活动的列表。据我所知,您可以通过
member.avtivities[0].name获得自定义状态。这将返回一个成员自定义活动的字符串

此外,您不能使用
ctx.message.author
。你需要在公会成员中进行迭代,以检查他们的每一项活动

因此,您可以简单地执行以下操作:

@tasks.loop(秒=15)
异步定义状态_角色():
帮会=客户。获取帮会(你的帮会id)
role=get(guild.roles,name='Friendly dude')
[等待成员。为公会中的成员添加角色(角色)。如果成员中的“hi”,则添加成员。活动[0]。名称。下限()
编辑

discord.py 1.5.x中有一些关于
意图的更新。在定义
client=discord.Bot(前缀=“”)
获取公会、频道等之前,需要先定义它

导入不一致
intents=discord.intents().all()
client=discord.Bot(前缀=“”,意图=意图)
编辑2

若成员并没有状态,它将返回一个空元组,这就是为什么您会得到
索引器
。为了防止这种情况,您可以在代码中添加一个简单的if块

async def status_role():
帮会=客户。获取帮会(你的帮会id)
role=get(guild.roles,name='Friendly dude')
[等待成员。为公会中的成员添加_角色(角色)。如果成员.activities[0]和成员.activities[0].name.lower()中的'hi',则添加成员]
还是相同的错误

Unhandled exception in internal background task 'status_role'.
Traceback (most recent call last):
  File "C:\Users\lequi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\ext\tasks\__init__.py", line 101, in _loop
    await self.coro(*args, **kwargs)
  File "C:\Users\lequi\Desktop\Programs\Clipox\ClipoxMain\main.py", line 136, in status_role
    [await member.add_roles(role) for member in guild.members if 'hi' in member.activities[0].name.lower()]
  File "C:\Users\lequi\Desktop\Programs\Clipox\ClipoxMain\main.py", line 136, in <listcomp>
    [await member.add_roles(role) for member in guild.members if 'hi' in member.activities[0].name.lower()]
IndexError: tuple index out of range

内部后台任务“状态\角色”中未处理的异常。
回溯(最近一次呼叫最后一次):
文件“C:\Users\lequi\AppData\Local\Programs\Python\Python38-32\lib\site packages\discord\ext\tasks\\ uuuuu init\uuuuuu.py”,第101行,在循环中
等待自我。coro(*args,**kwargs)
文件“C:\Users\lequi\Desktop\Programs\Clipox\ClipoxMain\main.py”,第136行,处于状态\u角色
[等待成员。为公会中的成员添加角色(角色)。如果成员中的“hi”,则添加成员。活动[0]。名称。下限()
文件“C:\Users\lequi\Desktop\Programs\Clipox\ClipoxMain\main.py”,第136行,在
[等待成员。为公会中的成员添加角色(角色)。如果成员中的“hi”,则添加成员。活动[0]。名称。下限()
索引器错误:元组索引超出范围

查看您的新错误,您将获得一个
索引器
,因为您的一个成员没有活动集,所以
活动[0]
不存在。使用
if语句检查此项。要查看
元组
是否为空,只需执行
if tuple
(因为空列表/元组是
falsy
),因此下面的代码应该可以解决这个问题:

@tasks.loop(seconds=15)
async def status_role():
    guild = client.get_guild(your guilds id) 
    role = get(guild.roles, name='Friendly dude') 
    for member in guild.members:
        if member.activities and 'hi' in member.activities[0].name.lower():
            await member.add_roles(role)
除了上面答案中的片段之外


编辑:显然你没有听到我上面的句子说它应该和另一个答案结合起来,所以我编辑了我的答案&我自己把它结合起来。这应该是您问题的正确答案。

Hmmm,我尝试过,但没有成功错误cam out is Bot就绪:Clipoxmain未处理内部后台任务“状态\角色”中的异常。回溯(最后一次调用):文件“C:\Users\lequi\AppData\Local\Programs\Python\Python38-32\lib\site packages\discord\ext\tasks\u init\uuuu.py”,第101行,在循环等待self.coro(*args,**kwargs)文件“C:\Users\lequi\Desktop\Programs\Clipox\ClipoxMain\ClipoxMain\main.py”,第136行,状态为AttributeError:“非类型”对象没有属性“角色”你的discord.py版本是什么?我使用的是1.5版本吗?仍然有一个代码错误,无法将其发送到此处,因为太长了……你应该将其添加到帖子中,而不是作为答案发布。我将代码编辑为“`@tasks.loop(秒=5)async def status\u role():对于guild.members中的成员:if member.activities和member.activities[0].name.lower():wait member.add_roles(role)``但仍然不起作用抱歉,我是python新手:DUnhandled内部后台任务“status_role”中的异常。回溯(最后一次调用):文件“C:\Users\lequi\AppData\Local\Programs\Python38-32\lib\site packages\discord\ext\tasks\u init\uuuxmain.py”,第101行,在循环等待self.coro(*args,**kwargs)文件“C:\Users\lequi\Desktop\Programs\Clipox\ClipoxMain\main.py”,第134行,成员:名称错误:名称“guild”未定义我说的是“除了上面的代码答案之外”-“guild”变量在该答案中定义。你应该用我的答案替换那里的列表理解([Wait member.add_roles…])。我现在编辑了我的答案以包含全部内容。我的代码``py@tasks.loop(秒=1)异步定义status_role():guild=bot.get_guild(7225712255444785930)role=get(guild.roles,name='susdel')用于guild中的成员。成员:如果member.activities和member.activities[0]中的'hi'。name.lower():wait member.add_roles(角色)内部后台任务“状态\角色”中未处理的异常。回溯(最后一次调用):文件“C:\Users\lequi\AppData\Local\Programs\Python38-32\lib\site packages\discord\ext\tasks\u init\uuu.py”,第101行,在循环wait self.coro(*args,**kwargs)文件“C:\Users\lequi\Desktop\Programs\ClipoxMain\main\main.py”,第137行,如果member.activities和member.activities[0].name.lower()中的“hi”,则处于状态_角色中:AttributeError:“非类型”对象没有属性“lower”