【问题标题】:discord.py give rank for custom statusdiscord.py 给自定义状态排名
【发布时间】:2020-11-05 20:48:46
【问题描述】:

我有一个想法,但不幸的是,我不知道怎么做,或者这是否可行。

我希望我的不和谐机器人在我的服务器上为自定义状态中的特定关键字提供排名。如果自定义状态被删除,则应该删除排名。

我的问题是:这可能吗?如何在 python 中创建类似的功能?

【问题讨论】:

    标签: python python-3.x discord.py discord.py-rewrite


    【解决方案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。它返回 onlineofflinednd(请勿打扰)

    此外,您可以创建一个 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()
    

    【讨论】:

    • 所以要设置角色,我必须将“member.add_roles(role)”更改为“member.add_roles(ROLE-ID-HERE)”吗?
    • 这是我的错。您必须定义角色。您的机器人是仅在 1 个公会上还是在多个公会上?
    • 只有1个公会吗?
    • 如果成员从他的状态中删除关键字,是否会自动删除此角色?也许你可以添加这个,这不应该检测离线用户的不和谐状态。
    • 我在启动时收到此错误:pastebin.com/wk9cFJBf
    猜你喜欢
    • 2021-03-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2021-07-15
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多