我有一个数据库,其中包含不一致的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("")
有什么想法吗?
答案 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
实例,然后为成员指定角色。