有没有命令就可以赋予角色的方法吗?

时间:2020-11-06 14:36:21

标签: python discord discord.py

我有一个数据库,其中包含不一致的ID,秒数等 来自游戏服务器的插件正在测量玩家的活动并将其馈送到数据库中

我想知道是否有办法让我的机器人为特定的不和谐ID起作用,只要他的活动大于某个值

ive尝试过这种方法,但是没有用

@tasks.loop(seconds=10)

async def checkDB():
    delete_oldDate()

    list =  get_db_list('players_activity', '*')
    for i in list:
        if str(i[3]) != 'None' and int(i[2]) >= min_activity:
            user = i[3]
            role = discord.utils.get(user.guild.roles, giveawayRole_ID)
            await client.add_role(user, role)
        else:
            print("")

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在命令的内部和外部添加角色的方法相同。 client.add_role不存在,这就是为什么它不起作用的原因。正确的功能是Member.add_roles(list_of_roles)

脱离上下文,我将假设您的user已经是discord.Member实例,因为您将其称为guild属性。您还可以使用Guild.get_role(role_id)获取角色的discord.Role实例。

user = i[3]
role = user.guild.get_role(giveawayRole_ID)
await user.add_roles([role])

编辑:

显然您的用户还不是discord.Member实例,所以您必须首先获得它。不过,您应该从中得到一个错误,而您没有提到。如果user是一个字符串,则user.guild也不应该完全起作用。

首先,不要将其Discord ID存储为Mihái#8090,而应存储其 actual ID,它是一个数字。只要他们使用命令Member.id(将它们放入数据库),或者右键单击它们并在Discord中使用Copy ID,就可以得到此信息。

由于您总是想使用相同的Guild,因此您应该已经将Guild的ID存储在某个位置。

guild_id = 000000000000 # Whatever the ID of your Guild is
guild = client.get_guild(guild_id)
member = guild.get_member(int(i[3]))
role = guild.get_role(giveawayRole_ID)
await member.add_roles([role])

因此,首先获取Guild实例,然后获取该行会中用户的Member实例,再获取Role实例,然后为成员指定角色。