【发布时间】:2020-11-05 20:48:46
【问题描述】:
我有一个想法,但不幸的是,我不知道怎么做,或者这是否可行。
我希望我的不和谐机器人在我的服务器上为自定义状态中的特定关键字提供排名。如果自定义状态被删除,则应该删除排名。
我的问题是:这可能吗?如何在 python 中创建类似的功能?
【问题讨论】:
标签: python python-3.x discord.py discord.py-rewrite
我有一个想法,但不幸的是,我不知道怎么做,或者这是否可行。
我希望我的不和谐机器人在我的服务器上为自定义状态中的特定关键字提供排名。如果自定义状态被删除,则应该删除排名。
我的问题是:这可能吗?如何在 python 中创建类似的功能?
【问题讨论】:
标签: python python-3.x discord.py discord.py-rewrite
是的,这是可能的。您可以使用discord.Member.activity。它返回成员的自定义活动字符串。所以基本上,您可以检查活动是否包含特定关键字,如果是,那么您可以将角色添加到成员。您可以为此创建一个任务来定期检查成员的自定义活动。
@tasks.loop(seconds=120)
async def check_activity():
role = client.guilds[0].get_role(role id)
[await member.add_roles(role) for member in client.get_all_members() if 'specific keyword' in member.activity]
check_activity.start()
编辑
如果你只是想给在线会员角色,你可以使用member.status。它返回 online 或 offline 或 dnd(请勿打扰)。
此外,您可以创建一个 txt 文件来存储您赋予该角色的所有成员,您可以再次检查他们的活动中是否仍有特定关键字。
@tasks.loop(seconds=120)
async def check_activity():
role = client.guilds[0].get_role(role id)
file = open('role_members.txt', 'r')
member_list = [str(member.id) for member in client.get_all_members() if not str(member.status) == 'offline' and 'specific keyword' in member.activity]
for line in file.readlines():
if line[:-1] not in member_list:
member = await client.guilds[0].get_member(int(line))
await member.remove_roles(role)
a_file = open('role_members.txt', 'a')
for member_id in member_list:
await client.guilds[0].get_member(int(member_id)).add_roles(role)
a_file.write(member_id + '\n')
check_activity.start()
【讨论】: