Discord.py |如何为每个公会添加自定义角色

时间:2020-07-03 07:48:01

标签: python discord discord.py

我正在通过名称on_member_join处理事件,我想给新角色一个角色,每个公会的角色都不相同,因此我需要公会ID。我有一个json文件,其中有我的行会ID和“自动角色”的角色ID。 role = roles[str(member.guild.id)]

内部出现错误

错误是: 等待member.add_roles(角色)文件 “ C:\ Users \ arman \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ site-packages \ discord \ member.py”, 第641行,在add_roles中 等待请求(guild_id,user_id,role.id,原因=原因)AttributeError:'str'对象没有属性'id'

我的JSON文件,例如:

{ “ 724249401962397767”:“ 724868027241463859” }

#Auto role
@commands.Cog.listener()
async def on_member_join( self, member ):
    emb = discord.Embed( title = '**Here is new member**', colour = discord.Color.green() )
    channel = self.bot.get_channel( config.CHANNEL_ID )

    with open('roles.json', 'r') as f:
        roles = json.load(f)

    role = roles[str(member.guild.id)]

    await member.add_roles( role )

    emb.set_author( name = self.bot.user )
    emb.add_field( name = "**Say Hello to**", value = '**{}**'.format( member.mention ), inline=False )
    emb.set_thumbnail( url = self.bot.user.avatar_url )
    emb.add_field( name = "**Roles is**", value = '**{}**'.format( member.roles ).replace( '[' , '' ).replace( ']' , '' ).replace( '<' , '' ).replace( '>' , '' ).replace( "'" , '' ).replace( 'Role' , '' ).replace( 'id=' , '' ).replace( 'name=' , '' ).replace( '1' , '' ).replace( '2' , '' ).replace( '3' , '' ).replace( '4' , '' ).replace( '5' , '' ).replace( '6' , '' ).replace( '7' , '' ).replace( '8' , '' ).replace( '9' , '' ).replace( '0' , '' ).replace('"', '').replace("ud", ''), inline=False )

    await channel.send( embed = emb)

3 个答案:

答案 0 :(得分:2)

您的on_member_join方法被称为discord.Member的{​​{1}}对象调用。

member对象具有member属性,请参见https://discordpy.readthedocs.io/en/latest/api.html?highlight=member#discord.Member.guild

guild对象来自类guild
discord.Guild对象具有一个名为guild的属性,它是一个整数,请参见https://discordpy.readthedocs.io/en/latest/api.html?highlight=member#discord.Guild.id

所以要回答这个问题:如何获得公会ID

id

您获取gid = member.guild.id 对象的逻辑是错误的。另外,您不需要公会ID即可获得角色。您需要公会对象。

discord.Role

https://discordpy.readthedocs.io/en/latest/api.html?highlight=member#discord.Guild.roles
这些都是公会的角色。

roles = member.guild.roles

https://discordpy.readthedocs.io/en/latest/api.html?highlight=member#discord.Guild.get_role
这将为您提供具有给定角色ID的角色。

尝试阅读并应用文档。盲目编程,关注教程或查看其他人的工作不会带您走远。可以很好地运行该项目,但是最后,文档将拥有您需要的所有知识。

答案 1 :(得分:0)

您可以从rowAny <- function(x) {rowSums(x != 0 & !is.na(x)) > 0} df %>% filter(rowAny(across(where(is.numeric)))) # x y z # 1 a 1 2 # 2 b 0 3 # 3 c 1 NA 对象获取行会ID。 member

答案 2 :(得分:0)

#Auto role
@commands.Cog.listener()
async def on_member_join( self, member ):
    emb = discord.Embed( title = '**Here is new member**', colour = discord.Color.green() )
    with open('messagech.json', 'r') as f:
        messagechs = json.load(f)

    messagech = messagechs[str(member.guild.id)]

    channel = self.bot.get_channel( int(messagech) )

    with open('roles.json', 'r') as f:
        roles = json.load(f)

    role = roles[str(member.guild.id)]

    role = int(role)

    role = discord.utils.get(member.guild.roles, id = role )

    await member.add_roles( role  )

    with open('roles.json', 'w') as f:
        json.dump(roles, f, indent=4)

    emb.set_author( name = self.bot.user )
    emb.add_field( name = "**Say Hello to**", value = '**{}**'.format( member.mention ), inline=False )
    emb.set_thumbnail( url = self.bot.user.avatar_url )
    emb.add_field( name = "**Roles is**", value = '**{}**'.format( member.roles ).replace( '[' , '' ).replace( ']' , '' ).replace( '<' , '' ).replace( '>' , '' ).replace( "'" , '' ).replace( 'Role' , '' ).replace( 'id=' , '' ).replace( 'name=' , '' ).replace( '1' , '' ).replace( '2' , '' ).replace( '3' , '' ).replace( '4' , '' ).replace( '5' , '' ).replace( '6' , '' ).replace( '7' , '' ).replace( '8' , '' ).replace( '9' , '' ).replace( '0' , '' ).replace('"', '').replace("ud", ''), inline=False )

    await channel.send( embed = emb)