我正在通过名称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)
答案 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)