在 on_member_join 事件中添加 ctx

时间:2021-07-28 06:42:57

标签: python python-3.x discord discord.py

所以我对此很陌生,这是我第一次提问。

我希望我的机器人在成员加入时创建一个新频道,并设置为只有该特定成员可以查看它。我计划添加更多内容,以便在特定时间后删除。我已经这样做了,以便它创建一个频道,但要使用频道权限,我需要拥有无法在 on_member_join 函数中定义的 ctx。

附上代码以供参考,是的,我正在使用齿轮。

@commands.Cog.listener()
  async def on_member_join(self,member : discord.Member):
    ChannelName = member.name
    guild = member.guild
    
    await guild.create_text_channel(name = '{}'.format(ChannelName))
    overwrites = ctx.channel.overwrites_for(ctx.default_role)
    overwrites.read_messages, overwrites.send_messages = False, False
    await ctx.channel.set_permissions(guild.default_role, overwrite=overwrites)
    overwrites = ctx.channel.overwrites_for(ctx.member)
    overwrites.send_messages, overwrites.read_messages = True, True
    await guild.channel.set_permissions(ctx.member, overwrite=overwrites)
    await ctx.send ('Success!!')

1 个答案:

答案 0 :(得分:3)

create_text_channel 返回 TextChannel,您可以使用它来替换 ctx.channel,因为 ctx.channel 是调用命令的通道。对于 default_role,它存在于 Member 中,可以从 member.guild.default_role

访问

下面的代码应该可以工作:

@commands.Cog.listener()
  async def on_member_join(self,member : discord.Member):
    ChannelName = member.name
    guild = member.guild
    
    channel = await guild.create_text_channel(name = '{}'.format(ChannelName))
    overwrites = channel.overwrites_for(member.guild.default_role)
    overwrites.read_messages, overwrites.send_messages = False, False
    await channel.set_permissions(member.guild.default_role, overwrite=overwrites)
    overwrites = channel.overwrites_for(member)
    overwrites.send_messages, overwrites.read_messages = True, True
    await channel.set_permissions(member, overwrite=overwrites)
    await channel.send ('Success!!')