I couldn't give a role to a custom user. DSharp use only a Member on a GrantRoleAsync method
var mainrole = ctx.Guild.GetRole(123456789);
var subrole = ctx.Guild.GetRole(123456789);
if (ctx.Member.Roles.Contains(mainrole))
{
await ctx.Member.GrantRoleAsync(subrole);
var message = new DiscordEmbedBuilder()
{
Color = DiscordColor.Green,
Title = "Role have been gave"
};
await ctx.Channel.SendMessageAsync(message);