有没有一种方法可以在没有命令的情况下赋予角色



我有一个数据库,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实例,然后赋予成员角色。

相关内容

最新更新