所以我对此很陌生,这是我第一次提问。
我希望我的机器人在成员加入时创建一个新频道,并设置为只有该特定成员可以查看它。我计划添加更多内容,以便在特定时间后删除。我已经这样做了,以便它创建一个频道,但要使用频道权限,我需要拥有无法在 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!!')
答案 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!!')