我有一个数据库,id不一致,秒数更多一个来自游戏服务器的插件正在测量玩家的活动,并将其输入数据库
我想知道是否有一种方法可以让我的机器人为那个特定的discord id扮演角色,只要他的活动大于某个值
我试过这种方法,但不起作用
@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("")
有什么想法吗?
在命令内外添加角色的方式相同。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
,不如存储他们的实际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
实例,然后赋予成员角色。