我有个主意,但不幸的是,我不知道该怎么做,或者这是否可行。
我希望我的不和谐机器人在服务器上为自定义状态下的特定关键字提供排名。如果自定义状态被删除,则应该删除排名。
我的问题是:这可能吗,我该如何在python中创建类似的功能?
答案 0 :(得分:1)
是的,有可能。您可以使用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
。它返回在线或离线或 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()